From 3111f0eabb813a3e4928306f99b042904934c292 Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Wed, 14 Jun 2017 13:07:25 -0400 Subject: [PATCH] Adding wasm-jit code --- libraries/CMakeLists.txt | 1 + libraries/wasm-jit/.gitignore | 1 + libraries/wasm-jit/.travis.yml | 32 + .../wasm-jit/Include/Emscripten/Emscripten.h | 16 + libraries/wasm-jit/Include/IR/IR.h | 16 + libraries/wasm-jit/Include/IR/Module.h | 184 + .../wasm-jit/Include/IR/OperatorPrinter.h | 100 + libraries/wasm-jit/Include/IR/Operators.h | 678 + libraries/wasm-jit/Include/IR/Types.h | 340 + libraries/wasm-jit/Include/IR/Validate.h | 62 + .../wasm-jit/Include/Inline/BasicTypes.h | 23 + .../Include/Inline/DenseStaticIntSet.h | 141 + libraries/wasm-jit/Include/Inline/Errors.h | 26 + libraries/wasm-jit/Include/Inline/Floats.h | 120 + .../wasm-jit/Include/Inline/Serialization.h | 281 + libraries/wasm-jit/Include/Inline/Timing.h | 38 + libraries/wasm-jit/Include/Inline/UTF8.h | 100 + libraries/wasm-jit/Include/Logging/Logging.h | 26 + .../wasm-jit/Include/Platform/Platform.h | 178 + .../wasm-jit/Include/Runtime/Intrinsics.h | 153 + libraries/wasm-jit/Include/Runtime/Linker.h | 78 + libraries/wasm-jit/Include/Runtime/Runtime.h | 214 + .../wasm-jit/Include/Runtime/TaggedValue.h | 128 + libraries/wasm-jit/Include/WASM/WASM.h | 16 + libraries/wasm-jit/Include/WAST/TestScript.h | 137 + libraries/wasm-jit/Include/WAST/WAST.h | 45 + libraries/wasm-jit/LICENSE | 15 + libraries/wasm-jit/README.md | 100 + .../wasm-jit/Source/Emscripten/Emscripten.cpp | 451 + .../wasm-jit/Source/IR/DisassemblyNames.cpp | 162 + libraries/wasm-jit/Source/IR/Operators.cpp | 15 + libraries/wasm-jit/Source/IR/Types.cpp | 44 + libraries/wasm-jit/Source/IR/Validate.cpp | 688 + libraries/wasm-jit/Source/Logging/Logging.cpp | 45 + libraries/wasm-jit/Source/Platform/POSIX.cpp | 400 + .../wasm-jit/Source/Platform/Windows.cpp | 360 + .../wasm-jit/Source/Programs/Assemble.cpp | 50 + libraries/wasm-jit/Source/Programs/CLI.h | 184 + .../wasm-jit/Source/Programs/Disassemble.cpp | 29 + libraries/wasm-jit/Source/Programs/Test.cpp | 379 + libraries/wasm-jit/Source/Programs/wavm.cpp | 256 + .../wasm-jit/Source/Runtime/Intrinsics.cpp | 166 + .../wasm-jit/Source/Runtime/LLVMEmitIR.cpp | 1604 + libraries/wasm-jit/Source/Runtime/LLVMJIT.cpp | 720 + libraries/wasm-jit/Source/Runtime/LLVMJIT.h | 134 + libraries/wasm-jit/Source/Runtime/Linker.cpp | 69 + libraries/wasm-jit/Source/Runtime/Memory.cpp | 144 + .../Source/Runtime/ModuleInstance.cpp | 207 + .../wasm-jit/Source/Runtime/ObjectGC.cpp | 130 + libraries/wasm-jit/Source/Runtime/Runtime.cpp | 151 + .../wasm-jit/Source/Runtime/RuntimePrivate.h | 156 + libraries/wasm-jit/Source/Runtime/Table.cpp | 138 + libraries/wasm-jit/Source/Runtime/Threads.cpp | 374 + .../Source/Runtime/WAVMIntrinsics.cpp | 200 + libraries/wasm-jit/Source/ThirdParty/dtoa.c | 4370 + .../wasm-jit/Source/ThirdParty/xxhash/LICENSE | 24 + .../Source/ThirdParty/xxhash/xxhash.c | 888 + .../Source/ThirdParty/xxhash/xxhash.h | 293 + .../Source/WASM/WASMSerialization.cpp | 825 + libraries/wasm-jit/Source/WAST/Lexer.cpp | 369 + libraries/wasm-jit/Source/WAST/Lexer.h | 115 + libraries/wasm-jit/Source/WAST/NFA.cpp | 601 + libraries/wasm-jit/Source/WAST/NFA.h | 89 + libraries/wasm-jit/Source/WAST/Parse.cpp | 459 + libraries/wasm-jit/Source/WAST/Parse.h | 219 + .../wasm-jit/Source/WAST/ParseFunction.cpp | 635 + .../wasm-jit/Source/WAST/ParseModule.cpp | 651 + .../wasm-jit/Source/WAST/ParseNumbers.cpp | 398 + libraries/wasm-jit/Source/WAST/ParseTests.cpp | 359 + libraries/wasm-jit/Source/WAST/Print.cpp | 694 + libraries/wasm-jit/Source/WAST/Regexp.cpp | 341 + libraries/wasm-jit/Source/WAST/Regexp.h | 11 + .../wasm-jit/Test/Benchmark/Benchmark.cpp | 43 + .../wasm-jit/Test/Benchmark/Benchmark.wast | 111128 +++++++++++++++ libraries/wasm-jit/Test/Blake2b/blake2b.wast | 1344 + libraries/wasm-jit/Test/fuzz/address.wast | 30 + libraries/wasm-jit/Test/fuzz/echo.wast | 63 + libraries/wasm-jit/Test/fuzz/func_ptrs.wast | 36 + libraries/wasm-jit/Test/fuzz/globals.wast | 49 + libraries/wasm-jit/Test/fuzz/helloworld.wast | 24 + libraries/wasm-jit/Test/fuzz/i32.wast | 369 + libraries/wasm-jit/Test/fuzz/labels.wast | 297 + libraries/wasm-jit/Test/fuzz/loop.wast | 219 + libraries/wasm-jit/Test/fuzz/resizing.wast | 29 + libraries/wasm-jit/Test/fuzz/return.wast | 265 + libraries/wasm-jit/Test/fuzz/tee.wast | 33 + libraries/wasm-jit/Test/fuzz/tee_local.wast | 121 + libraries/wasm-jit/Test/spec/LICENSE | 203 + .../Test/spec/WAVM_known_failures.wast | 214 + libraries/wasm-jit/Test/spec/address.wast | 42 + libraries/wasm-jit/Test/spec/align.wast | 33 + libraries/wasm-jit/Test/spec/binary.wast | 44 + libraries/wasm-jit/Test/spec/block.wast | 299 + libraries/wasm-jit/Test/spec/br.wast | 447 + libraries/wasm-jit/Test/spec/br_if.wast | 321 + libraries/wasm-jit/Test/spec/br_table.wast | 1515 + libraries/wasm-jit/Test/spec/break-drop.wast | 9 + libraries/wasm-jit/Test/spec/call.wast | 242 + .../wasm-jit/Test/spec/call_indirect.wast | 408 + libraries/wasm-jit/Test/spec/comments.wast | Bin 0 -> 701 bytes libraries/wasm-jit/Test/spec/const.wast | 47 + libraries/wasm-jit/Test/spec/conversions.wast | 461 + .../wasm-jit/Test/spec/custom_section.wast | 112 + libraries/wasm-jit/Test/spec/endianness.wast | 217 + libraries/wasm-jit/Test/spec/exports.wast | 198 + libraries/wasm-jit/Test/spec/f32.wast | 2518 + libraries/wasm-jit/Test/spec/f32_bitwise.wast | 369 + libraries/wasm-jit/Test/spec/f32_cmp.wast | 2412 + libraries/wasm-jit/Test/spec/f64.wast | 2518 + libraries/wasm-jit/Test/spec/f64_bitwise.wast | 369 + libraries/wasm-jit/Test/spec/f64_cmp.wast | 2412 + libraries/wasm-jit/Test/spec/fac.wast | 89 + libraries/wasm-jit/Test/spec/float_exprs.wast | 2570 + .../wasm-jit/Test/spec/float_literals.wast | 137 + .../wasm-jit/Test/spec/float_memory.wast | 157 + libraries/wasm-jit/Test/spec/float_misc.wast | 678 + libraries/wasm-jit/Test/spec/forward.wast | 20 + libraries/wasm-jit/Test/spec/func.wast | 517 + libraries/wasm-jit/Test/spec/func_ptrs.wast | 105 + libraries/wasm-jit/Test/spec/get_local.wast | 148 + libraries/wasm-jit/Test/spec/globals.wast | 180 + libraries/wasm-jit/Test/spec/i32.wast | 421 + libraries/wasm-jit/Test/spec/i64.wast | 421 + libraries/wasm-jit/Test/spec/if.wast | 449 + libraries/wasm-jit/Test/spec/imports.wast | 550 + libraries/wasm-jit/Test/spec/int_exprs.wast | 350 + .../wasm-jit/Test/spec/int_literals.wast | 49 + libraries/wasm-jit/Test/spec/labels.wast | 313 + .../wasm-jit/Test/spec/left-to-right.wast | 233 + libraries/wasm-jit/Test/spec/linking.wast | 313 + libraries/wasm-jit/Test/spec/loop.wast | 309 + libraries/wasm-jit/Test/spec/memory.wast | 531 + .../wasm-jit/Test/spec/memory_redundancy.wast | 65 + libraries/wasm-jit/Test/spec/memory_trap.wast | 270 + libraries/wasm-jit/Test/spec/names.wast | 1087 + libraries/wasm-jit/Test/spec/nop.wast | 264 + libraries/wasm-jit/Test/spec/resizing.wast | 60 + libraries/wasm-jit/Test/spec/return.wast | 287 + libraries/wasm-jit/Test/spec/select.wast | 67 + libraries/wasm-jit/Test/spec/set_local.wast | 205 + .../Test/spec/skip-stack-guard-page.wast | 2284 + libraries/wasm-jit/Test/spec/stack.wast | 132 + libraries/wasm-jit/Test/spec/start.wast | 100 + .../wasm-jit/Test/spec/store_retval.wast | 55 + libraries/wasm-jit/Test/spec/switch.wast | 150 + libraries/wasm-jit/Test/spec/tee_local.wast | 236 + libraries/wasm-jit/Test/spec/token.wast | 10 + libraries/wasm-jit/Test/spec/traps.wast | 89 + libraries/wasm-jit/Test/spec/typecheck.wast | 425 + libraries/wasm-jit/Test/spec/unreachable.wast | 282 + .../wasm-jit/Test/spec/unreached-invalid.wast | 625 + libraries/wasm-jit/Test/spec/unwind.wast | 203 + .../Test/spec/utf8-custom-section-id.wast | 1792 + .../wasm-jit/Test/spec/utf8-import-field.wast | 2672 + .../Test/spec/utf8-import-module.wast | 2672 + libraries/wasm-jit/Test/wast/echo.wast | 63 + libraries/wasm-jit/Test/wast/helloworld.wast | 24 + .../Test/wast/skip-stack-guard-page.wast | 2180 + libraries/wasm-jit/Test/wast/tee.wast | 33 + libraries/wasm-jit/Test/zlib/zlib.wast | 48532 +++++++ libraries/wasm-jit/afl/readme | 5 + libraries/wasm-jit/afl/run-afl-fuzz | 50 + libraries/wasm-jit/afl/simplify-crashes | 4 + libraries/wasm-jit/afl/wast.dict | 77 + libraries/wasm-jit/travis-build.sh | 47 + 165 files changed, 224893 insertions(+) create mode 100644 libraries/wasm-jit/.gitignore create mode 100644 libraries/wasm-jit/.travis.yml create mode 100644 libraries/wasm-jit/Include/Emscripten/Emscripten.h create mode 100644 libraries/wasm-jit/Include/IR/IR.h create mode 100644 libraries/wasm-jit/Include/IR/Module.h create mode 100644 libraries/wasm-jit/Include/IR/OperatorPrinter.h create mode 100644 libraries/wasm-jit/Include/IR/Operators.h create mode 100644 libraries/wasm-jit/Include/IR/Types.h create mode 100644 libraries/wasm-jit/Include/IR/Validate.h create mode 100644 libraries/wasm-jit/Include/Inline/BasicTypes.h create mode 100644 libraries/wasm-jit/Include/Inline/DenseStaticIntSet.h create mode 100644 libraries/wasm-jit/Include/Inline/Errors.h create mode 100644 libraries/wasm-jit/Include/Inline/Floats.h create mode 100644 libraries/wasm-jit/Include/Inline/Serialization.h create mode 100644 libraries/wasm-jit/Include/Inline/Timing.h create mode 100644 libraries/wasm-jit/Include/Inline/UTF8.h create mode 100644 libraries/wasm-jit/Include/Logging/Logging.h create mode 100644 libraries/wasm-jit/Include/Platform/Platform.h create mode 100644 libraries/wasm-jit/Include/Runtime/Intrinsics.h create mode 100644 libraries/wasm-jit/Include/Runtime/Linker.h create mode 100644 libraries/wasm-jit/Include/Runtime/Runtime.h create mode 100644 libraries/wasm-jit/Include/Runtime/TaggedValue.h create mode 100644 libraries/wasm-jit/Include/WASM/WASM.h create mode 100644 libraries/wasm-jit/Include/WAST/TestScript.h create mode 100644 libraries/wasm-jit/Include/WAST/WAST.h create mode 100644 libraries/wasm-jit/LICENSE create mode 100644 libraries/wasm-jit/README.md create mode 100644 libraries/wasm-jit/Source/Emscripten/Emscripten.cpp create mode 100644 libraries/wasm-jit/Source/IR/DisassemblyNames.cpp create mode 100644 libraries/wasm-jit/Source/IR/Operators.cpp create mode 100644 libraries/wasm-jit/Source/IR/Types.cpp create mode 100644 libraries/wasm-jit/Source/IR/Validate.cpp create mode 100644 libraries/wasm-jit/Source/Logging/Logging.cpp create mode 100644 libraries/wasm-jit/Source/Platform/POSIX.cpp create mode 100644 libraries/wasm-jit/Source/Platform/Windows.cpp create mode 100644 libraries/wasm-jit/Source/Programs/Assemble.cpp create mode 100644 libraries/wasm-jit/Source/Programs/CLI.h create mode 100644 libraries/wasm-jit/Source/Programs/Disassemble.cpp create mode 100644 libraries/wasm-jit/Source/Programs/Test.cpp create mode 100644 libraries/wasm-jit/Source/Programs/wavm.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/Intrinsics.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/LLVMEmitIR.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/LLVMJIT.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/LLVMJIT.h create mode 100644 libraries/wasm-jit/Source/Runtime/Linker.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/Memory.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/ModuleInstance.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/ObjectGC.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/Runtime.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/RuntimePrivate.h create mode 100644 libraries/wasm-jit/Source/Runtime/Table.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/Threads.cpp create mode 100644 libraries/wasm-jit/Source/Runtime/WAVMIntrinsics.cpp create mode 100644 libraries/wasm-jit/Source/ThirdParty/dtoa.c create mode 100644 libraries/wasm-jit/Source/ThirdParty/xxhash/LICENSE create mode 100644 libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.c create mode 100644 libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.h create mode 100644 libraries/wasm-jit/Source/WASM/WASMSerialization.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Lexer.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Lexer.h create mode 100644 libraries/wasm-jit/Source/WAST/NFA.cpp create mode 100644 libraries/wasm-jit/Source/WAST/NFA.h create mode 100644 libraries/wasm-jit/Source/WAST/Parse.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Parse.h create mode 100644 libraries/wasm-jit/Source/WAST/ParseFunction.cpp create mode 100644 libraries/wasm-jit/Source/WAST/ParseModule.cpp create mode 100644 libraries/wasm-jit/Source/WAST/ParseNumbers.cpp create mode 100644 libraries/wasm-jit/Source/WAST/ParseTests.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Print.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Regexp.cpp create mode 100644 libraries/wasm-jit/Source/WAST/Regexp.h create mode 100644 libraries/wasm-jit/Test/Benchmark/Benchmark.cpp create mode 100644 libraries/wasm-jit/Test/Benchmark/Benchmark.wast create mode 100644 libraries/wasm-jit/Test/Blake2b/blake2b.wast create mode 100644 libraries/wasm-jit/Test/fuzz/address.wast create mode 100644 libraries/wasm-jit/Test/fuzz/echo.wast create mode 100644 libraries/wasm-jit/Test/fuzz/func_ptrs.wast create mode 100644 libraries/wasm-jit/Test/fuzz/globals.wast create mode 100644 libraries/wasm-jit/Test/fuzz/helloworld.wast create mode 100644 libraries/wasm-jit/Test/fuzz/i32.wast create mode 100644 libraries/wasm-jit/Test/fuzz/labels.wast create mode 100644 libraries/wasm-jit/Test/fuzz/loop.wast create mode 100644 libraries/wasm-jit/Test/fuzz/resizing.wast create mode 100644 libraries/wasm-jit/Test/fuzz/return.wast create mode 100644 libraries/wasm-jit/Test/fuzz/tee.wast create mode 100644 libraries/wasm-jit/Test/fuzz/tee_local.wast create mode 100644 libraries/wasm-jit/Test/spec/LICENSE create mode 100644 libraries/wasm-jit/Test/spec/WAVM_known_failures.wast create mode 100644 libraries/wasm-jit/Test/spec/address.wast create mode 100644 libraries/wasm-jit/Test/spec/align.wast create mode 100644 libraries/wasm-jit/Test/spec/binary.wast create mode 100644 libraries/wasm-jit/Test/spec/block.wast create mode 100644 libraries/wasm-jit/Test/spec/br.wast create mode 100644 libraries/wasm-jit/Test/spec/br_if.wast create mode 100644 libraries/wasm-jit/Test/spec/br_table.wast create mode 100644 libraries/wasm-jit/Test/spec/break-drop.wast create mode 100644 libraries/wasm-jit/Test/spec/call.wast create mode 100644 libraries/wasm-jit/Test/spec/call_indirect.wast create mode 100644 libraries/wasm-jit/Test/spec/comments.wast create mode 100644 libraries/wasm-jit/Test/spec/const.wast create mode 100644 libraries/wasm-jit/Test/spec/conversions.wast create mode 100644 libraries/wasm-jit/Test/spec/custom_section.wast create mode 100644 libraries/wasm-jit/Test/spec/endianness.wast create mode 100644 libraries/wasm-jit/Test/spec/exports.wast create mode 100644 libraries/wasm-jit/Test/spec/f32.wast create mode 100644 libraries/wasm-jit/Test/spec/f32_bitwise.wast create mode 100644 libraries/wasm-jit/Test/spec/f32_cmp.wast create mode 100644 libraries/wasm-jit/Test/spec/f64.wast create mode 100644 libraries/wasm-jit/Test/spec/f64_bitwise.wast create mode 100644 libraries/wasm-jit/Test/spec/f64_cmp.wast create mode 100644 libraries/wasm-jit/Test/spec/fac.wast create mode 100644 libraries/wasm-jit/Test/spec/float_exprs.wast create mode 100644 libraries/wasm-jit/Test/spec/float_literals.wast create mode 100644 libraries/wasm-jit/Test/spec/float_memory.wast create mode 100644 libraries/wasm-jit/Test/spec/float_misc.wast create mode 100644 libraries/wasm-jit/Test/spec/forward.wast create mode 100644 libraries/wasm-jit/Test/spec/func.wast create mode 100644 libraries/wasm-jit/Test/spec/func_ptrs.wast create mode 100644 libraries/wasm-jit/Test/spec/get_local.wast create mode 100644 libraries/wasm-jit/Test/spec/globals.wast create mode 100644 libraries/wasm-jit/Test/spec/i32.wast create mode 100644 libraries/wasm-jit/Test/spec/i64.wast create mode 100644 libraries/wasm-jit/Test/spec/if.wast create mode 100644 libraries/wasm-jit/Test/spec/imports.wast create mode 100644 libraries/wasm-jit/Test/spec/int_exprs.wast create mode 100644 libraries/wasm-jit/Test/spec/int_literals.wast create mode 100644 libraries/wasm-jit/Test/spec/labels.wast create mode 100644 libraries/wasm-jit/Test/spec/left-to-right.wast create mode 100644 libraries/wasm-jit/Test/spec/linking.wast create mode 100644 libraries/wasm-jit/Test/spec/loop.wast create mode 100644 libraries/wasm-jit/Test/spec/memory.wast create mode 100644 libraries/wasm-jit/Test/spec/memory_redundancy.wast create mode 100644 libraries/wasm-jit/Test/spec/memory_trap.wast create mode 100644 libraries/wasm-jit/Test/spec/names.wast create mode 100644 libraries/wasm-jit/Test/spec/nop.wast create mode 100644 libraries/wasm-jit/Test/spec/resizing.wast create mode 100644 libraries/wasm-jit/Test/spec/return.wast create mode 100644 libraries/wasm-jit/Test/spec/select.wast create mode 100644 libraries/wasm-jit/Test/spec/set_local.wast create mode 100644 libraries/wasm-jit/Test/spec/skip-stack-guard-page.wast create mode 100644 libraries/wasm-jit/Test/spec/stack.wast create mode 100644 libraries/wasm-jit/Test/spec/start.wast create mode 100644 libraries/wasm-jit/Test/spec/store_retval.wast create mode 100644 libraries/wasm-jit/Test/spec/switch.wast create mode 100644 libraries/wasm-jit/Test/spec/tee_local.wast create mode 100644 libraries/wasm-jit/Test/spec/token.wast create mode 100644 libraries/wasm-jit/Test/spec/traps.wast create mode 100644 libraries/wasm-jit/Test/spec/typecheck.wast create mode 100644 libraries/wasm-jit/Test/spec/unreachable.wast create mode 100644 libraries/wasm-jit/Test/spec/unreached-invalid.wast create mode 100644 libraries/wasm-jit/Test/spec/unwind.wast create mode 100644 libraries/wasm-jit/Test/spec/utf8-custom-section-id.wast create mode 100644 libraries/wasm-jit/Test/spec/utf8-import-field.wast create mode 100644 libraries/wasm-jit/Test/spec/utf8-import-module.wast create mode 100644 libraries/wasm-jit/Test/wast/echo.wast create mode 100644 libraries/wasm-jit/Test/wast/helloworld.wast create mode 100644 libraries/wasm-jit/Test/wast/skip-stack-guard-page.wast create mode 100644 libraries/wasm-jit/Test/wast/tee.wast create mode 100644 libraries/wasm-jit/Test/zlib/zlib.wast create mode 100644 libraries/wasm-jit/afl/readme create mode 100755 libraries/wasm-jit/afl/run-afl-fuzz create mode 100755 libraries/wasm-jit/afl/simplify-crashes create mode 100644 libraries/wasm-jit/afl/wast.dict create mode 100755 libraries/wasm-jit/travis-build.sh diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt index 1a9c3e473..c1eb601cd 100644 --- a/libraries/CMakeLists.txt +++ b/libraries/CMakeLists.txt @@ -1,5 +1,6 @@ add_subdirectory( fc ) add_subdirectory( chainbase ) +add_subdirectory( wasm-jit ) add_subdirectory( binaryen ) add_subdirectory( wasmos ) add_subdirectory( wren ) diff --git a/libraries/wasm-jit/.gitignore b/libraries/wasm-jit/.gitignore new file mode 100644 index 000000000..b45a037cb --- /dev/null +++ b/libraries/wasm-jit/.gitignore @@ -0,0 +1 @@ +Build diff --git a/libraries/wasm-jit/.travis.yml b/libraries/wasm-jit/.travis.yml new file mode 100644 index 000000000..7183ce4a7 --- /dev/null +++ b/libraries/wasm-jit/.travis.yml @@ -0,0 +1,32 @@ +sudo: false + +language: c++ +compiler: + - clang + - gcc + +install: + - if [ "$CXX" = "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi + - if [ "$CXX" = "clang++" ] && [ "$TRAVIS_OS_NAME" != "osx" ]; then export CXX="clang++-3.8" CC="clang-3.8"; fi + +script: ./travis-build.sh + +os: + - linux + - osx + +matrix: + exclude: + - os: osx + compiler: gcc + +addons: + apt: + sources: + - llvm-toolchain-precise-3.8 + - ubuntu-toolchain-r-test + packages: + - gcc-5 + - g++-5 + - libedit-dev + - clang-3.8 \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Emscripten/Emscripten.h b/libraries/wasm-jit/Include/Emscripten/Emscripten.h new file mode 100644 index 000000000..be0114d66 --- /dev/null +++ b/libraries/wasm-jit/Include/Emscripten/Emscripten.h @@ -0,0 +1,16 @@ +#pragma once + +#ifndef EMSCRIPTEN_API + #define EMSCRIPTEN_API DLL_IMPORT +#endif + +#include + +namespace IR { struct Module; } +namespace Runtime { struct ModuleInstance; } + +namespace Emscripten +{ + EMSCRIPTEN_API void initInstance(const IR::Module& module,Runtime::ModuleInstance* moduleInstance); + EMSCRIPTEN_API void injectCommandArgs(const std::vector& argStrings,std::vector& outInvokeArgs); +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/IR/IR.h b/libraries/wasm-jit/Include/IR/IR.h new file mode 100644 index 000000000..3234f7282 --- /dev/null +++ b/libraries/wasm-jit/Include/IR/IR.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Platform/Platform.h" + +#ifndef IR_API + #define IR_API DLL_IMPORT +#endif + +namespace IR +{ + enum { maxMemoryPages = (Uptr)65536 }; + enum { numBytesPerPage = (Uptr)65536 }; + enum { numBytesPerPageLog2 = (Uptr)16 }; + + enum { requireSharedFlagForAtomicOperators = false }; +} diff --git a/libraries/wasm-jit/Include/IR/Module.h b/libraries/wasm-jit/Include/IR/Module.h new file mode 100644 index 000000000..eca1cbde6 --- /dev/null +++ b/libraries/wasm-jit/Include/IR/Module.h @@ -0,0 +1,184 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "IR.h" +#include "Types.h" + +#include + +namespace IR +{ + // An initializer expression: serialized like any other code, but may only be a constant or immutable global + struct InitializerExpression + { + enum class Type : U8 + { + i32_const = 0x41, + i64_const = 0x42, + f32_const = 0x43, + f64_const = 0x44, + get_global = 0x23, + error = 0xff + }; + Type type; + union + { + I32 i32; + I64 i64; + F32 f32; + F64 f64; + Uptr globalIndex; + }; + InitializerExpression(): type(Type::error) {} + InitializerExpression(I32 inI32): type(Type::i32_const), i32(inI32) {} + InitializerExpression(I64 inI64): type(Type::i64_const), i64(inI64) {} + InitializerExpression(F32 inF32): type(Type::f32_const), f32(inF32) {} + InitializerExpression(F64 inF64): type(Type::f64_const), f64(inF64) {} + InitializerExpression(Type inType,Uptr inGlobalIndex): type(inType), globalIndex(inGlobalIndex) { assert(inType == Type::get_global); } + }; + + // A function definition + struct FunctionDef + { + IndexedFunctionType type; + std::vector nonParameterLocalTypes; + std::vector code; + std::vector> branchTables; + }; + + // A table definition + struct TableDef + { + TableType type; + }; + + // A memory definition + struct MemoryDef + { + MemoryType type; + }; + + // A global definition + struct GlobalDef + { + GlobalType type; + InitializerExpression initializer; + }; + + // Describes an object imported into a module or a specific type + template + struct Import + { + Type type; + std::string moduleName; + std::string exportName; + }; + + typedef Import FunctionImport; + typedef Import TableImport; + typedef Import MemoryImport; + typedef Import GlobalImport; + + // Describes an export from a module. The interpretation of index depends on kind + struct Export + { + std::string name; + ObjectKind kind; + Uptr index; + }; + + // A data segment: a literal sequence of bytes that is copied into a Runtime::Memory when instantiating a module + struct DataSegment + { + Uptr memoryIndex; + InitializerExpression baseOffset; + std::vector data; + }; + + // A table segment: a literal sequence of function indices that is copied into a Runtime::Table when instantiating a module + struct TableSegment + { + Uptr tableIndex; + InitializerExpression baseOffset; + std::vector indices; + }; + + // A user-defined module section as an array of bytes + struct UserSection + { + std::string name; + std::vector data; + }; + + // An index-space for imports and definitions of a specific kind. + template + struct IndexSpace + { + std::vector> imports; + std::vector defs; + + Uptr size() const { return imports.size() + defs.size(); } + Type getType(Uptr index) const + { + if(index < imports.size()) { return imports[index].type; } + else { return defs[index - imports.size()].type; } + } + }; + + // A WebAssembly module definition + struct Module + { + std::vector types; + + IndexSpace functions; + IndexSpace tables; + IndexSpace memories; + IndexSpace globals; + + std::vector exports; + std::vector dataSegments; + std::vector tableSegments; + std::vector userSections; + + Uptr startFunctionIndex; + + Module() : startFunctionIndex(UINTPTR_MAX) {} + }; + + // Finds a named user section in a module. + inline bool findUserSection(const Module& module,const char* userSectionName,Uptr& outUserSectionIndex) + { + for(Uptr sectionIndex = 0;sectionIndex < module.userSections.size();++sectionIndex) + { + if(module.userSections[sectionIndex].name == userSectionName) + { + outUserSectionIndex = sectionIndex; + return true; + } + } + return false; + } + + // Maps declarations in a module to names to use in disassembly. + struct DisassemblyNames + { + struct Function + { + std::string name; + std::vector locals; + }; + + std::vector types; + std::vector functions; + std::vector tables; + std::vector memories; + std::vector globals; + }; + + // Looks for a name section in a module. If it exists, deserialize it into outNames. + // If it doesn't exist, fill outNames with sensible defaults. + IR_API void getDisassemblyNames(const Module& module,DisassemblyNames& outNames); + + // Serializes a DisassemblyNames structure and adds it to the module as a name section. + IR_API void setDisassemblyNames(Module& module,const DisassemblyNames& names); +} diff --git a/libraries/wasm-jit/Include/IR/OperatorPrinter.h b/libraries/wasm-jit/Include/IR/OperatorPrinter.h new file mode 100644 index 000000000..cdd4ba123 --- /dev/null +++ b/libraries/wasm-jit/Include/IR/OperatorPrinter.h @@ -0,0 +1,100 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/Serialization.h" +#include "IR.h" +#include "Module.h" +#include "Operators.h" + +namespace IR +{ + struct OperatorPrinter + { + typedef std::string Result; + + OperatorPrinter(const Module& inModule,const FunctionDef& inFunctionDef) + : module(inModule), functionDef(inFunctionDef) {} + + #define VISIT_OPCODE(encoding,name,nameString,Imm,...) \ + std::string name(Imm imm = {}) \ + { \ + return std::string(nameString) + describeImm(imm); \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + std::string unknown(Opcode opcode) + { + return ""; + } + private: + const Module& module; + const FunctionDef& functionDef; + + std::string describeImm(NoImm) { return ""; } + std::string describeImm(ControlStructureImm imm) { return std::string(" : ") + asString(imm.resultType); } + std::string describeImm(BranchImm imm) { return " " + std::to_string(imm.targetDepth); } + std::string describeImm(BranchTableImm imm) + { + std::string result = " " + std::to_string(imm.defaultTargetDepth); + const char* prefix = " ["; + assert(imm.branchTableIndex < functionDef.branchTables.size()); + for(auto depth : functionDef.branchTables[imm.branchTableIndex]) { result += prefix + std::to_string(depth); prefix = ","; } + result += "]"; + return result; + } + template + std::string describeImm(LiteralImm imm) { return " " + asString(imm.value); } + template + std::string describeImm(GetOrSetVariableImm imm) { return " " + std::to_string(imm.variableIndex); } + std::string describeImm(CallImm imm) + { + const std::string typeString = imm.functionIndex >= module.functions.size() + ? "" + : asString(module.types[module.functions.getType(imm.functionIndex).index]); + return " " + std::to_string(imm.functionIndex) + " " + typeString; + } + std::string describeImm(CallIndirectImm imm) + { + const std::string typeString = imm.type.index >= module.types.size() + ? "" + : asString(module.types[imm.type.index]); + return " " + typeString; + } + template + std::string describeImm(LoadOrStoreImm imm) + { + return " align=" + std::to_string(1< + std::string describeImm(LaneIndexImm imm) { return " " + std::to_string(imm.laneIndex); } + template + std::string describeImm(ShuffleImm imm) + { + std::string result = " ["; + const char* prefix = ""; + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + result += prefix + + (imm.laneIndices[laneIndex] < numLanes ? 'a' : 'b') + + std::to_string(imm.laneIndices[laneIndex]); + prefix = ","; + } + return result; + } + #endif + + #if ENABLE_THREADING_PROTOTYPE + std::string describeImm(LaunchThreadImm) { return ""; } + + template + std::string describeImm(AtomicLoadOrStoreImm imm) + { + return " align=" + std::to_string(1< + struct LiteralImm + { + Value value; + }; + + template + struct GetOrSetVariableImm + { + U32 variableIndex; + }; + + struct CallImm + { + U32 functionIndex; + }; + + struct CallIndirectImm + { + IndexedFunctionType type; + }; + + template + struct LoadOrStoreImm + { + U8 alignmentLog2; + U32 offset; + }; + + #if ENABLE_SIMD_PROTOTYPE + template + struct LaneIndexImm + { + U8 laneIndex; + }; + + template + struct ShuffleImm + { + U8 laneIndices[numLanes]; + }; + #endif + + #if ENABLE_THREADING_PROTOTYPE + struct LaunchThreadImm {}; + + template + struct AtomicLoadOrStoreImm + { + U8 alignmentLog2; + U32 offset; + }; + #endif + + // Enumate the WebAssembly operators + + #define ENUM_CONTROL_OPERATORS(visitOp) \ + visitOp(0x02,block,"block",ControlStructureImm,CONTROL) \ + visitOp(0x03,loop,"loop",ControlStructureImm,CONTROL) \ + visitOp(0x04,if_,"if",ControlStructureImm,CONTROL) \ + visitOp(0x05,else_,"else",NoImm,CONTROL) \ + visitOp(0x0b,end,"end",NoImm,CONTROL) + + #define ENUM_PARAMETRIC_OPERATORS(visitOp) \ + visitOp(0x00,unreachable,"unreachable",NoImm,UNREACHABLE) \ + visitOp(0x0c,br,"br",BranchImm,BR) \ + visitOp(0x0d,br_if,"br_if",BranchImm,BR_IF) \ + visitOp(0x0e,br_table,"br_table",BranchTableImm,BR_TABLE) \ + visitOp(0x0f,return_,"return",NoImm,RETURN) \ + visitOp(0x10,call,"call",CallImm,CALL) \ + visitOp(0x11,call_indirect,"call_indirect",CallIndirectImm,CALLINDIRECT) \ + visitOp(0x1a,drop,"drop",NoImm,DROP) \ + visitOp(0x1b,select,"select",NoImm,SELECT) \ + \ + visitOp(0x20,get_local,"get_local",GetOrSetVariableImm,GETLOCAL) \ + visitOp(0x21,set_local,"set_local",GetOrSetVariableImm,SETLOCAL) \ + visitOp(0x22,tee_local,"tee_local",GetOrSetVariableImm,TEELOCAL) \ + visitOp(0x23,get_global,"get_global",GetOrSetVariableImm,GETGLOBAL) \ + visitOp(0x24,set_global,"set_global",GetOrSetVariableImm,SETGLOBAL) + + /* + Possible signatures used by ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS: + NULLARY(T) : () -> T + UNARY(T,U) : T -> U + BINARY(T,U) : (T,T) -> U + LOAD(T) : i32 -> T + STORE(T) : (i32,T) -> () + VECTORSELECT(V) : (V,V,V) -> V + REPLACELANE(S,V) : (V,S) -> V + COMPAREEXCHANGE(T) : (i32,T,T) -> T + WAIT(T) : (i32,T,f64) -> i32 + LAUNCHTHREAD : (i32,i32,i32) -> () + ATOMICRMW : (i32,T) -> T + */ + + #define ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) \ + visitOp(0x01,nop,"nop",NoImm,NULLARY(none)) \ + \ + visitOp(0x3f,current_memory,"current_memory",MemoryImm,NULLARY(i32)) \ + visitOp(0x40,grow_memory,"grow_memory",MemoryImm,UNARY(i32,i32)) \ + \ + visitOp(0x28,i32_load,"i32.load",LoadOrStoreImm<2>,LOAD(i32)) \ + visitOp(0x29,i64_load,"i64.load",LoadOrStoreImm<3>,LOAD(i64)) \ + visitOp(0x2a,f32_load,"f32.load",LoadOrStoreImm<2>,LOAD(f32)) \ + visitOp(0x2b,f64_load,"f64.load",LoadOrStoreImm<3>,LOAD(f64)) \ + visitOp(0x2c,i32_load8_s,"i32.load8_s",LoadOrStoreImm<0>,LOAD(i32)) \ + visitOp(0x2d,i32_load8_u,"i32.load8_u",LoadOrStoreImm<0>,LOAD(i32)) \ + visitOp(0x2e,i32_load16_s,"i32.load16_s",LoadOrStoreImm<1>,LOAD(i32)) \ + visitOp(0x2f,i32_load16_u,"i32.load16_u",LoadOrStoreImm<1>,LOAD(i32)) \ + visitOp(0x30,i64_load8_s,"i64.load8_s",LoadOrStoreImm<0>,LOAD(i64)) \ + visitOp(0x31,i64_load8_u,"i64.load8_u",LoadOrStoreImm<0>,LOAD(i64)) \ + visitOp(0x32,i64_load16_s,"i64.load16_s",LoadOrStoreImm<1>,LOAD(i64)) \ + visitOp(0x33,i64_load16_u,"i64.load16_u",LoadOrStoreImm<1>,LOAD(i64)) \ + visitOp(0x34,i64_load32_s,"i64.load32_s",LoadOrStoreImm<2>,LOAD(i64)) \ + visitOp(0x35,i64_load32_u,"i64.load32_u",LoadOrStoreImm<2>,LOAD(i64)) \ + \ + visitOp(0x36,i32_store,"i32.store",LoadOrStoreImm<2>,STORE(i32)) \ + visitOp(0x37,i64_store,"i64.store",LoadOrStoreImm<3>,STORE(i64)) \ + visitOp(0x38,f32_store,"f32.store",LoadOrStoreImm<2>,STORE(f32)) \ + visitOp(0x39,f64_store,"f64.store",LoadOrStoreImm<3>,STORE(f64)) \ + visitOp(0x3a,i32_store8,"i32.store8",LoadOrStoreImm<0>,STORE(i32)) \ + visitOp(0x3b,i32_store16,"i32.store16",LoadOrStoreImm<1>,STORE(i32)) \ + visitOp(0x3c,i64_store8,"i64.store8",LoadOrStoreImm<0>,STORE(i64)) \ + visitOp(0x3d,i64_store16,"i64.store16",LoadOrStoreImm<1>,STORE(i64)) \ + visitOp(0x3e,i64_store32,"i64.store32",LoadOrStoreImm<2>,STORE(i64)) \ + \ + visitOp(0x41,i32_const,"i32.const",LiteralImm,NULLARY(i32)) \ + visitOp(0x42,i64_const,"i64.const",LiteralImm,NULLARY(i64)) \ + visitOp(0x43,f32_const,"f32.const",LiteralImm,NULLARY(f32)) \ + visitOp(0x44,f64_const,"f64.const",LiteralImm,NULLARY(f64)) \ + \ + visitOp(0x45,i32_eqz,"i32.eqz",NoImm,UNARY(i32,i32)) \ + visitOp(0x46,i32_eq,"i32.eq",NoImm,BINARY(i32,i32)) \ + visitOp(0x47,i32_ne,"i32.ne",NoImm,BINARY(i32,i32)) \ + visitOp(0x48,i32_lt_s,"i32.lt_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x49,i32_lt_u,"i32.lt_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x4a,i32_gt_s,"i32.gt_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x4b,i32_gt_u,"i32.gt_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x4c,i32_le_s,"i32.le_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x4d,i32_le_u,"i32.le_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x4e,i32_ge_s,"i32.ge_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x4f,i32_ge_u,"i32.ge_u",NoImm,BINARY(i32,i32)) \ + \ + visitOp(0x50,i64_eqz,"i64.eqz",NoImm,UNARY(i64,i32)) \ + visitOp(0x51,i64_eq,"i64.eq",NoImm,BINARY(i64,i32)) \ + visitOp(0x52,i64_ne,"i64.ne",NoImm,BINARY(i64,i32)) \ + visitOp(0x53,i64_lt_s,"i64.lt_s",NoImm,BINARY(i64,i32)) \ + visitOp(0x54,i64_lt_u,"i64.lt_u",NoImm,BINARY(i64,i32)) \ + visitOp(0x55,i64_gt_s,"i64.gt_s",NoImm,BINARY(i64,i32)) \ + visitOp(0x56,i64_gt_u,"i64.gt_u",NoImm,BINARY(i64,i32)) \ + visitOp(0x57,i64_le_s,"i64.le_s",NoImm,BINARY(i64,i32)) \ + visitOp(0x58,i64_le_u,"i64.le_u",NoImm,BINARY(i64,i32)) \ + visitOp(0x59,i64_ge_s,"i64.ge_s",NoImm,BINARY(i64,i32)) \ + visitOp(0x5a,i64_ge_u,"i64.ge_u",NoImm,BINARY(i64,i32)) \ + \ + visitOp(0x5b,f32_eq,"f32.eq",NoImm,BINARY(f32,i32)) \ + visitOp(0x5c,f32_ne,"f32.ne",NoImm,BINARY(f32,i32)) \ + visitOp(0x5d,f32_lt,"f32.lt",NoImm,BINARY(f32,i32)) \ + visitOp(0x5e,f32_gt,"f32.gt",NoImm,BINARY(f32,i32)) \ + visitOp(0x5f,f32_le,"f32.le",NoImm,BINARY(f32,i32)) \ + visitOp(0x60,f32_ge,"f32.ge",NoImm,BINARY(f32,i32)) \ + \ + visitOp(0x61,f64_eq,"f64.eq",NoImm,BINARY(f64,i32)) \ + visitOp(0x62,f64_ne,"f64.ne",NoImm,BINARY(f64,i32)) \ + visitOp(0x63,f64_lt,"f64.lt",NoImm,BINARY(f64,i32)) \ + visitOp(0x64,f64_gt,"f64.gt",NoImm,BINARY(f64,i32)) \ + visitOp(0x65,f64_le,"f64.le",NoImm,BINARY(f64,i32)) \ + visitOp(0x66,f64_ge,"f64.ge",NoImm,BINARY(f64,i32)) \ + \ + visitOp(0x67,i32_clz,"i32.clz",NoImm,UNARY(i32,i32)) \ + visitOp(0x68,i32_ctz,"i32.ctz",NoImm,UNARY(i32,i32)) \ + visitOp(0x69,i32_popcnt,"i32.popcnt",NoImm,UNARY(i32,i32)) \ + \ + visitOp(0x6a,i32_add,"i32.add",NoImm,BINARY(i32,i32)) \ + visitOp(0x6b,i32_sub,"i32.sub",NoImm,BINARY(i32,i32)) \ + visitOp(0x6c,i32_mul,"i32.mul",NoImm,BINARY(i32,i32)) \ + visitOp(0x6d,i32_div_s,"i32.div_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x6e,i32_div_u,"i32.div_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x6f,i32_rem_s,"i32.rem_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x70,i32_rem_u,"i32.rem_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x71,i32_and,"i32.and",NoImm,BINARY(i32,i32)) \ + visitOp(0x72,i32_or,"i32.or",NoImm,BINARY(i32,i32)) \ + visitOp(0x73,i32_xor,"i32.xor",NoImm,BINARY(i32,i32)) \ + visitOp(0x74,i32_shl,"i32.shl",NoImm,BINARY(i32,i32)) \ + visitOp(0x75,i32_shr_s,"i32.shr_s",NoImm,BINARY(i32,i32)) \ + visitOp(0x76,i32_shr_u,"i32.shr_u",NoImm,BINARY(i32,i32)) \ + visitOp(0x77,i32_rotl,"i32.rotl",NoImm,BINARY(i32,i32)) \ + visitOp(0x78,i32_rotr,"i32.rotr",NoImm,BINARY(i32,i32)) \ + \ + visitOp(0x79,i64_clz,"i64.clz",NoImm,UNARY(i64,i64)) \ + visitOp(0x7a,i64_ctz,"i64.ctz",NoImm,UNARY(i64,i64)) \ + visitOp(0x7b,i64_popcnt,"i64.popcnt",NoImm,UNARY(i64,i64)) \ + \ + visitOp(0x7c,i64_add,"i64.add",NoImm,BINARY(i64,i64)) \ + visitOp(0x7d,i64_sub,"i64.sub",NoImm,BINARY(i64,i64)) \ + visitOp(0x7e,i64_mul,"i64.mul",NoImm,BINARY(i64,i64)) \ + visitOp(0x7f,i64_div_s,"i64.div_s",NoImm,BINARY(i64,i64)) \ + visitOp(0x80,i64_div_u,"i64.div_u",NoImm,BINARY(i64,i64)) \ + visitOp(0x81,i64_rem_s,"i64.rem_s",NoImm,BINARY(i64,i64)) \ + visitOp(0x82,i64_rem_u,"i64.rem_u",NoImm,BINARY(i64,i64)) \ + visitOp(0x83,i64_and,"i64.and",NoImm,BINARY(i64,i64)) \ + visitOp(0x84,i64_or,"i64.or",NoImm,BINARY(i64,i64)) \ + visitOp(0x85,i64_xor,"i64.xor",NoImm,BINARY(i64,i64)) \ + visitOp(0x86,i64_shl,"i64.shl",NoImm,BINARY(i64,i64)) \ + visitOp(0x87,i64_shr_s,"i64.shr_s",NoImm,BINARY(i64,i64)) \ + visitOp(0x88,i64_shr_u,"i64.shr_u",NoImm,BINARY(i64,i64)) \ + visitOp(0x89,i64_rotl,"i64.rotl",NoImm,BINARY(i64,i64)) \ + visitOp(0x8a,i64_rotr,"i64.rotr",NoImm,BINARY(i64,i64)) \ + \ + visitOp(0x8b,f32_abs,"f32.abs",NoImm,UNARY(f32,f32)) \ + visitOp(0x8c,f32_neg,"f32.neg",NoImm,UNARY(f32,f32)) \ + visitOp(0x8d,f32_ceil,"f32.ceil",NoImm,UNARY(f32,f32)) \ + visitOp(0x8e,f32_floor,"f32.floor",NoImm,UNARY(f32,f32)) \ + visitOp(0x8f,f32_trunc,"f32.trunc",NoImm,UNARY(f32,f32)) \ + visitOp(0x90,f32_nearest,"f32.nearest",NoImm,UNARY(f32,f32)) \ + visitOp(0x91,f32_sqrt,"f32.sqrt",NoImm,UNARY(f32,f32)) \ + \ + visitOp(0x92,f32_add,"f32.add",NoImm,BINARY(f32,f32)) \ + visitOp(0x93,f32_sub,"f32.sub",NoImm,BINARY(f32,f32)) \ + visitOp(0x94,f32_mul,"f32.mul",NoImm,BINARY(f32,f32)) \ + visitOp(0x95,f32_div,"f32.div",NoImm,BINARY(f32,f32)) \ + visitOp(0x96,f32_min,"f32.min",NoImm,BINARY(f32,f32)) \ + visitOp(0x97,f32_max,"f32.max",NoImm,BINARY(f32,f32)) \ + visitOp(0x98,f32_copysign,"f32.copysign",NoImm,BINARY(f32,f32)) \ + \ + visitOp(0x99,f64_abs,"f64.abs",NoImm,UNARY(f64,f64)) \ + visitOp(0x9a,f64_neg,"f64.neg",NoImm,UNARY(f64,f64)) \ + visitOp(0x9b,f64_ceil,"f64.ceil",NoImm,UNARY(f64,f64)) \ + visitOp(0x9c,f64_floor,"f64.floor",NoImm,UNARY(f64,f64)) \ + visitOp(0x9d,f64_trunc,"f64.trunc",NoImm,UNARY(f64,f64)) \ + visitOp(0x9e,f64_nearest,"f64.nearest",NoImm,UNARY(f64,f64)) \ + visitOp(0x9f,f64_sqrt,"f64.sqrt",NoImm,UNARY(f64,f64)) \ + \ + visitOp(0xa0,f64_add,"f64.add",NoImm,BINARY(f64,f64)) \ + visitOp(0xa1,f64_sub,"f64.sub",NoImm,BINARY(f64,f64)) \ + visitOp(0xa2,f64_mul,"f64.mul",NoImm,BINARY(f64,f64)) \ + visitOp(0xa3,f64_div,"f64.div",NoImm,BINARY(f64,f64)) \ + visitOp(0xa4,f64_min,"f64.min",NoImm,BINARY(f64,f64)) \ + visitOp(0xa5,f64_max,"f64.max",NoImm,BINARY(f64,f64)) \ + visitOp(0xa6,f64_copysign,"f64.copysign",NoImm,BINARY(f64,f64)) \ + \ + visitOp(0xa7,i32_wrap_i64,"i32.wrap/i64",NoImm,UNARY(i64,i32)) \ + visitOp(0xa8,i32_trunc_s_f32,"i32.trunc_s/f32",NoImm,UNARY(f32,i32)) \ + visitOp(0xa9,i32_trunc_u_f32,"i32.trunc_u/f32",NoImm,UNARY(f32,i32)) \ + visitOp(0xaa,i32_trunc_s_f64,"i32.trunc_s/f64",NoImm,UNARY(f64,i32)) \ + visitOp(0xab,i32_trunc_u_f64,"i32.trunc_u/f64",NoImm,UNARY(f64,i32)) \ + visitOp(0xac,i64_extend_s_i32,"i64.extend_s/i32",NoImm,UNARY(i32,i64)) \ + visitOp(0xad,i64_extend_u_i32,"i64.extend_u/i32",NoImm,UNARY(i32,i64)) \ + visitOp(0xae,i64_trunc_s_f32,"i64.trunc_s/f32",NoImm,UNARY(f32,i64)) \ + visitOp(0xaf,i64_trunc_u_f32,"i64.trunc_u/f32",NoImm,UNARY(f32,i64)) \ + visitOp(0xb0,i64_trunc_s_f64,"i64.trunc_s/f64",NoImm,UNARY(f64,i64)) \ + visitOp(0xb1,i64_trunc_u_f64,"i64.trunc_u/f64",NoImm,UNARY(f64,i64)) \ + visitOp(0xb2,f32_convert_s_i32,"f32.convert_s/i32",NoImm,UNARY(i32,f32)) \ + visitOp(0xb3,f32_convert_u_i32,"f32.convert_u/i32",NoImm,UNARY(i32,f32)) \ + visitOp(0xb4,f32_convert_s_i64,"f32.convert_s/i64",NoImm,UNARY(i64,f32)) \ + visitOp(0xb5,f32_convert_u_i64,"f32.convert_u/i64",NoImm,UNARY(i64,f32)) \ + visitOp(0xb6,f32_demote_f64,"f32.demote/f64",NoImm,UNARY(f64,f32)) \ + visitOp(0xb7,f64_convert_s_i32,"f64.convert_s/i32",NoImm,UNARY(i32,f64)) \ + visitOp(0xb8,f64_convert_u_i32,"f64.convert_u/i32",NoImm,UNARY(i32,f64)) \ + visitOp(0xb9,f64_convert_s_i64,"f64.convert_s/i64",NoImm,UNARY(i64,f64)) \ + visitOp(0xba,f64_convert_u_i64,"f64.convert_u/i64",NoImm,UNARY(i64,f64)) \ + visitOp(0xbb,f64_promote_f32,"f64.promote/f32",NoImm,UNARY(f32,f64)) \ + visitOp(0xbc,i32_reinterpret_f32,"i32.reinterpret/f32",NoImm,UNARY(f32,i32)) \ + visitOp(0xbd,i64_reinterpret_f64,"i64.reinterpret/f64",NoImm,UNARY(f64,i64)) \ + visitOp(0xbe,f32_reinterpret_i32,"f32.reinterpret/i32",NoImm,UNARY(i32,f32)) \ + visitOp(0xbf,f64_reinterpret_i64,"f64.reinterpret/i64",NoImm,UNARY(i64,f64)) \ + ENUM_SIMD_OPERATORS(visitOp) \ + ENUM_THREADING_OPERATORS(visitOp) + + #if !ENABLE_SIMD_PROTOTYPE + #define ENUM_SIMD_OPERATORS(visitOp) + #else + #define SIMDOP(simdOpIndex) (0xfd00|simdOpIndex) + #define ENUM_SIMD_OPERATORS(visitOp) \ + visitOp(SIMDOP(0),v128_const,"v128.const",LiteralImm,NULLARY(v128)) \ + visitOp(SIMDOP(1),v128_load,"v128.load",LoadOrStoreImm<4>,LOAD(v128)) \ + visitOp(SIMDOP(2),v128_store,"v128.store",LoadOrStoreImm<4>,STORE(v128)) \ + \ + visitOp(SIMDOP(3),i8x16_splat,"i8x16.splat",NoImm,UNARY(i32,v128)) \ + visitOp(SIMDOP(4),i16x8_splat,"i16x8.splat",NoImm,UNARY(i32,v128)) \ + visitOp(SIMDOP(5),i32x4_splat,"i32x4.splat",NoImm,UNARY(i32,v128)) \ + visitOp(SIMDOP(6),i64x2_splat,"i64x2.splat",NoImm,UNARY(i64,v128)) \ + visitOp(SIMDOP(7),f32x4_splat,"f32x4.splat",NoImm,UNARY(f32,v128)) \ + visitOp(SIMDOP(8),f64x2_splat,"f64x2.splat",NoImm,UNARY(f64,v128)) \ + \ + visitOp(SIMDOP(9),i8x16_extract_lane_s,"i8x16.extract_lane_s",LaneIndexImm<16>,UNARY(v128,i32)) \ + visitOp(SIMDOP(10),i8x16_extract_lane_u,"i8x16.extract_lane_u",LaneIndexImm<16>,UNARY(v128,i32)) \ + visitOp(SIMDOP(11),i16x8_extract_lane_s,"i16x8.extract_lane_s",LaneIndexImm<8>,UNARY(v128,i32)) \ + visitOp(SIMDOP(12),i16x8_extract_lane_u,"i16x8.extract_lane_u",LaneIndexImm<8>,UNARY(v128,i32)) \ + visitOp(SIMDOP(13),i32x4_extract_lane,"i32x4.extract_lane",LaneIndexImm<4>,UNARY(v128,i32)) \ + visitOp(SIMDOP(14),i64x2_extract_lane,"i64x2.extract_lane",LaneIndexImm<2>,UNARY(v128,i64)) \ + visitOp(SIMDOP(15),f32x4_extract_lane,"f32x4.extract_lane",LaneIndexImm<4>,UNARY(v128,f32)) \ + visitOp(SIMDOP(16),f64x2_extract_lane,"f64x2.extract_lane",LaneIndexImm<2>,UNARY(v128,f64)) \ + \ + visitOp(SIMDOP(17),i8x16_replace_lane,"i8x16.replace_lane",LaneIndexImm<16>,REPLACELANE(i32,v128)) \ + visitOp(SIMDOP(18),i16x8_replace_lane,"i16x8.replace_lane",LaneIndexImm<8>,REPLACELANE(i32,v128)) \ + visitOp(SIMDOP(19),i32x4_replace_lane,"i32x4.replace_lane",LaneIndexImm<4>,REPLACELANE(i32,v128)) \ + visitOp(SIMDOP(20),i64x2_replace_lane,"i64x2.replace_lane",LaneIndexImm<2>,REPLACELANE(i64,v128)) \ + visitOp(SIMDOP(21),f32x4_replace_lane,"f32x4.replace_lane",LaneIndexImm<4>,REPLACELANE(f32,v128)) \ + visitOp(SIMDOP(22),f64x2_replace_lane,"f64x2.replace_lane",LaneIndexImm<2>,REPLACELANE(f64,v128)) \ + \ + visitOp(SIMDOP(23),v8x16_shuffle,"v8x16.shuffle",ShuffleImm<16>,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(24),i8x16_add,"i8x16.add",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(25),i16x8_add,"i16x8.add",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(26),i32x4_add,"i32x4.add",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(27),i64x2_add,"i64x2.add",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(28),i8x16_sub,"i8x16.sub",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(29),i16x8_sub,"i16x8.sub",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(30),i32x4_sub,"i32x4.sub",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(31),i64x2_sub,"i64x2.sub",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(32),i8x16_mul,"i8x16.mul",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(33),i16x8_mul,"i16x8.mul",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(34),i32x4_mul,"i32x4.mul",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(35),i8x16_neg,"i8x16.neg",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(36),i16x8_neg,"i16x8.neg",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(37),i32x4_neg,"i32x4.neg",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(38),i64x2_neg,"i64x2.neg",NoImm,UNARY(v128,v128)) \ + \ + visitOp(SIMDOP(39),i8x16_add_saturate_s,"i8x16.add_saturate_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(40),i8x16_add_saturate_u,"i8x16.add_saturate_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(41),i16x8_add_saturate_s,"i16x8.add_saturate_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(42),i16x8_add_saturate_u,"i16x8.add_saturate_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(43),i8x16_sub_saturate_s,"i8x16.sub_saturate_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(44),i8x16_sub_saturate_u,"i8x16.sub_saturate_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(45),i16x8_sub_saturate_s,"i16x8.sub_saturate_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(46),i16x8_sub_saturate_u,"i16x8.sub_saturate_u",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(47),i8x16_shl,"i8x16.shl",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(48),i16x8_shl,"i16x8.shl",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(49),i32x4_shl,"i32x4.shl",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(50),i64x2_shl,"i64x2.shl",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(51),i8x16_shr_s,"i8x16.shr_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(52),i8x16_shr_u,"i8x16.shr_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(53),i16x8_shr_s,"i16x8.shr_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(54),i16x8_shr_u,"i16x8.shr_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(55),i32x4_shr_s,"i32x4.shr_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(56),i32x4_shr_u,"i32x4.shr_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(57),i64x2_shr_s,"i64x2.shr_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(58),i64x2_shr_u,"i64x2.shr_u",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(59),v128_and,"v128.and",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(60),v128_or,"v128.or",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(61),v128_xor,"v128.xor",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(62),v128_not,"v128.not",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(63),v128_bitselect,"v128.bitselect",NoImm,VECTORSELECT(v128)) \ + \ + visitOp(SIMDOP(64),i8x16_any_true,"i8x16.any_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(65),i16x8_any_true,"i16x8.any_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(66),i32x4_any_true,"i32x4.any_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(67),i64x2_any_true,"i64x2.any_true",NoImm,UNARY(v128,i32)) \ + \ + visitOp(SIMDOP(68),i8x16_all_true,"i8x16.all_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(69),i16x8_all_true,"i16x8.all_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(70),i32x4_all_true,"i32x4.all_true",NoImm,UNARY(v128,i32)) \ + visitOp(SIMDOP(71),i64x2_all_true,"i64x2.all_true",NoImm,UNARY(v128,i32)) \ + \ + visitOp(SIMDOP(72),i8x16_eq,"i8x16.eq",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(73),i16x8_eq,"i16x8.eq",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(74),i32x4_eq,"i32x4.eq",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(75),f32x4_eq,"f32x4.eq",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(76),f64x2_eq,"f64x2.eq",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(77),i8x16_ne,"i8x16.ne",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(78),i16x8_ne,"i16x8.ne",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(79),i32x4_ne,"i32x4.ne",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(80),f32x4_ne,"f32x4.ne",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(81),f64x2_ne,"f64x2.ne",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(82),i8x16_lt_s,"i8x16.lt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(83),i8x16_lt_u,"i8x16.lt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(84),i16x8_lt_s,"i16x8.lt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(85),i16x8_lt_u,"i16x8.lt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(86),i32x4_lt_s,"i32x4.lt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(87),i32x4_lt_u,"i32x4.lt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(88),f32x4_lt,"f32x4.lt",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(89),f64x2_lt,"f64x2.lt",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(90),i8x16_le_s,"i8x16.le_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(91),i8x16_le_u,"i8x16.le_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(92),i16x8_le_s,"i16x8.le_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(93),i16x8_le_u,"i16x8.le_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(94),i32x4_le_s,"i32x4.le_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(95),i32x4_le_u,"i32x4.le_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(96),f32x4_le,"f32x4.le",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(97),f64x2_le,"f64x2.le",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(98),i8x16_gt_s,"i8x16.gt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(99),i8x16_gt_u,"i8x16.gt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(100),i16x8_gt_s,"i16x8.gt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(101),i16x8_gt_u,"i16x8.gt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(102),i32x4_gt_s,"i32x4.gt_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(103),i32x4_gt_u,"i32x4.gt_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(104),f32x4_gt,"f32x4.gt",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(105),f64x2_gt,"f64x2.gt",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(106),i8x16_ge_s,"i8x16.ge_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(107),i8x16_ge_u,"i8x16.ge_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(108),i16x8_ge_s,"i16x8.ge_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(109),i16x8_ge_u,"i16x8.ge_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(110),i32x4_ge_s,"i32x4.ge_s",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(111),i32x4_ge_u,"i32x4.ge_u",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(112),f32x4_ge,"f32x4.ge",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(113),f64x2_ge,"f64x2.ge",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(114),f32x4_neg,"f32x4.neg",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(115),f64x2_neg,"f64x2.neg",NoImm,UNARY(v128,v128)) \ + \ + visitOp(SIMDOP(116),f32x4_abs,"f32x4.abs",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(117),f64x2_abs,"f64x2.abs",NoImm,UNARY(v128,v128)) \ + \ + visitOp(SIMDOP(118),f32x4_min,"f32x4.min",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(119),f64x2_min,"f64x2.min",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(120),f32x4_max,"f32x4.max",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(121),f64x2_max,"f64x2.max",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(122),f32x4_add,"f32x4.add",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(123),f64x2_add,"f64x2.add",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(124),f32x4_sub,"f32x4.sub",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(125),f64x2_sub,"f64x2.sub",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(126),f32x4_div,"f32x4.div",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(127),f64x2_div,"f64x2.div",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(128),f32x4_mul,"f32x4.mul",NoImm,BINARY(v128,v128)) \ + visitOp(SIMDOP(129),f64x2_mul,"f64x2.mul",NoImm,BINARY(v128,v128)) \ + \ + visitOp(SIMDOP(130),f32x4_sqrt,"f32x4.sqrt",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(131),f64x2_sqrt,"f64x2.sqrt",NoImm,UNARY(v128,v128)) \ + \ + visitOp(SIMDOP(132),f32x4_convert_s_i32x4,"f32x4.convert_s/i32x4",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(133),f32x4_convert_u_i32x4,"f32x4.convert_u/i32x4",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(134),f64x2_convert_s_i64x2,"f64x2.convert_s/i64x2",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(135),f64x2_convert_u_i64x2,"f64x2.convert_u/i64x2",NoImm,UNARY(v128,v128)) \ + \ + visitOp(SIMDOP(136),i32x4_trunc_s_f32x4_sat,"i32x4.trunc_s/f32x4:sat",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(137),i32x4_trunc_u_f32x4_sat,"i32x4.trunc_u/f32x4:sat",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(138),i64x2_trunc_s_f64x2_sat,"i64x2.trunc_s/f64x2:sat",NoImm,UNARY(v128,v128)) \ + visitOp(SIMDOP(139),i64x2_trunc_u_f64x2_sat,"i64x2.trunc_u/f64x2:sat",NoImm,UNARY(v128,v128)) + #endif + + #if !ENABLE_THREADING_PROTOTYPE + #define ENUM_THREADING_OPERATORS(visitOp) + #else + #define ENUM_THREADING_OPERATORS(visitOp) \ + visitOp(0xc0,i32_extend_s_i8,"i32.extend_s/i8",NoImm,UNARY(i32,i32)) \ + visitOp(0xc1,i32_extend_s_i16,"i32.extend_s/i16",NoImm,UNARY(i32,i32)) \ + visitOp(0xc2,i64_extend_s_i8,"i64.extend_s/i8",NoImm,UNARY(i64,i64)) \ + visitOp(0xc3,i64_extend_s_i16,"i64.extend_s/i16",NoImm,UNARY(i64,i64)) \ + \ + visitOp(0xfe01,wake,"wake",AtomicLoadOrStoreImm<2>,BINARY(i32,i32)) \ + visitOp(0xfe02,i32_wait,"i32.wait",AtomicLoadOrStoreImm<2>,WAIT(i32)) \ + visitOp(0xfe03,i64_wait,"i64.wait",AtomicLoadOrStoreImm<3>,WAIT(i64)) \ + visitOp(0xfe04,launch_thread,"launch_thread",LaunchThreadImm,LAUNCHTHREAD) \ + \ + visitOp(0xfe09,i32_atomic_rmw_xchg,"i32.atomic.rmw.xchg",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe0a,i64_atomic_rmw_xchg,"i64.atomic.rmw.xchg",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe0c,i32_atomic_rmw8_u_xchg,"i32.atomic.rmw8_u.xchg",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe0e,i32_atomic_rmw16_u_xchg,"i32.atomic.rmw16_u.xchg",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe10,i64_atomic_rmw8_u_xchg,"i64.atomic.rmw8_u.xchg",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe12,i64_atomic_rmw16_u_xchg,"i64.atomic.rmw16_u.xchg",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe14,i64_atomic_rmw32_u_xchg,"i64.atomic.rmw32_u.xchg",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) \ + \ + visitOp(0xfe15,i32_atomic_rmw_cmpxchg,"i32.atomic.rmw.cmpxchg",AtomicLoadOrStoreImm<2>,COMPAREEXCHANGE(i32)) \ + visitOp(0xfe16,i64_atomic_rmw_cmpxchg,"i64.atomic.rmw.cmpxchg",AtomicLoadOrStoreImm<3>,COMPAREEXCHANGE(i64)) \ + visitOp(0xfe18,i32_atomic_rmw8_u_cmpxchg,"i32.atomic.rmw8_u.cmpxchg",AtomicLoadOrStoreImm<0>,COMPAREEXCHANGE(i32)) \ + visitOp(0xfe1a,i32_atomic_rmw16_u_cmpxchg,"i32.atomic.rmw16_u.cmpxchg",AtomicLoadOrStoreImm<1>,COMPAREEXCHANGE(i32)) \ + visitOp(0xfe1c,i64_atomic_rmw8_u_cmpxchg,"i64.atomic.rmw8_u.cmpxchg",AtomicLoadOrStoreImm<0>,COMPAREEXCHANGE(i64)) \ + visitOp(0xfe1e,i64_atomic_rmw16_u_cmpxchg,"i64.atomic.rmw16_u.cmpxchg",AtomicLoadOrStoreImm<1>,COMPAREEXCHANGE(i64)) \ + visitOp(0xfe20,i64_atomic_rmw32_u_cmpxchg,"i64.atomic.rmw32_u.cmpxchg",AtomicLoadOrStoreImm<2>,COMPAREEXCHANGE(i64)) \ + \ + visitOp(0xfe21,i32_atomic_load,"i32.atomic.load",AtomicLoadOrStoreImm<2>,LOAD(i32)) \ + visitOp(0xfe22,i64_atomic_load,"i64.atomic.load",AtomicLoadOrStoreImm<3>,LOAD(i64)) \ + visitOp(0xfe23,i32_atomic_load8_u,"i32.atomic.load8_u",AtomicLoadOrStoreImm<0>,LOAD(i32)) \ + visitOp(0xfe24,i32_atomic_load16_u,"i32.atomic.load16_u",AtomicLoadOrStoreImm<1>,LOAD(i32)) \ + visitOp(0xfe25,i64_atomic_load8_u,"i64.atomic.load8_u",AtomicLoadOrStoreImm<0>,LOAD(i64)) \ + visitOp(0xfe26,i64_atomic_load16_u,"i64.atomic.load16_u",AtomicLoadOrStoreImm<1>,LOAD(i64)) \ + visitOp(0xfe27,i64_atomic_load32_u,"i64.atomic.load32_u",AtomicLoadOrStoreImm<2>,LOAD(i64)) \ + visitOp(0xfe28,i32_atomic_store,"i32.atomic.store",AtomicLoadOrStoreImm<2>,STORE(i32)) \ + visitOp(0xfe29,i64_atomic_store,"i64.atomic.store",AtomicLoadOrStoreImm<3>,STORE(i64)) \ + visitOp(0xfe2a,f32_atomic_store,"f32.atomic.store",AtomicLoadOrStoreImm<2>,STORE(f32)) \ + visitOp(0xfe2b,f64_atomic_store,"f64.atomic.store",AtomicLoadOrStoreImm<3>,STORE(f64)) \ + visitOp(0xfe2c,i32_atomic_store8,"i32.atomic.store8",AtomicLoadOrStoreImm<0>,STORE(i32)) \ + visitOp(0xfe2d,i32_atomic_store16,"i32.atomic.store16",AtomicLoadOrStoreImm<1>,STORE(i32)) \ + visitOp(0xfe2e,i64_atomic_store8,"i64.atomic.store8",AtomicLoadOrStoreImm<0>,STORE(i64)) \ + visitOp(0xfe2f,i64_atomic_store16,"i64.atomic.store16",AtomicLoadOrStoreImm<1>,STORE(i64)) \ + visitOp(0xfe30,i64_atomic_store32,"i64.atomic.store32",AtomicLoadOrStoreImm<2>,STORE(i64)) \ + \ + visitOp(0xfe3f,i32_atomic_rmw_add,"i32.atomic.rmw.add",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe40,i64_atomic_rmw_add,"i64.atomic.rmw.add",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe42,i32_atomic_rmw8_u_add,"i32.atomic.rmw8_u.add",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe44,i32_atomic_rmw16_u_add,"i32.atomic.rmw16_u.add",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe46,i64_atomic_rmw8_u_add,"i64.atomic.rmw8_u.add",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe48,i64_atomic_rmw16_u_add,"i64.atomic.rmw16_u.add",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe4a,i64_atomic_rmw32_u_add,"i64.atomic.rmw32_u.add",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) \ + \ + visitOp(0xfe4b,i32_atomic_rmw_sub,"i32.atomic.rmw.sub",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe4c,i64_atomic_rmw_sub,"i64.atomic.rmw.sub",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe4e,i32_atomic_rmw8_u_sub,"i32.atomic.rmw8_u.sub",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe50,i32_atomic_rmw16_u_sub,"i32.atomic.rmw16_u.sub",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe52,i64_atomic_rmw8_u_sub,"i64.atomic.rmw8_u.sub",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe54,i64_atomic_rmw16_u_sub,"i64.atomic.rmw16_u.sub",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe56,i64_atomic_rmw32_u_sub,"i64.atomic.rmw32_u.sub",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) \ + \ + visitOp(0xfe57,i32_atomic_rmw_and,"i32.atomic.rmw.and",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe58,i64_atomic_rmw_and,"i64.atomic.rmw.and",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe5a,i32_atomic_rmw8_u_and,"i32.atomic.rmw8_u.and",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe5c,i32_atomic_rmw16_u_and,"i32.atomic.rmw16_u.and",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe5e,i64_atomic_rmw8_u_and,"i64.atomic.rmw8_u.and",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe60,i64_atomic_rmw16_u_and,"i64.atomic.rmw16_u.and",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe62,i64_atomic_rmw32_u_and,"i64.atomic.rmw32_u.and",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) \ + \ + visitOp(0xfe63,i32_atomic_rmw_or,"i32.atomic.rmw.or",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe64,i64_atomic_rmw_or,"i64.atomic.rmw.or",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe66,i32_atomic_rmw8_u_or,"i32.atomic.rmw8_u.or",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe68,i32_atomic_rmw16_u_or,"i32.atomic.rmw16_u.or",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe6a,i64_atomic_rmw8_u_or,"i64.atomic.rmw8_u.or",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe6c,i64_atomic_rmw16_u_or,"i64.atomic.rmw16_u.or",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe6e,i64_atomic_rmw32_u_or,"i64.atomic.rmw32_u.or",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) \ + \ + visitOp(0xfe6f,i32_atomic_rmw_xor,"i32.atomic.rmw.xor",AtomicLoadOrStoreImm<2>,ATOMICRMW(i32)) \ + visitOp(0xfe70,i64_atomic_rmw_xor,"i64.atomic.rmw.xor",AtomicLoadOrStoreImm<3>,ATOMICRMW(i64)) \ + visitOp(0xfe72,i32_atomic_rmw8_u_xor,"i32.atomic.rmw8_u.xor",AtomicLoadOrStoreImm<0>,ATOMICRMW(i32)) \ + visitOp(0xfe74,i32_atomic_rmw16_u_xor,"i32.atomic.rmw16_u.xor",AtomicLoadOrStoreImm<1>,ATOMICRMW(i32)) \ + visitOp(0xfe76,i64_atomic_rmw8_u_xor,"i64.atomic.rmw8_u.xor",AtomicLoadOrStoreImm<0>,ATOMICRMW(i64)) \ + visitOp(0xfe78,i64_atomic_rmw16_u_xor,"i64.atomic.rmw16_u.xor",AtomicLoadOrStoreImm<1>,ATOMICRMW(i64)) \ + visitOp(0xfe7a,i64_atomic_rmw32_u_xor,"i64.atomic.rmw32_u.xor",AtomicLoadOrStoreImm<2>,ATOMICRMW(i64)) + #endif + + #define ENUM_NONCONTROL_OPERATORS(visitOp) \ + ENUM_PARAMETRIC_OPERATORS(visitOp) \ + ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(visitOp) + + #define ENUM_OPERATORS(visitOp) \ + ENUM_NONCONTROL_OPERATORS(visitOp) \ + ENUM_CONTROL_OPERATORS(visitOp) + + enum class Opcode : U16 + { + #define VISIT_OPCODE(opcode,name,...) name = opcode, + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + maxSingleByteOpcode = 0xcf, + }; + + PACKED_STRUCT( + template + struct OpcodeAndImm + { + Opcode opcode; + Imm imm; + }); + + // Specialize for the empty immediate structs so they don't take an extra byte of space. + template<> + struct OpcodeAndImm + { + union + { + Opcode opcode; + NoImm imm; + }; + }; + template<> + struct OpcodeAndImm + { + union + { + Opcode opcode; + MemoryImm imm; + }; + }; + + // Decodes an operator from an input stream and dispatches by opcode. + struct OperatorDecoderStream + { + OperatorDecoderStream(const std::vector& codeBytes) + : nextByte(codeBytes.data()), end(codeBytes.data()+codeBytes.size()) {} + + operator bool() const { return nextByte < end; } + + template + typename Visitor::Result decodeOp(Visitor& visitor) + { + assert(nextByte + sizeof(Opcode) <= end); + Opcode opcode = *(Opcode*)nextByte; + switch(opcode) + { + #define VISIT_OPCODE(opcode,name,nameString,Imm,...) \ + case Opcode::name: \ + { \ + assert(nextByte + sizeof(OpcodeAndImm) <= end); \ + OpcodeAndImm* encodedOperator = (OpcodeAndImm*)nextByte; \ + nextByte += sizeof(OpcodeAndImm); \ + return visitor.name(encodedOperator->imm); \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + default: + nextByte += sizeof(Opcode); + return visitor.unknown(opcode); + } + } + + template + typename Visitor::Result decodeOpWithoutConsume(Visitor& visitor) + { + const U8* savedNextByte = nextByte; + typename Visitor::Result result = decodeOp(visitor); + nextByte = savedNextByte; + return result; + } + + private: + + const U8* nextByte; + const U8* end; + }; + + // Encodes an operator to an output stream. + struct OperatorEncoderStream + { + OperatorEncoderStream(Serialization::OutputStream& inByteStream): byteStream(inByteStream) {} + + #define VISIT_OPCODE(_,name,nameString,Imm,...) \ + void name(Imm imm = {}) \ + { \ + OpcodeAndImm* encodedOperator = (OpcodeAndImm*)byteStream.advance(sizeof(OpcodeAndImm)); \ + encodedOperator->opcode = Opcode::name; \ + encodedOperator->imm = imm; \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + private: + Serialization::OutputStream& byteStream; + }; + + IR_API const char* getOpcodeName(Opcode opcode); +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/IR/Types.h b/libraries/wasm-jit/Include/IR/Types.h new file mode 100644 index 000000000..607e2530b --- /dev/null +++ b/libraries/wasm-jit/Include/IR/Types.h @@ -0,0 +1,340 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "IR.h" + +#include +#include + +namespace IR +{ + // The type of a WebAssembly operand + enum class ValueType : U8 + { + any = 0, + i32 = 1, + i64 = 2, + f32 = 3, + f64 = 4, + + #if ENABLE_SIMD_PROTOTYPE + v128 = 5, + #endif + + num, + max = num-1 + }; + + template struct ValueTypeInfo; + template<> struct ValueTypeInfo { typedef I32 Value; }; + template<> struct ValueTypeInfo { typedef I64 Value; }; + template<> struct ValueTypeInfo { typedef F32 Value; }; + template<> struct ValueTypeInfo { typedef F64 Value; }; + + inline std::string asString(I32 value) { return std::to_string(value); } + inline std::string asString(I64 value) { return std::to_string(value); } + inline std::string asString(F32 value) { return std::to_string(value); } + inline std::string asString(F64 value) { return std::to_string(value); } + + #if ENABLE_SIMD_PROTOTYPE + union V128 + { + U8 u8[16]; + I8 i8[16]; + U16 u16[8]; + I16 i16[8]; + U32 u32[4]; + I32 i32[4]; + U64 u64[2]; + I64 i64[2]; + }; + + inline std::string asString(const V128& v128) + { + std::string result; + for(Uptr laneIndex = 0;laneIndex < 16;++laneIndex) + { + if(laneIndex != 0) { result += ' '; } + result += std::to_string(v128.u8[laneIndex]); + } + return result; + } + + template + struct BoolVector + { + bool b[numLanes]; + }; + + template + std::string asString(const BoolVector& boolVector) + { + std::string result = "("; + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + if(laneIndex != 0) { result += ' '; } + result += boolVector.b[laneIndex] ? '1' : '0'; + } + result += ")"; + return result; + } + + template<> struct ValueTypeInfo { typedef V128 Value; }; + #endif + + inline U8 getTypeBitWidth(ValueType type) + { + switch(type) + { + case ValueType::i32: return 32; + case ValueType::i64: return 64; + case ValueType::f32: return 32; + case ValueType::f64: return 64; + #if ENABLE_SIMD_PROTOTYPE + case ValueType::v128: return 128; + #endif + default: Errors::unreachable(); + }; + } + + inline const char* asString(ValueType type) + { + switch(type) + { + case ValueType::any: return "any"; + case ValueType::i32: return "i32"; + case ValueType::i64: return "i64"; + case ValueType::f32: return "f32"; + case ValueType::f64: return "f64"; + #if ENABLE_SIMD_PROTOTYPE + case ValueType::v128: return "v128"; + #endif + default: Errors::unreachable(); + }; + } + + // The type of a WebAssembly operator result. Mostly the same as ValueType, but allows operators with no result (none). + enum class ResultType : U8 + { + none = 0, + i32 = (U8)ValueType::i32, + i64 = (U8)ValueType::i64, + f32 = (U8)ValueType::f32, + f64 = (U8)ValueType::f64, + #if ENABLE_SIMD_PROTOTYPE + v128 = (U8)ValueType::v128, + #endif + num, + max = num-1, + }; + + inline Uptr getArity(ResultType returnType) { return returnType == ResultType::none ? 0 : 1; } + + inline const char* asString(ResultType type) + { + switch(type) + { + case ResultType::i32: return "i32"; + case ResultType::i64: return "i64"; + case ResultType::f32: return "f32"; + case ResultType::f64: return "f64"; + #if ENABLE_SIMD_PROTOTYPE + case ResultType::v128: return "v128"; + #endif + case ResultType::none: return "()"; + default: Errors::unreachable(); + }; + } + + // Conversion between ValueType and ResultType. + inline ValueType asValueType(ResultType type) + { + assert(type != ResultType::none); + return (ValueType)type; + } + + inline ResultType asResultType(ValueType type) + { + assert(type != ValueType::any); + return (ResultType)type; + } + + // The type of a WebAssembly function + struct FunctionType + { + ResultType ret; + std::vector parameters; + + IR_API static const FunctionType* get(ResultType ret,const std::initializer_list& parameters); + IR_API static const FunctionType* get(ResultType ret,const std::vector& parameters); + IR_API static const FunctionType* get(ResultType ret = ResultType::none); + + private: + + FunctionType(ResultType inRet,const std::vector& inParameters) + : ret(inRet), parameters(inParameters) {} + }; + + struct IndexedFunctionType + { + U32 index; + }; + + inline std::string asString(const std::vector& typeTuple) + { + std::string result = "("; + for(Uptr parameterIndex = 0;parameterIndex < typeTuple.size();++parameterIndex) + { + if(parameterIndex != 0) { result += ','; } + result += asString(typeTuple[parameterIndex]); + } + result += ")"; + return result; + } + + inline std::string asString(const FunctionType* functionType) + { + return asString(functionType->parameters) + "->" + asString(functionType->ret); + } + + // A size constraint: a range of expected sizes for some size-constrained type. + // If max==UINT64_MAX, the maximum size is unbounded. + struct SizeConstraints + { + U64 min; + U64 max; + + friend bool operator==(const SizeConstraints& left,const SizeConstraints& right) { return left.min == right.min && left.max == right.max; } + friend bool operator!=(const SizeConstraints& left,const SizeConstraints& right) { return left.min != right.min || left.max != right.max; } + friend bool isSubset(const SizeConstraints& super,const SizeConstraints& sub) + { + return sub.min >= super.min && sub.max <= super.max; + } + }; + + // The type of element a table contains: for now can only be anyfunc, meaning any function type. + enum class TableElementType : U8 + { + anyfunc = 0x70 + }; + + // The type of a table + struct TableType + { + TableElementType elementType; + bool isShared; + SizeConstraints size; + + TableType(): elementType(TableElementType::anyfunc), isShared(false), size({0,UINT64_MAX}) {} + TableType(TableElementType inElementType,bool inIsShared,SizeConstraints inSize) + : elementType(inElementType), isShared(inIsShared), size(inSize) {} + + friend bool operator==(const TableType& left,const TableType& right) + { return left.elementType == right.elementType && left.isShared == right.isShared && left.size == right.size; } + friend bool operator!=(const TableType& left,const TableType& right) + { return left.elementType != right.elementType || left.isShared != right.isShared || left.size != right.size; } + friend bool isSubset(const TableType& super,const TableType& sub) + { return super.elementType == sub.elementType && super.isShared == sub.isShared && isSubset(super.size,sub.size); } + }; + + // The type of a memory + struct MemoryType + { + bool isShared; + SizeConstraints size; + + MemoryType(): isShared(false), size({0,UINT64_MAX}) {} + MemoryType(bool inIsShared,const SizeConstraints& inSize): isShared(inIsShared), size(inSize) {} + + friend bool operator==(const MemoryType& left,const MemoryType& right) { return left.isShared == right.isShared && left.size == right.size; } + friend bool operator!=(const MemoryType& left,const MemoryType& right) { return left.isShared != right.isShared || left.size != right.size; } + friend bool isSubset(const MemoryType& super,const MemoryType& sub) { return super.isShared == sub.isShared && isSubset(super.size,sub.size); } + }; + + // The type of a global + struct GlobalType + { + ValueType valueType; + bool isMutable; + + GlobalType(): valueType(ValueType::any), isMutable(false) {} + GlobalType(ValueType inValueType,bool inIsMutable): valueType(inValueType), isMutable(inIsMutable) {} + + friend bool operator==(const GlobalType& left,const GlobalType& right) { return left.valueType == right.valueType && left.isMutable == right.isMutable; } + friend bool operator!=(const GlobalType& left,const GlobalType& right) { return left.valueType != right.valueType || left.isMutable != right.isMutable; } + friend bool operator<=(const GlobalType& left,const GlobalType& right) { return left.valueType == right.valueType && left.isMutable == right.isMutable; } + friend bool operator>(const GlobalType& left,const GlobalType& right) { return !(left <= right); } + }; + + inline std::string asString(const GlobalType& globalType) + { + if(globalType.isMutable) { return std::string("global ") + asString(globalType.valueType); } + else { return std::string("immutable ") + asString(globalType.valueType); } + } + + // The type of an object + enum class ObjectKind : U8 + { + function = 0, + table = 1, + memory = 2, + global = 3, + module = 4, + max = 4, + invalid = 0xff, + }; + struct ObjectType + { + const ObjectKind kind; + + ObjectType() : kind(ObjectKind::invalid) {} + ObjectType(const FunctionType* inFunction) : kind(ObjectKind::function), function(inFunction) {} + ObjectType(TableType inTable) : kind(ObjectKind::table), table(inTable) {} + ObjectType(MemoryType inMemory) : kind(ObjectKind::memory), memory(inMemory) {} + ObjectType(GlobalType inGlobal) : kind(ObjectKind::global), global(inGlobal) {} + + friend const FunctionType* asFunctionType(const ObjectType& objectType) + { + assert(objectType.kind == ObjectKind::function); + return objectType.function; + } + friend TableType asTableType(const ObjectType& objectType) + { + assert(objectType.kind == ObjectKind::table); + return objectType.table; + } + friend MemoryType asMemoryType(const ObjectType& objectType) + { + assert(objectType.kind == ObjectKind::memory); + return objectType.memory; + } + friend GlobalType asGlobalType(const ObjectType& objectType) + { + assert(objectType.kind == ObjectKind::global); + return objectType.global; + } + + private: + + union + { + const FunctionType* function; + TableType table; + MemoryType memory; + GlobalType global; + }; + }; + + inline std::string asString(const ObjectType& objectType) + { + switch(objectType.kind) + { + case ObjectKind::function: return "func " + asString(asFunctionType(objectType)); + case ObjectKind::table: return "table"; + case ObjectKind::memory: return "memory"; + case ObjectKind::global: return asString(asGlobalType(objectType)); + default: Errors::unreachable(); + }; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/IR/Validate.h b/libraries/wasm-jit/Include/IR/Validate.h new file mode 100644 index 000000000..83ff00a78 --- /dev/null +++ b/libraries/wasm-jit/Include/IR/Validate.h @@ -0,0 +1,62 @@ +#pragma once + +#include "IR.h" +#include "IR/Operators.h" + +#include + +namespace IR +{ + struct Module; + struct FunctionDef; + + struct ValidationException + { + std::string message; + ValidationException(std::string&& inMessage): message(inMessage) {} + }; + + struct CodeValidationStreamImpl; + + struct CodeValidationStream + { + IR_API CodeValidationStream(const Module& module,const FunctionDef& function); + IR_API ~CodeValidationStream(); + + IR_API void finish(); + + #define VISIT_OPCODE(_,name,nameString,Imm,...) IR_API void name(Imm imm = {}); + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + private: + CodeValidationStreamImpl* impl; + }; + + template + struct CodeValidationProxyStream + { + CodeValidationProxyStream(const Module& module,const FunctionDef& function,InnerStream& inInnerStream) + : codeValidationStream(module,function) + , innerStream(inInnerStream) + {} + + void finishValidation() { codeValidationStream.finish(); } + + #define VISIT_OPCODE(_,name,nameString,Imm,...) \ + void name(Imm imm = {}) \ + { \ + codeValidationStream.name(imm); \ + innerStream.name(imm); \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + private: + + CodeValidationStream codeValidationStream; + InnerStream& innerStream; + }; + + IR_API void validateDefinitions(const IR::Module& module); +} diff --git a/libraries/wasm-jit/Include/Inline/BasicTypes.h b/libraries/wasm-jit/Include/Inline/BasicTypes.h new file mode 100644 index 000000000..72ba9dd74 --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/BasicTypes.h @@ -0,0 +1,23 @@ +#pragma once +#include +#include + +typedef uint8_t U8; +typedef int8_t I8; +typedef uint16_t U16; +typedef int16_t I16; +typedef uint32_t U32; +typedef int32_t I32; +typedef uint64_t U64; +typedef int64_t I64; +typedef float F32; +typedef double F64; + +// The OSX libc defines uintptr_t to be a long where U32/U64 are int. This causes uintptr_t/uint64 to be treated as distinct types for e.g. overloading. +// Work around it by defining our own Uptr/Iptr that are always int type. +template +struct PointerIntHelper; +template<> struct PointerIntHelper<4> { typedef I32 IntType; typedef U32 UnsignedIntType; }; +template<> struct PointerIntHelper<8> { typedef I64 IntType; typedef U64 UnsignedIntType; }; +typedef PointerIntHelper::UnsignedIntType Uptr; +typedef PointerIntHelper::IntType Iptr; diff --git a/libraries/wasm-jit/Include/Inline/DenseStaticIntSet.h b/libraries/wasm-jit/Include/Inline/DenseStaticIntSet.h new file mode 100644 index 000000000..28bb1143a --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/DenseStaticIntSet.h @@ -0,0 +1,141 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "Platform/Platform.h" + +#include +#include + +// Encapsulates a set of integers that are in the range 0 to maxIndexPlusOne (excluding maxIndexPlusOne). +// It uses 1 bit of storage for each integer in the range, and many operations look at all bits, so it's best suited to small ranges. +// However, this avoids heap allocations, and so is pretty fast for sets of small integers (e.g. U8). +template +struct DenseStaticIntSet +{ + DenseStaticIntSet() + { + memset(elements,0,sizeof(elements)); + } + DenseStaticIntSet(Index index) + { + memset(elements,0,sizeof(elements)); + add(index); + } + + // Queries + + inline bool contains(Index index) const + { + assert((Uptr)index < maxIndexPlusOne); + return (elements[index / indicesPerElement] & (1ull << (index % indicesPerElement))) != 0; + } + bool isEmpty() const + { + Element combinedElements = 0; + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + combinedElements |= elements[elementIndex]; + } + return combinedElements == 0; + } + inline Index getSmallestMember() const + { + // Find the first element that has any bits set. + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + if(elements[elementIndex]) + { + // Find the index of the lowest set bit in the element using countTrailingZeroes. + const Index result = (Index)(elementIndex * indicesPerElement + Platform::countTrailingZeroes(elements[elementIndex])); + assert(contains(result)); + return result; + } + } + return maxIndexPlusOne; + } + + // Adding/removing indices + + inline void add(Index index) + { + assert((Uptr)index < maxIndexPlusOne); + elements[index / indicesPerElement] |= 1ull << (index % indicesPerElement); + } + inline void addRange(Index rangeMin,Index rangeMax) + { + assert(rangeMin <= rangeMax); + assert((Uptr)rangeMax < maxIndexPlusOne); + for(Index index = rangeMin;index <= rangeMax;++index) + { + add(index); + } + } + inline bool remove(Index index) + { + const Element elementMask = 1ull << (index % indicesPerElement); + const bool hadIndex = (elements[index / indicesPerElement] & elementMask) != 0; + elements[index / indicesPerElement] &= ~elementMask; + return hadIndex; + } + + // Logical operators + + friend DenseStaticIntSet operator~(const DenseStaticIntSet& set) + { + DenseStaticIntSet result; + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + result.elements[elementIndex] = ~set.elements[elementIndex]; + } + return result; + } + friend DenseStaticIntSet operator|(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + DenseStaticIntSet result; + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + result.elements[elementIndex] = left.elements[elementIndex] | right.elements[elementIndex]; + } + return result; + } + friend DenseStaticIntSet operator&(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + DenseStaticIntSet result; + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + result.elements[elementIndex] = left.elements[elementIndex] & right.elements[elementIndex]; + } + return result; + } + friend DenseStaticIntSet operator^(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + DenseStaticIntSet result; + for(Uptr elementIndex = 0;elementIndex < numElements;++elementIndex) + { + result.elements[elementIndex] = left.elements[elementIndex] ^ right.elements[elementIndex]; + } + return result; + } + + // Comparisons + + friend bool operator==(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + return memcmp(left.elements,right.elements,sizeof(DenseStaticIntSet::elements)) == 0; + } + friend bool operator!=(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + return memcmp(left.elements,right.elements,sizeof(DenseStaticIntSet::elements)) != 0; + } + friend bool operator<(const DenseStaticIntSet& left,const DenseStaticIntSet& right) + { + return memcmp(left.elements,right.elements,sizeof(DenseStaticIntSet::elements)) < 0; + } + +private: + typedef U64 Element; + enum { indicesPerElement = sizeof(Element) * 8 }; + enum { numElements = (maxIndexPlusOne + indicesPerElement - 1) / indicesPerElement }; + U64 elements[numElements]; +}; diff --git a/libraries/wasm-jit/Include/Inline/Errors.h b/libraries/wasm-jit/Include/Inline/Errors.h new file mode 100644 index 000000000..74076471f --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/Errors.h @@ -0,0 +1,26 @@ +#pragma once + +#include +#include +#include +#include + +namespace Errors +{ + // Fatal error handling. + [[noreturn]] inline void fatalf(const char* messageFormat,...) + { + va_list varArgs; + va_start(varArgs,messageFormat); + std::vfprintf(stderr,messageFormat,varArgs); + std::fflush(stderr); + va_end(varArgs); + std::abort(); + } + [[noreturn]] inline void fatal(const char* message) { fatalf("%s\n",message); } + [[noreturn]] inline void unreachable() { fatalf("reached unreachable code\n"); } + [[noreturn]] inline void unimplemented(const char* context) { fatalf("unimplemented: %s\n",context); } +} + +// Like assert, but is never removed in any build configuration. +#define errorUnless(condition) if(!(condition)) { Errors::fatalf("errorUnless(%s) failed\n",#condition); } diff --git a/libraries/wasm-jit/Include/Inline/Floats.h b/libraries/wasm-jit/Include/Inline/Floats.h new file mode 100644 index 000000000..53482eb07 --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/Floats.h @@ -0,0 +1,120 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" + +#include +#include + +namespace Floats +{ + template + struct FloatComponents; + + // The components of a 64-bit float + template<> + struct FloatComponents + { + typedef U64 Bits; + typedef F64 Float; + + enum Constants : I64 + { + maxSignificand = 0xfffffffffffff, + numSignificandBits = 52, + numSignificandHexits = 13, + canonicalSignificand = 0x8000000000000ull, + + denormalExponent = -1023, + minNormalExponent = -1022, + maxNormalExponent = 1023, + exponentBias = 1023, + maxExponentBits = 0x7ff, + }; + + union + { + struct + { + U64 significand : 52; + U64 exponent : 11; + U64 sign : 1; + } bits; + Float value; + Bits bitcastInt; + }; + }; + + // The components of a 32-bit float. + template<> + struct FloatComponents + { + typedef U32 Bits; + typedef F32 Float; + + enum Constants : I32 + { + maxSignificand = 0x7fffff, + numSignificandBits = 23, + numSignificandHexits = 6, + canonicalSignificand = 0x400000, + + denormalExponent = -127, + minNormalExponent = -126, + maxNormalExponent = 127, + exponentBias = 127, + maxExponentBits = 0xff, + }; + + union + { + struct + { + U32 significand : 23; + U32 exponent : 8; + U32 sign : 1; + } bits; + Float value; + Bits bitcastInt; + }; + }; + + // Prints a floating point value to a string, using the WebAssembly syntax for text floats. + template + std::string asString(Float f) + { + FloatComponents components; + components.value = f; + + auto sign = std::string(components.bits.sign ? "-" : "+"); + + if(components.bits.exponent == FloatComponents::maxExponentBits) + { + // Handle infinity. + if(components.bits.significand == 0) { return sign + "infinity"; } + else + { + // Handle NaN. + char significandString[FloatComponents::numSignificandHexits + 1]; + for(Uptr hexitIndex = 0;hexitIndex < FloatComponents::numSignificandHexits;++hexitIndex) + { + auto hexitValue = char((components.bits.significand >> ((FloatComponents::numSignificandHexits - hexitIndex - 1) * 4)) & 0xf); + significandString[hexitIndex] = hexitValue >= 10 ? ('a' + hexitValue - 10) : ('0' + hexitValue); + } + significandString[FloatComponents::numSignificandHexits] = 0; + return sign + "nan:0x" + significandString + ""; + } + } + else + { + // If it's not infinite or NaN, just use the STL hexadecimal float printing. + char buffer[32]; + auto numChars = std::sprintf(buffer,FloatComponents::numSignificandHexits == 6 ? "%.6a" : "%.13a",f); + if(unsigned(numChars) + 1 > sizeof(buffer)) + { + Errors::fatal("not enough space in Floats::asString buffer"); + } + return buffer; + } + } +} diff --git a/libraries/wasm-jit/Include/Inline/Serialization.h b/libraries/wasm-jit/Include/Inline/Serialization.h new file mode 100644 index 000000000..89f79cb20 --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/Serialization.h @@ -0,0 +1,281 @@ +#pragma once + +#include "Platform/Platform.h" + +#include +#include +#include +#include + +namespace Serialization +{ + // An exception that is thrown for various errors during serialization. + // Any code using serialization should handle it! + struct FatalSerializationException + { + std::string message; + FatalSerializationException(std::string&& inMessage) + : message(std::move(inMessage)) {} + }; + + // An abstract output stream. + struct OutputStream + { + enum { isInput = false }; + + OutputStream(): next(nullptr), end(nullptr) {} + + Uptr capacity() const { return SIZE_MAX; } + + // Advances the stream cursor by numBytes, and returns a pointer to the previous stream cursor. + inline U8* advance(Uptr numBytes) + { + if(next + numBytes > end) { extendBuffer(numBytes); } + assert(next + numBytes <= end); + + U8* data = next; + next += numBytes; + return data; + } + + protected: + + U8* next; + U8* end; + + // Called when there isn't enough space in the buffer to hold a write to the stream. + // Should update next and end to point to a new buffer, and ensure that the new + // buffer has at least numBytes. May throw FatalSerializationException. + virtual void extendBuffer(Uptr numBytes) = 0; + }; + + // An output stream that writes to an array of bytes. + struct ArrayOutputStream : public OutputStream + { + // Moves the output array from the stream to the caller. + std::vector&& getBytes() + { + bytes.resize(next - bytes.data()); + next = nullptr; + end = nullptr; + return std::move(bytes); + } + + private: + + std::vector bytes; + + virtual void extendBuffer(Uptr numBytes) + { + const Uptr nextIndex = next - bytes.data(); + + // Grow the array by larger and larger increments, so the time spent growing + // the buffer is O(1). + bytes.resize(std::max((Uptr)nextIndex+numBytes,(Uptr)bytes.size() * 7 / 5 + 32)); + + next = bytes.data() + nextIndex; + end = bytes.data() + bytes.size(); + } + virtual bool canExtendBuffer(Uptr numBytes) const { return true; } + }; + + // An abstract input stream. + struct InputStream + { + enum { isInput = true }; + + InputStream(const U8* inNext,const U8* inEnd): next(inNext), end(inEnd) {} + + virtual Uptr capacity() const = 0; + + // Advances the stream cursor by numBytes, and returns a pointer to the previous stream cursor. + inline const U8* advance(Uptr numBytes) + { + if(next + numBytes > end) { getMoreData(numBytes); } + const U8* data = next; + next += numBytes; + return data; + } + + // Returns a pointer to the current stream cursor, ensuring that there are at least numBytes following it. + inline const U8* peek(Uptr numBytes) + { + if(next + numBytes > end) { getMoreData(numBytes); } + return next; + } + + protected: + + const U8* next; + const U8* end; + + // Called when there isn't enough space in the buffer to satisfy a read from the stream. + // Should update next and end to point to a new buffer, and ensure that the new + // buffer has at least numBytes. May throw FatalSerializationException. + virtual void getMoreData(Uptr numBytes) = 0; + }; + + // An input stream that reads from a contiguous range of memory. + struct MemoryInputStream : InputStream + { + MemoryInputStream(const U8* begin,Uptr numBytes): InputStream(begin,begin+numBytes) {} + virtual Uptr capacity() const { return end - next; } + private: + virtual void getMoreData(Uptr numBytes) { throw FatalSerializationException("expected data but found end of stream"); } + }; + + // Serialize raw byte sequences. + FORCEINLINE void serializeBytes(OutputStream& stream,const U8* bytes,Uptr numBytes) + { memcpy(stream.advance(numBytes),bytes,numBytes); } + FORCEINLINE void serializeBytes(InputStream& stream,U8* bytes,Uptr numBytes) + { memcpy(bytes,stream.advance(numBytes),numBytes); } + + // Serialize basic C++ types. + template + FORCEINLINE void serializeNativeValue(Stream& stream,Value& value) { serializeBytes(stream,(U8*)&value,sizeof(Value)); } + + template void serialize(Stream& stream,U8& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,U32& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,U64& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,I8& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,I32& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,I64& i) { serializeNativeValue(stream,i); } + template void serialize(Stream& stream,F32& f) { serializeNativeValue(stream,f); } + template void serialize(Stream& stream,F64& f) { serializeNativeValue(stream,f); } + + // LEB128 variable-length integer serialization. + template + FORCEINLINE void serializeVarInt(OutputStream& stream,Value& inValue,Value minValue,Value maxValue) + { + Value value = inValue; + + if(value < minValue || value > maxValue) + { + throw FatalSerializationException(std::string("out-of-range value: ") + std::to_string(minValue) + "<=" + std::to_string(value) + "<=" + std::to_string(maxValue)); + } + + bool more = true; + while(more) + { + U8 outputByte = (U8)(value&127); + value >>= 7; + more = std::is_signed::value + ? (value != 0 && value != Value(-1)) || (value >= 0 && (outputByte & 0x40)) || (value < 0 && !(outputByte & 0x40)) + : (value != 0); + if(more) { outputByte |= 0x80; } + *stream.advance(1) = outputByte; + }; + } + + template + FORCEINLINE void serializeVarInt(InputStream& stream,Value& value,Value minValue,Value maxValue) + { + // First, read the variable number of input bytes into a fixed size buffer. + enum { maxBytes = (maxBits + 6) / 7 }; + U8 bytes[maxBytes] = {0}; + Uptr numBytes = 0; + I8 signExtendShift = (I8)sizeof(Value) * 8; + while(numBytes < maxBytes) + { + U8 byte = *stream.advance(1); + bytes[numBytes] = byte; + ++numBytes; + signExtendShift -= 7; + if(!(byte & 0x80)) { break; } + }; + + // Ensure that the input does not encode more than maxBits of data. + enum { numUsedBitsInHighestByte = maxBits - (maxBytes-1) * 7 }; + enum { highestByteUsedBitmask = U8(1<::value)) + { throw FatalSerializationException("Invalid LEB encoding: invalid final byte"); } + + // Decode the buffer's bytes into the output integer. + value = 0; + for(Uptr byteIndex = 0;byteIndex < maxBytes;++byteIndex) + { value |= Value(bytes[byteIndex] & ~0x80) << (byteIndex * 7); } + + // Sign extend the output integer to the full size of Value. + if(std::is_signed::value && signExtendShift > 0) + { value = Value(value << signExtendShift) >> signExtendShift; } + + // Check that the output integer is in the expected range. + if(value < minValue || value > maxValue) + { throw FatalSerializationException(std::string("out-of-range value: ") + std::to_string(minValue) + "<=" + std::to_string(value) + "<=" + std::to_string(maxValue)); } + } + + // Helpers for various common LEB128 parameters. + template void serializeVarUInt1(Stream& stream,Value& value) { serializeVarInt(stream,value,0,1); } + template void serializeVarUInt7(Stream& stream,Value& value) { serializeVarInt(stream,value,0,127); } + template void serializeVarUInt32(Stream& stream,Value& value) { serializeVarInt(stream,value,0,UINT32_MAX); } + template void serializeVarUInt64(Stream& stream,Value& value) { serializeVarInt(stream,value,0,UINT64_MAX); } + template void serializeVarInt7(Stream& stream,Value& value) { serializeVarInt(stream,value,-64,63); } + template void serializeVarInt32(Stream& stream,Value& value) { serializeVarInt(stream,value,INT32_MIN,INT32_MAX); } + template void serializeVarInt64(Stream& stream,Value& value) { serializeVarInt(stream,value,INT64_MIN,INT64_MAX); } + + // Serializes a constant. If deserializing, throws a FatalSerializationException if the deserialized value doesn't match the constant. + template + void serializeConstant(InputStream& stream,const char* constantMismatchMessage,Constant constant) + { + Constant savedConstant; + serialize(stream,savedConstant); + if(savedConstant != constant) + { + throw FatalSerializationException(std::string(constantMismatchMessage) + ": loaded " + std::to_string(savedConstant) + " but was expecting " + std::to_string(constant)); + } + } + template + void serializeConstant(OutputStream& stream,const char* constantMismatchMessage,Constant constant) + { + serialize(stream,constant); + } + + // Serialize containers. + template + void serialize(Stream& stream,std::string& string) + { + Uptr size = string.size(); + serializeVarUInt32(stream,size); + if(Stream::isInput) + { + // Advance the stream before resizing the string: + // try to get a serialization exception before making a huge allocation for malformed input. + const U8* inputBytes = stream.advance(size); + string.resize(size); + memcpy(const_cast(string.data()),inputBytes,size); + string.shrink_to_fit(); + } + else { serializeBytes(stream,(U8*)string.c_str(),size); } + } + + template + void serializeArray(Stream& stream,std::vector& vector,SerializeElement serializeElement) + { + Uptr size = vector.size(); + serializeVarUInt32(stream,size); + if(Stream::isInput) + { + // Grow the vector one element at a time: + // try to get a serialization exception before making a huge allocation for malformed input. + vector.clear(); + for(Uptr index = 0;index < size;++index) + { + vector.push_back(Element()); + serializeElement(stream,vector.back()); + } + vector.shrink_to_fit(); + } + else + { + for(Uptr index = 0;index < vector.size();++index) { serializeElement(stream,vector[index]); } + } + } + + template + void serialize(Stream& stream,std::vector& vector) + { + serializeArray(stream,vector,[](Stream& stream,Element& element){serialize(stream,element);}); + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Inline/Timing.h b/libraries/wasm-jit/Include/Inline/Timing.h new file mode 100644 index 000000000..d0799b9fd --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/Timing.h @@ -0,0 +1,38 @@ +#pragma once + +#include + +#include "Logging/Logging.h" + +namespace Timing +{ + // Encapsulates a timer that starts when constructed and stops when read. + struct Timer + { + Timer(): startTime(std::chrono::high_resolution_clock::now()), isStopped(false) {} + void stop() { endTime = std::chrono::high_resolution_clock::now(); } + U64 getMicroseconds() + { + if(!isStopped) { stop(); } + return std::chrono::duration_cast(endTime - startTime).count(); + } + F64 getMilliseconds() { return getMicroseconds() / 1000.0; } + F64 getSeconds() { return getMicroseconds() / 1000000.0; } + private: + std::chrono::high_resolution_clock::time_point startTime; + std::chrono::high_resolution_clock::time_point endTime; + bool isStopped; + }; + + // Helpers for printing timers. + inline void logTimer(const char* context,Timer& timer) { Log::printf(Log::Category::metrics,"%s in %.2fms\n",context,timer.getMilliseconds()); } + inline void logRatePerSecond(const char* context,Timer& timer,F64 numerator,const char* numeratorUnit) + { + Log::printf(Log::Category::metrics,"%s in %.2fms (%f %s/s)\n", + context, + timer.getMilliseconds(), + numerator / timer.getSeconds(), + numeratorUnit + ); + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Inline/UTF8.h b/libraries/wasm-jit/Include/Inline/UTF8.h new file mode 100644 index 000000000..ea77125e2 --- /dev/null +++ b/libraries/wasm-jit/Include/Inline/UTF8.h @@ -0,0 +1,100 @@ +#pragma once + +#include "BasicTypes.h" + +#include + +namespace UTF8 +{ + inline const U8* validateString(const U8* nextChar,const U8* endChar) + { + // Check that the string is a valid UTF-8 encoding. + // The valid ranges are taken from table 3-7 in the Unicode Standard 9.0: + // "Well-Formed UTF-8 Byte Sequences" + while(nextChar != endChar) + { + if(*nextChar < 0x80) { ++nextChar; } + else if(*nextChar >= 0xc2 && *nextChar <= 0xdf) + { + if(nextChar + 1 >= endChar + || nextChar[1] < 0x80 || nextChar[1] > 0xbf) { break; } + nextChar += 2; + } + else if(*nextChar == 0xe0) + { + if(nextChar + 2 >= endChar + || nextChar[1] < 0xa0 || nextChar[1] > 0xbf + || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { break; } + nextChar += 3; + } + else if(*nextChar == 0xed) + { + if(nextChar + 2 >= endChar + || nextChar[1] < 0xa0 || nextChar[1] > 0x9f + || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { break; } + nextChar += 3; + } + else if(*nextChar >= 0xe1 && *nextChar <= 0xef) + { + if(nextChar + 2 >= endChar + || nextChar[1] < 0x80 || nextChar[1] > 0xbf + || nextChar[2] < 0x80 || nextChar[2] > 0xbf) { break; } + nextChar += 3; + } + else if(*nextChar == 0xf0) + { + if(nextChar + 3 >= endChar + || nextChar[1] < 0x90 || nextChar[1] > 0xbf + || nextChar[2] < 0x80 || nextChar[2] > 0xbf + || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { break; } + nextChar += 4; + } + else if(*nextChar >= 0xf1 && *nextChar <= 0xf3) + { + if(nextChar + 3 >= endChar + || nextChar[1] < 0x80 || nextChar[1] > 0xbf + || nextChar[2] < 0x80 || nextChar[2] > 0xbf + || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { break; } + nextChar += 4; + } + else if(*nextChar == 0xf4) + { + if(nextChar + 3 >= endChar + || nextChar[1] < 0x80 || nextChar[1] > 0x8f + || nextChar[2] < 0x80 || nextChar[2] > 0xbf + || nextChar[3] < 0x80 || nextChar[3] > 0xbf) { break; } + nextChar += 4; + } + else { break; } + } + return nextChar; + } + + template + inline void encodeCodepoint(U32 codepoint,String& outString) + { + if(codepoint < 0x80) + { + outString += char(codepoint); + } + else if(codepoint < 0x800) + { + outString += char((codepoint >> 6) & 0x1F) | 0xC0; + outString += char((codepoint & 0x3F) | 0x80); + } + else if(codepoint < 0x10000) + { + outString += char((codepoint >> 12) & 0x0F) | 0xE0; + outString += char((codepoint >> 6) & 0x3F) | 0x80; + outString += char((codepoint & 0x3F) | 0x80); + } + else + { + assert(codepoint < 0x200000); + outString += char((codepoint >> 18) & 0x07) | 0xF0; + outString += char((codepoint >> 12) & 0x3F) | 0x80; + outString += char((codepoint >> 6) & 0x3F) | 0x80; + outString += char((codepoint & 0x3F) | 0x80); + } + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Logging/Logging.h b/libraries/wasm-jit/Include/Logging/Logging.h new file mode 100644 index 000000000..5aa7ab293 --- /dev/null +++ b/libraries/wasm-jit/Include/Logging/Logging.h @@ -0,0 +1,26 @@ +#pragma once + +#ifndef LOGGING_API + #define LOGGING_API DLL_IMPORT +#endif + +#include "Inline/BasicTypes.h" +#include "Platform/Platform.h" + +// Debug logging. +namespace Log +{ + // Allow filtering the logging by category. + enum class Category + { + error, + debug, + metrics, + num + }; + LOGGING_API void setCategoryEnabled(Category category,bool enable); + LOGGING_API bool isCategoryEnabled(Category category); + + // Print some categorized, formatted string, and flush the output. Newline is not included. + LOGGING_API void printf(Category category,const char* format,...); +}; \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Platform/Platform.h b/libraries/wasm-jit/Include/Platform/Platform.h new file mode 100644 index 000000000..adc8067d4 --- /dev/null +++ b/libraries/wasm-jit/Include/Platform/Platform.h @@ -0,0 +1,178 @@ +#pragma once + +#include +#include +#include + +#include "Inline/BasicTypes.h" + +#ifdef _WIN32 + #define THREAD_LOCAL thread_local + #define DLL_EXPORT __declspec(dllexport) + #define DLL_IMPORT __declspec(dllimport) + #define FORCEINLINE __forceinline + #define SUPPRESS_UNUSED(variable) (void)(variable); + #include + #define PACKED_STRUCT(definition) __pragma(pack(push, 1)) definition; __pragma(pack(pop)) +#else + // Use __thread instead of the C++11 thread_local because Apple's clang doesn't support thread_local yet. + #define THREAD_LOCAL __thread + #define DLL_EXPORT + #define DLL_IMPORT + #define FORCEINLINE inline __attribute__((always_inline)) + #define SUPPRESS_UNUSED(variable) (void)(variable); + #define PACKED_STRUCT(definition) definition __attribute__((packed)); +#endif + +#ifndef PLATFORM_API + #define PLATFORM_API DLL_IMPORT +#endif + +namespace Platform +{ + // countLeadingZeroes/countTrailingZeroes returns the number of leading/trailing zeroes, or the bit width of the input if no bits are set. + #ifdef _WIN32 + // BitScanReverse/BitScanForward return 0 if the input is 0. + inline U64 countLeadingZeroes(U64 value) { unsigned long result; return _BitScanReverse64(&result,value) ? (63 - result) : 64; } + inline U32 countLeadingZeroes(U32 value) { unsigned long result; return _BitScanReverse(&result,value) ? (31 - result) : 32; } + inline U64 countTrailingZeroes(U64 value) { unsigned long result; return _BitScanForward64(&result,value) ? result : 64; } + inline U32 countTrailingZeroes(U32 value) { unsigned long result; return _BitScanForward(&result,value) ? result : 32; } + #else + // __builtin_clz/__builtin_ctz are undefined if the input is 0. + inline U64 countLeadingZeroes(U64 value) { return value == 0 ? 64 : __builtin_clzll(value); } + inline U32 countLeadingZeroes(U32 value) { return value == 0 ? 32 : __builtin_clz(value); } + inline U64 countTrailingZeroes(U64 value) { return value == 0 ? 64 : __builtin_ctzll(value); } + inline U32 countTrailingZeroes(U32 value) { return value == 0 ? 32 : __builtin_ctz(value); } + #endif + inline U64 floorLogTwo(U64 value) { return value <= 1 ? 0 : 63 - countLeadingZeroes(value); } + inline U32 floorLogTwo(U32 value) { return value <= 1 ? 0 : 31 - countLeadingZeroes(value); } + inline U64 ceilLogTwo(U64 value) { return floorLogTwo(value * 2 - 1); } + inline U32 ceilLogTwo(U32 value) { return floorLogTwo(value * 2 - 1); } + + // + // Memory + // + + // Describes allowed memory accesses. + enum class MemoryAccess + { + None, + ReadOnly, + ReadWrite, + Execute, + ReadWriteExecute + }; + + // Returns the base 2 logarithm of the smallest virtual page size. + PLATFORM_API Uptr getPageSizeLog2(); + + // Allocates virtual addresses without commiting physical pages to them. + // Returns the base virtual address of the allocated addresses, or nullptr if the virtual address space has been exhausted. + PLATFORM_API U8* allocateVirtualPages(Uptr numPages); + + // Commits physical memory to the specified virtual pages. + // baseVirtualAddress must be a multiple of the preferred page size. + // Return true if successful, or false if physical memory has been exhausted. + PLATFORM_API bool commitVirtualPages(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access = MemoryAccess::ReadWrite); + + // Changes the allowed access to the specified virtual pages. + // baseVirtualAddress must be a multiple of the preferred page size. + // Return true if successful, or false if the access-level could not be set. + PLATFORM_API bool setVirtualPageAccess(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access); + + // Decommits the physical memory that was committed to the specified virtual pages. + // baseVirtualAddress must be a multiple of the preferred page size. + PLATFORM_API void decommitVirtualPages(U8* baseVirtualAddress,Uptr numPages); + + // Frees virtual addresses. Any physical memory committed to the addresses must have already been decommitted. + // baseVirtualAddress must be a multiple of the preferred page size. + PLATFORM_API void freeVirtualPages(U8* baseVirtualAddress,Uptr numPages); + + // + // Call stack and exceptions + // + + // Describes a call stack. + struct CallStack + { + struct Frame + { + Uptr ip; + }; + std::vector stackFrames; + }; + + // Captures the execution context of the caller. + PLATFORM_API CallStack captureCallStack(Uptr numOmittedFramesFromTop = 0); + + // Describes an instruction pointer. + PLATFORM_API bool describeInstructionPointer(Uptr ip,std::string& outDescription); + + #ifdef _WIN32 + // Registers/deregisters the data used by Windows SEH to unwind stack frames. + PLATFORM_API void registerSEHUnwindInfo(Uptr imageLoadAddress,Uptr pdataAddress,Uptr pdataNumBytes); + PLATFORM_API void deregisterSEHUnwindInfo(Uptr pdataAddress); + #endif + + // Calls a thunk, and if it causes any of some specific hardware traps, returns true. + // If a trap was caught, the outCause, outContext, and outOperand parameters are set to describe the trap. + enum HardwareTrapType + { + none, + accessViolation, + stackOverflow, + intDivideByZeroOrOverflow + }; + PLATFORM_API HardwareTrapType catchHardwareTraps( + CallStack& outTrapCallStack, + Uptr& outTrapOperand, + const std::function& thunk + ); + + // + // Threading + // + + // Returns the current value of a clock that may be used as an absolute time for wait timeouts. + // The resolution is microseconds, and the origin is arbitrary. + PLATFORM_API U64 getMonotonicClock(); + + // Platform-independent mutexes. + struct Mutex; + PLATFORM_API Mutex* createMutex(); + PLATFORM_API void destroyMutex(Mutex* mutex); + PLATFORM_API void lockMutex(Mutex* mutex); + PLATFORM_API void unlockMutex(Mutex* mutex); + + // RAII-style lock for Mutex. + struct Lock + { + Lock(Mutex* inMutex) : mutex(inMutex) { lockMutex(mutex); } + ~Lock() { unlockMutex(mutex); } + + void release() + { + if(mutex) + { + unlockMutex(mutex); + } + mutex = nullptr; + } + + void detach() + { + assert(mutex); + mutex = nullptr; + } + + private: + Mutex* mutex; + }; + + // Platform-independent events. + struct Event; + PLATFORM_API Event* createEvent(); + PLATFORM_API void destroyEvent(Event* event); + PLATFORM_API bool waitForEvent(Event* event,U64 untilClock); + PLATFORM_API void signalEvent(Event* event); +} diff --git a/libraries/wasm-jit/Include/Runtime/Intrinsics.h b/libraries/wasm-jit/Include/Runtime/Intrinsics.h new file mode 100644 index 000000000..99da6a3ee --- /dev/null +++ b/libraries/wasm-jit/Include/Runtime/Intrinsics.h @@ -0,0 +1,153 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "IR/IR.h" +#include "Runtime.h" + +namespace Intrinsics +{ + // An intrinsic function. + struct Function + { + Runtime::FunctionInstance* function; + + RUNTIME_API Function(const char* inName,const IR::FunctionType* type,void* nativeFunction); + RUNTIME_API ~Function(); + + private: + const char* name; + }; + + // The base class of Intrinsic globals. + struct Global + { + Runtime::GlobalInstance* global; + + RUNTIME_API Global(const char* inName,IR::GlobalType inType); + RUNTIME_API ~Global(); + + RUNTIME_API void reset(); + + protected: + void* value; + private: + const char* name; + IR::GlobalType globalType; + }; + + // A partially specialized template for Intrinsic globals: + // Provides access via implicit coercion to a value, and for mutable globals an assignment operator. + template + struct GenericGlobal : Global + { + typedef typename IR::ValueTypeInfo::Value Value; + + GenericGlobal(const char* inName,Value inValue) + : Global(inName,IR::GlobalType(type,isMutable)) { *(Value*)value = inValue; } + + operator Value() const { return *(Value*)value; } + void operator=(Value newValue) { *(Value*)value = newValue; } + }; + template + struct GenericGlobal : Global + { + typedef typename IR::ValueTypeInfo::Value Value; + + GenericGlobal(const char* inName,Value inValue) + : Global(inName,IR::GlobalType(type,false)) { *(Value*)value = inValue; } + + operator Value() const { return *(Value*)value; } + + void reset(Value inValue) + { + Global::reset(); + *(Value*)value = inValue; + } + }; + + // Intrinsic memories and tables + struct Memory + { + RUNTIME_API Memory(const char* inName,const IR::MemoryType& inType); + RUNTIME_API ~Memory(); + + operator Runtime::MemoryInstance*() const { return memory; } + + private: + const char* name; + Runtime::MemoryInstance* const memory; + }; + + struct Table + { + RUNTIME_API Table(const char* inName,const IR::TableType& inType); + RUNTIME_API ~Table(); + + operator Runtime::TableInstance*() const { return table; } + + private: + const char* name; + Runtime::TableInstance* const table; + }; + + // Finds an intrinsic object by name and type. + RUNTIME_API Runtime::ObjectInstance* find(const std::string& name,const IR::ObjectType& type); + + // Returns an array of all intrinsic runtime Objects; used as roots for garbage collection. + RUNTIME_API std::vector getAllIntrinsicObjects(); +} + +namespace NativeTypes +{ + typedef I32 i32; + typedef I64 i64; + typedef F32 f32; + typedef F64 f64; + typedef void none; + #if ENABLE_SIMD_PROTOTYPE + typedef IR::V128 v128; + typedef IR::V128 b8x16; + typedef IR::V128 b16x8; + typedef IR::V128 b32x4; + typedef IR::V128 b64x2; + #endif +}; + +// Macros for defining intrinsic functions of various arities. +#define DEFINE_INTRINSIC_FUNCTION0(module,cName,name,returnType) \ + NativeTypes::returnType cName##returnType(); \ + static Intrinsics::Function cName##returnType##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType),(void*)&cName##returnType); \ + NativeTypes::returnType cName##returnType() + +#define DEFINE_INTRINSIC_FUNCTION1(module,cName,name,returnType,arg0Type,arg0Name) \ + NativeTypes::returnType cName##returnType##arg0Type(NativeTypes::arg0Type); \ + static Intrinsics::Function cName##returnType##arg0Type##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType,{IR::ValueType::arg0Type}),(void*)&cName##returnType##arg0Type); \ + NativeTypes::returnType cName##returnType##arg0Type(NativeTypes::arg0Type arg0Name) + +#define DEFINE_INTRINSIC_FUNCTION2(module,cName,name,returnType,arg0Type,arg0Name,arg1Type,arg1Name) \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type(NativeTypes::arg0Type,NativeTypes::arg1Type); \ + static Intrinsics::Function cName##returnType##arg0Type##arg1Type##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType,{IR::ValueType::arg0Type,IR::ValueType::arg1Type}),(void*)&cName##returnType##arg0Type##arg1Type); \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type(NativeTypes::arg0Type arg0Name,NativeTypes::arg1Type arg1Name) + +#define DEFINE_INTRINSIC_FUNCTION3(module,cName,name,returnType,arg0Type,arg0Name,arg1Type,arg1Name,arg2Type,arg2Name) \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type(NativeTypes::arg0Type,NativeTypes::arg1Type,NativeTypes::arg2Type); \ + static Intrinsics::Function cName##returnType##arg0Type##arg1Type##arg2Type##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType,{IR::ValueType::arg0Type,IR::ValueType::arg1Type,IR::ValueType::arg2Type}),(void*)&cName##returnType##arg0Type##arg1Type##arg2Type); \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type(NativeTypes::arg0Type arg0Name,NativeTypes::arg1Type arg1Name,NativeTypes::arg2Type arg2Name) + +#define DEFINE_INTRINSIC_FUNCTION4(module,cName,name,returnType,arg0Type,arg0Name,arg1Type,arg1Name,arg2Type,arg2Name,arg3Type,arg3Name) \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type(NativeTypes::arg0Type,NativeTypes::arg1Type,NativeTypes::arg2Type,NativeTypes::arg3Type); \ + static Intrinsics::Function cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType,{IR::ValueType::arg0Type,IR::ValueType::arg1Type,IR::ValueType::arg2Type,IR::ValueType::arg3Type}),(void*)&cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type); \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type(NativeTypes::arg0Type arg0Name,NativeTypes::arg1Type arg1Name,NativeTypes::arg2Type arg2Name,NativeTypes::arg3Type arg3Name) + +#define DEFINE_INTRINSIC_FUNCTION5(module,cName,name,returnType,arg0Type,arg0Name,arg1Type,arg1Name,arg2Type,arg2Name,arg3Type,arg3Name,arg4Type,arg4Name) \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type##arg4Type(NativeTypes::arg0Type,NativeTypes::arg1Type,NativeTypes::arg2Type,NativeTypes::arg3Type,NativeTypes::arg4Type); \ + static Intrinsics::Function cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type##arg4Type##Function(#module "." #name,IR::FunctionType::get(IR::ResultType::returnType,{IR::ValueType::arg0Type,IR::ValueType::arg1Type,IR::ValueType::arg2Type,IR::ValueType::arg3Type,IR::ValueType::arg4Type}),(void*)&cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type##arg4Type); \ + NativeTypes::returnType cName##returnType##arg0Type##arg1Type##arg2Type##arg3Type##arg4Type(NativeTypes::arg0Type arg0Name,NativeTypes::arg1Type arg1Name,NativeTypes::arg2Type arg2Name,NativeTypes::arg3Type arg3Name,NativeTypes::arg4Type arg4Name) + +// Macros for defining intrinsic globals, memories, and tables. +#define DEFINE_INTRINSIC_GLOBAL(module,cName,name,valueType,isMutable,initializer) \ + static Intrinsics::GenericGlobal \ + cName(#module "." #name,initializer); + +#define DEFINE_INTRINSIC_MEMORY(module,cName,name,type) static Intrinsics::Memory cName(#module "." #name,type); +#define DEFINE_INTRINSIC_TABLE(module,cName,name,type) static Intrinsics::Table cName(#module "." #name,type); \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Runtime/Linker.h b/libraries/wasm-jit/Include/Runtime/Linker.h new file mode 100644 index 000000000..b9b75b6b9 --- /dev/null +++ b/libraries/wasm-jit/Include/Runtime/Linker.h @@ -0,0 +1,78 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Runtime.h" + +#include + +namespace Runtime +{ + // An abstract resolver: maps module+export name pairs to a Runtime::Object. + struct Resolver + { + virtual bool resolve(const std::string& moduleName,const std::string& exportName,IR::ObjectType type,ObjectInstance*& outObject) = 0; + }; + + // A resolver for intrinsics. + struct IntrinsicResolver : Resolver + { + static RUNTIME_API IntrinsicResolver singleton; + RUNTIME_API bool resolve(const std::string& moduleName,const std::string& exportName,IR::ObjectType type,ObjectInstance*& outObject) override; + }; + + // A resolver that ignores the moduleName, and looks for the exportName in a single module. + struct ModuleExportResolver : Resolver + { + ModuleExportResolver(const IR::Module& inModule,ModuleInstance* inModuleInstance): module(inModule), moduleInstance(inModuleInstance) {} + + bool resolve(const std::string& moduleName,const std::string& exportName,IR::ObjectType type,ObjectInstance*& outObject) override; + private: + const IR::Module& module; + ModuleInstance* moduleInstance; + }; + + // A resolver that lazily creates an inner resolver when it's first used, then forwards all queries to the inner resolver. + struct LazyResolver : Resolver + { + LazyResolver(std::function& inInnerResolverThunk) + : innerResolverThunk(std::move(inInnerResolverThunk)), innerResolver(nullptr) {} + + bool resolve(const std::string& moduleName,const std::string& exportName,IR::ObjectType type,Runtime::ObjectInstance*& outObject) override + { + if(!innerResolver) { innerResolver = innerResolverThunk(); } + return innerResolver->resolve(moduleName,exportName,type,outObject); + } + + private: + + std::function innerResolverThunk; + Resolver* innerResolver; + }; + + // A resolver that always returns failure. + struct NullResolver : Resolver + { + bool resolve(const std::string& moduleName,const std::string& exportName,IR::ObjectType type,Runtime::ObjectInstance*& outObject) override + { + return false; + } + }; + + // Links a module using the given resolver, returning an array mapping import indices to objects. + // If the resolver fails to resolve any imports, throws a LinkException. + struct LinkResult + { + struct MissingImport + { + std::string moduleName; + std::string exportName; + IR::ObjectType type; + }; + + std::vector missingImports; + ImportBindings resolvedImports; + bool success; + }; + + RUNTIME_API LinkResult linkModule(const IR::Module& module,Resolver& resolver); +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/Runtime/Runtime.h b/libraries/wasm-jit/Include/Runtime/Runtime.h new file mode 100644 index 000000000..536a1b815 --- /dev/null +++ b/libraries/wasm-jit/Include/Runtime/Runtime.h @@ -0,0 +1,214 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "TaggedValue.h" +#include "IR/Types.h" + +#ifndef RUNTIME_API + #define RUNTIME_API DLL_IMPORT +#endif + +// Declare IR::Module to avoid including the definition. +namespace IR { struct Module; } + +namespace Runtime +{ + // Initializes the runtime. Should only be called once per process. + RUNTIME_API void init(); + + // Information about a runtime exception. + struct Exception + { + enum class Cause : U8 + { + unknown, + accessViolation, + stackOverflow, + integerDivideByZeroOrIntegerOverflow, + invalidFloatOperation, + invokeSignatureMismatch, + reachedUnreachable, + indirectCallSignatureMismatch, + undefinedTableElement, + calledAbort, + calledUnimplementedIntrinsic, + outOfMemory, + invalidSegmentOffset, + misalignedAtomicMemoryAccess + }; + + Cause cause; + std::vector callStack; + }; + + // Returns a string that describes the given exception cause. + inline const char* describeExceptionCause(Exception::Cause cause) + { + switch(cause) + { + case Exception::Cause::accessViolation: return "access violation"; + case Exception::Cause::stackOverflow: return "stack overflow"; + case Exception::Cause::integerDivideByZeroOrIntegerOverflow: return "integer divide by zero or signed integer overflow"; + case Exception::Cause::invalidFloatOperation: return "invalid floating point operation"; + case Exception::Cause::invokeSignatureMismatch: return "invoke signature mismatch"; + case Exception::Cause::reachedUnreachable: return "reached unreachable code"; + case Exception::Cause::indirectCallSignatureMismatch: return "call_indirect to function with wrong signature"; + case Exception::Cause::undefinedTableElement: return "undefined function table element"; + case Exception::Cause::calledAbort: return "called abort"; + case Exception::Cause::calledUnimplementedIntrinsic: return "called unimplemented intrinsic"; + case Exception::Cause::outOfMemory: return "out of memory"; + case Exception::Cause::invalidSegmentOffset: return "invalid segment offset"; + case Exception::Cause::misalignedAtomicMemoryAccess: return "misaligned atomic memory access"; + default: return "unknown"; + } + } + + // Causes a runtime exception. + [[noreturn]] RUNTIME_API void causeException(Exception::Cause cause); + + // These are subclasses of Object, but are only defined within Runtime, so other modules must + // use these forward declarations as opaque pointers. + struct FunctionInstance; + struct TableInstance; + struct MemoryInstance; + struct GlobalInstance; + struct ModuleInstance; + + // A runtime object of any type. + struct ObjectInstance + { + const IR::ObjectKind kind; + + ObjectInstance(IR::ObjectKind inKind): kind(inKind) {} + virtual ~ObjectInstance() {} + }; + + // Tests whether an object is of the given type. + RUNTIME_API bool isA(ObjectInstance* object,const IR::ObjectType& type); + + // Casts from object to subclasses, and vice versa. + inline FunctionInstance* asFunction(ObjectInstance* object) { assert(object && object->kind == IR::ObjectKind::function); return (FunctionInstance*)object; } + inline TableInstance* asTable(ObjectInstance* object) { assert(object && object->kind == IR::ObjectKind::table); return (TableInstance*)object; } + inline MemoryInstance* asMemory(ObjectInstance* object) { assert(object && object->kind == IR::ObjectKind::memory); return (MemoryInstance*)object; } + inline GlobalInstance* asGlobal(ObjectInstance* object) { assert(object && object->kind == IR::ObjectKind::global); return (GlobalInstance*)object; } + inline ModuleInstance* asModule(ObjectInstance* object) { assert(object && object->kind == IR::ObjectKind::module); return (ModuleInstance*)object; } + + template Instance* as(ObjectInstance* object); + template<> inline FunctionInstance* as(ObjectInstance* object) { return asFunction(object); } + template<> inline TableInstance* as(ObjectInstance* object) { return asTable(object); } + template<> inline MemoryInstance* as(ObjectInstance* object) { return asMemory(object); } + template<> inline GlobalInstance* as(ObjectInstance* object) { return asGlobal(object); } + template<> inline ModuleInstance* as(ObjectInstance* object) { return asModule(object); } + + inline ObjectInstance* asObject(FunctionInstance* function) { return (ObjectInstance*)function; } + inline ObjectInstance* asObject(TableInstance* table) { return (ObjectInstance*)table; } + inline ObjectInstance* asObject(MemoryInstance* memory) { return (ObjectInstance*)memory; } + inline ObjectInstance* asObject(GlobalInstance* global) { return (ObjectInstance*)global; } + inline ObjectInstance* asObject(ModuleInstance* module) { return (ObjectInstance*)module; } + + // Casts from object to subclass that checks that the object is the right kind and returns null if not. + inline FunctionInstance* asFunctionNullable(ObjectInstance* object) { return object && object->kind == IR::ObjectKind::function ? (FunctionInstance*)object : nullptr; } + inline TableInstance* asTableNullable(ObjectInstance* object) { return object && object->kind == IR::ObjectKind::table ? (TableInstance*)object : nullptr; } + inline MemoryInstance* asMemoryNullable(ObjectInstance* object) { return object && object->kind == IR::ObjectKind::memory ? (MemoryInstance*)object : nullptr; } + inline GlobalInstance* asGlobalNullable(ObjectInstance* object) { return object && object->kind == IR::ObjectKind::global ? (GlobalInstance*)object : nullptr; } + inline ModuleInstance* asModuleNullable(ObjectInstance* object) { return object && object->kind == IR::ObjectKind::module ? (ModuleInstance*)object : nullptr; } + + // Frees unreferenced Objects, using the provided array of Objects as the root set. + RUNTIME_API void freeUnreferencedObjects(std::vector&& rootObjectReferences); + + // + // Functions + // + + // Invokes a FunctionInstance with the given parameters, and returns the result. + // Throws a Runtime::Exception if a trap occurs. + RUNTIME_API Result invokeFunction(FunctionInstance* function,const std::vector& parameters); + + // Returns the type of a FunctionInstance. + RUNTIME_API const IR::FunctionType* getFunctionType(FunctionInstance* function); + + // + // Tables + // + + // Creates a Table. May return null if the memory allocation fails. + RUNTIME_API TableInstance* createTable(IR::TableType type); + + // Reads an element from the table. Assumes that index is in bounds. + RUNTIME_API ObjectInstance* getTableElement(TableInstance* table,Uptr index); + + // Writes an element to the table. Assumes that index is in bounds, and returns a pointer to the previous value of the element. + RUNTIME_API ObjectInstance* setTableElement(TableInstance* table,Uptr index,ObjectInstance* newValue); + + // Gets the current or maximum size of the table. + RUNTIME_API Uptr getTableNumElements(TableInstance* table); + RUNTIME_API Uptr getTableMaxElements(TableInstance* table); + + // Grows or shrinks the size of a table by numElements. Returns the previous size of the table. + RUNTIME_API Iptr growTable(TableInstance* table,Uptr numElements); + RUNTIME_API Iptr shrinkTable(TableInstance* table,Uptr numElements); + + // + // Memories + // + + // Creates a Memory. May return null if the memory allocation fails. + RUNTIME_API MemoryInstance* createMemory(IR::MemoryType type); + + // Gets the base address of the memory's data. + RUNTIME_API U8* getMemoryBaseAddress(MemoryInstance* memory); + + // Gets the current or maximum size of the memory in pages. + RUNTIME_API Uptr getMemoryNumPages(MemoryInstance* memory); + RUNTIME_API Uptr getMemoryMaxPages(MemoryInstance* memory); + + // Grows or shrinks the size of a memory by numPages. Returns the previous size of the memory. + RUNTIME_API Iptr growMemory(MemoryInstance* memory,Uptr numPages); + RUNTIME_API Iptr shrinkMemory(MemoryInstance* memory,Uptr numPages); + + // Validates that an offset range is wholly inside a Memory's virtual address range. + RUNTIME_API U8* getValidatedMemoryOffsetRange(MemoryInstance* memory,Uptr offset,Uptr numBytes); + + // Validates an access to a single element of memory at the given offset, and returns a reference to it. + template Value& memoryRef(MemoryInstance* memory,U32 offset) + { return *(Value*)getValidatedMemoryOffsetRange(memory,offset,sizeof(Value)); } + + // Validates an access to multiple elements of memory at the given offset, and returns a pointer to it. + template Value* memoryArrayPtr(MemoryInstance* memory,U32 offset,U32 numElements) + { return (Value*)getValidatedMemoryOffsetRange(memory,offset,numElements * sizeof(Value)); } + + // + // Globals + // + + // Creates a GlobalInstance with the specified type and initial value. + RUNTIME_API GlobalInstance* createGlobal(IR::GlobalType type,Value initialValue); + + // Reads the current value of a global. + RUNTIME_API Value getGlobalValue(GlobalInstance* global); + + // Writes a new value to a global, and returns the previous value. + RUNTIME_API Value setGlobalValue(GlobalInstance* global,Value newValue); + + // + // Modules + // + + struct ImportBindings + { + std::vector functions; + std::vector tables; + std::vector memories; + std::vector globals; + }; + + // Instantiates a module, bindings its imports to the specified objects. May throw InstantiationException. + RUNTIME_API ModuleInstance* instantiateModule(const IR::Module& module,ImportBindings&& imports); + + // Gets the default table/memory for a ModuleInstance. + RUNTIME_API MemoryInstance* getDefaultMemory(ModuleInstance* moduleInstance); + RUNTIME_API TableInstance* getDefaultTable(ModuleInstance* moduleInstance); + + // Gets an object exported by a ModuleInstance by name. + RUNTIME_API ObjectInstance* getInstanceExport(ModuleInstance* moduleInstance,const std::string& name); +} diff --git a/libraries/wasm-jit/Include/Runtime/TaggedValue.h b/libraries/wasm-jit/Include/Runtime/TaggedValue.h new file mode 100644 index 000000000..64c5b6ed0 --- /dev/null +++ b/libraries/wasm-jit/Include/Runtime/TaggedValue.h @@ -0,0 +1,128 @@ +#pragma once + +#include "IR/Types.h" +#include "Inline/Floats.h" + +#include + +namespace Runtime +{ + // A runtime value of any type. + struct UntaggedValue + { + union + { + I32 i32; + U32 u32; + I64 i64; + U64 u64; + F32 f32; + F64 f64; + #if ENABLE_SIMD_PROTOTYPE + IR::V128 v128; + #endif + }; + + UntaggedValue(I32 inI32) { i32 = inI32; } + UntaggedValue(I64 inI64) { i64 = inI64; } + UntaggedValue(U32 inU32) { u32 = inU32; } + UntaggedValue(U64 inU64) { u64 = inU64; } + UntaggedValue(F32 inF32) { f32 = inF32; } + UntaggedValue(F64 inF64) { f64 = inF64; } + #if ENABLE_SIMD_PROTOTYPE + UntaggedValue(IR::V128 inV128) { v128 = inV128; } + #endif + UntaggedValue() {memset(this,0,sizeof(*this));} + }; + + // A boxed value: may hold any value that can be passed to a function invoked through the runtime. + struct Value : UntaggedValue + { + IR::ValueType type; + + Value(I32 inI32): UntaggedValue(inI32), type(IR::ValueType::i32) {} + Value(I64 inI64): UntaggedValue(inI64), type(IR::ValueType::i64) {} + Value(U32 inU32): UntaggedValue(inU32), type(IR::ValueType::i32) {} + Value(U64 inU64): UntaggedValue(inU64), type(IR::ValueType::i64) {} + Value(F32 inF32): UntaggedValue(inF32), type(IR::ValueType::f32) {} + Value(F64 inF64): UntaggedValue(inF64), type(IR::ValueType::f64) {} + #if ENABLE_SIMD_PROTOTYPE + Value(const IR::V128& inV128): UntaggedValue(inV128), type(IR::ValueType::v128) {} + #endif + Value(IR::ValueType inType,UntaggedValue inValue): UntaggedValue(inValue), type(inType) {} + Value(): type(IR::ValueType::any) {} + + friend std::string asString(const Value& value) + { + switch(value.type) + { + case IR::ValueType::i32: return "i32(" + std::to_string(value.i32) + ")"; + case IR::ValueType::i64: return "i64(" + std::to_string(value.i64) + ")"; + case IR::ValueType::f32: return "f32(" + Floats::asString(value.f32) + ")"; + case IR::ValueType::f64: return "f64(" + Floats::asString(value.f64) + ")"; + #if ENABLE_SIMD_PROTOTYPE + case IR::ValueType::v128: return "v128(" + std::to_string(value.v128.u64[0]) + "," + std::to_string(value.v128.u64[1]) + ")"; + #endif + default: Errors::unreachable(); + } + } + }; + + // A boxed value: may hold any value that can be returned from a function invoked through the runtime. + struct Result : UntaggedValue + { + IR::ResultType type; + + Result(I32 inI32): UntaggedValue(inI32), type(IR::ResultType::i32) {} + Result(I64 inI64): UntaggedValue(inI64), type(IR::ResultType::i64) {} + Result(U32 inU32): UntaggedValue(inU32), type(IR::ResultType::i32) {} + Result(U64 inU64): UntaggedValue(inU64), type(IR::ResultType::i64) {} + Result(F32 inF32): UntaggedValue(inF32), type(IR::ResultType::f32) {} + Result(F64 inF64): UntaggedValue(inF64), type(IR::ResultType::f64) {} + #if ENABLE_SIMD_PROTOTYPE + Result(const IR::V128& inV128): UntaggedValue(inV128), type(IR::ResultType::v128) {} + #endif + Result(IR::ResultType inType,UntaggedValue inValue): UntaggedValue(inValue), type(inType) {} + Result(const Value& inValue): UntaggedValue(inValue), type(asResultType(inValue.type)) {} + Result(): type(IR::ResultType::none) {} + + friend std::string asString(const Result& result) + { + switch(result.type) + { + case IR::ResultType::none: return "()"; + case IR::ResultType::i32: return "i32(" + std::to_string(result.i32) + ")"; + case IR::ResultType::i64: return "i64(" + std::to_string(result.i64) + ")"; + case IR::ResultType::f32: return "f32(" + Floats::asString(result.f32) + ")"; + case IR::ResultType::f64: return "f64(" + Floats::asString(result.f64) + ")"; + #if ENABLE_SIMD_PROTOTYPE + case IR::ResultType::v128: return "v128(" + std::to_string(result.v128.u64[0]) + "," + std::to_string(result.v128.u64[1]) + ")"; + #endif + default: Errors::unreachable(); + } + } + }; + + // Compares whether two UntaggedValue of the same type have identical bits. + inline bool areBitsEqual(IR::ResultType type,UntaggedValue a,UntaggedValue b) + { + switch(type) + { + case IR::ResultType::i32: + case IR::ResultType::f32: return a.i32 == b.i32; + case IR::ResultType::i64: + case IR::ResultType::f64: return a.i64 == b.i64; + #if ENABLE_SIMD_PROTOTYPE + case IR::ResultType::v128: return a.v128.u64[0] == b.v128.u64[0] && a.v128.u64[1] == b.v128.u64[1]; + #endif + case IR::ResultType::none: return true; + default: Errors::unreachable(); + }; + } + + // Compares whether two Value/Result have the same type and bits. + inline bool areBitsEqual(const Value& a,const Value& b) { return a.type == b.type && areBitsEqual(asResultType(a.type),a,b); } + inline bool areBitsEqual(const Result& a,const Result& b) { return a.type == b.type && areBitsEqual(a.type,a,b); } + inline bool areBitsEqual(const Result& a,const Value& b) { return a.type == asResultType(b.type) && areBitsEqual(a.type,a,b); } + inline bool areBitsEqual(const Value& a,const Result& b) { return asResultType(a.type) == b.type && areBitsEqual(b.type,a,b); } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/WASM/WASM.h b/libraries/wasm-jit/Include/WASM/WASM.h new file mode 100644 index 000000000..458e0155f --- /dev/null +++ b/libraries/wasm-jit/Include/WASM/WASM.h @@ -0,0 +1,16 @@ +#pragma once + +#ifndef WEBASSEMBLY_API + #define WEBASSEMBLY_API DLL_IMPORT +#endif + +#include "Inline/BasicTypes.h" + +namespace IR { struct Module; struct DisassemblyNames; } +namespace Serialization { struct InputStream; struct OutputStream; } + +namespace WASM +{ + WEBASSEMBLY_API void serialize(Serialization::InputStream& stream,IR::Module& module); + WEBASSEMBLY_API void serialize(Serialization::OutputStream& stream,const IR::Module& module); +} diff --git a/libraries/wasm-jit/Include/WAST/TestScript.h b/libraries/wasm-jit/Include/WAST/TestScript.h new file mode 100644 index 000000000..3b127e0ea --- /dev/null +++ b/libraries/wasm-jit/Include/WAST/TestScript.h @@ -0,0 +1,137 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "WAST.h" +#include "Runtime/TaggedValue.h" + +#include +#include + +namespace WAST +{ + struct Command + { + enum Type + { + _register, + action, + assert_return, + assert_return_canonical_nan, + assert_return_arithmetic_nan, + assert_trap, + assert_invalid, + assert_malformed, + assert_unlinkable + }; + const Type type; + const TextFileLocus locus; + + Command(Type inType,TextFileLocus&& inLocus): type(inType), locus(inLocus) {} + }; + + // Parse a test script from a string. Returns true if it succeeds, and writes the test commands to outTestCommands. + WAST_API void parseTestCommands( + const char* string, + Uptr stringLength, + std::vector>& outTestCommands, + std::vector& outErrors); + + // Actions + + enum class ActionType + { + _module, + invoke, + get, + }; + + struct Action + { + const ActionType type; + const TextFileLocus locus; + + Action(ActionType inType,TextFileLocus&& inLocus): type(inType), locus(inLocus) {} + }; + + struct ModuleAction : Action + { + std::string internalModuleName; + std::unique_ptr module; + ModuleAction(TextFileLocus&& inLocus,std::string&& inInternalModuleName,IR::Module* inModule) + : Action(ActionType::_module,std::move(inLocus)), internalModuleName(inInternalModuleName), module(inModule) {} + }; + + struct InvokeAction : Action + { + std::string internalModuleName; + std::string exportName; + std::vector arguments; + InvokeAction(TextFileLocus&& inLocus,std::string&& inInternalModuleName,std::string&& inExportName,std::vector&& inArguments) + : Action(ActionType::invoke,std::move(inLocus)), internalModuleName(inInternalModuleName), exportName(inExportName), arguments(inArguments) + {} + }; + + struct GetAction : Action + { + std::string internalModuleName; + std::string exportName; + GetAction(TextFileLocus&& inLocus,std::string&& inInternalModuleName,std::string&& inExportName) + : Action(ActionType::get,std::move(inLocus)), internalModuleName(inInternalModuleName), exportName(inExportName) + {} + }; + + // Commands + + struct RegisterCommand : Command + { + std::string moduleName; + std::string internalModuleName; + RegisterCommand(TextFileLocus&& inLocus,std::string&& inModuleName,std::string&& inInternalModuleName) + : Command(Command::_register,std::move(inLocus)), moduleName(inModuleName), internalModuleName(inInternalModuleName) + {} + }; + + struct ActionCommand : Command + { + std::unique_ptr action; + ActionCommand(TextFileLocus&& inLocus,Action* inAction) + : Command(Command::action,std::move(inLocus)), action(inAction) {} + }; + + struct AssertReturnCommand : Command + { + std::unique_ptr action; + Runtime::Result expectedReturn; + AssertReturnCommand(TextFileLocus&& inLocus,Action* inAction,Runtime::Result inExpectedReturn) + : Command(Command::assert_return,std::move(inLocus)), action(inAction), expectedReturn(inExpectedReturn) {} + }; + + struct AssertReturnNaNCommand : Command + { + std::unique_ptr action; + AssertReturnNaNCommand(Command::Type inType,TextFileLocus&& inLocus,Action* inAction) + : Command(inType,std::move(inLocus)), action(inAction) {} + }; + + struct AssertTrapCommand : Command + { + std::unique_ptr action; + Runtime::Exception::Cause expectedCause; + AssertTrapCommand(TextFileLocus&& inLocus,Action* inAction,Runtime::Exception::Cause inExpectedCause) + : Command(Command::assert_trap,std::move(inLocus)), action(inAction), expectedCause(inExpectedCause) {} + }; + + struct AssertInvalidOrMalformedCommand : Command + { + bool wasInvalidOrMalformed; + AssertInvalidOrMalformedCommand(Command::Type inType,TextFileLocus&& inLocus,bool inWasInvalidOrMalformed) + : Command(inType,std::move(inLocus)), wasInvalidOrMalformed(inWasInvalidOrMalformed) {} + }; + + struct AssertUnlinkableCommand : Command + { + std::unique_ptr moduleAction; + AssertUnlinkableCommand(TextFileLocus&& inLocus,ModuleAction* inModuleAction) + : Command(Command::assert_unlinkable,std::move(inLocus)), moduleAction(inModuleAction) {} + }; +} \ No newline at end of file diff --git a/libraries/wasm-jit/Include/WAST/WAST.h b/libraries/wasm-jit/Include/WAST/WAST.h new file mode 100644 index 000000000..c3e18d7f4 --- /dev/null +++ b/libraries/wasm-jit/Include/WAST/WAST.h @@ -0,0 +1,45 @@ +#pragma once + +#ifndef WAST_API + #define WAST_API DLL_IMPORT +#endif + +#include "Inline/BasicTypes.h" +#include "Runtime/Runtime.h" +#include "WASM/WASM.h" + +namespace WAST +{ + // A location in a text file. + struct TextFileLocus + { + std::string sourceLine; + U32 newlines; + U32 tabs; + U32 characters; + + TextFileLocus(): newlines(0), tabs(0), characters(0) {} + + U32 lineNumber() const { return newlines + 1; } + U32 column(U32 spacesPerTab = 4) const { return tabs * spacesPerTab + characters + 1; } + + std::string describe(U32 spacesPerTab = 4) const + { + return std::to_string(lineNumber()) + ":" + std::to_string(column(spacesPerTab)); + } + }; + + // A WAST parse error. + struct Error + { + TextFileLocus locus; + std::string message; + }; + + // Parse a module from a string. Returns true if it succeeds, and writes the module to outModule. + // If it fails, returns false and appends a list of errors to outErrors. + WAST_API bool parseModule(const char* string,Uptr stringLength,IR::Module& outModule,std::vector& outErrors); + + // Prints a module in WAST format. + WAST_API std::string print(const IR::Module& module); +} \ No newline at end of file diff --git a/libraries/wasm-jit/LICENSE b/libraries/wasm-jit/LICENSE new file mode 100644 index 000000000..37d98f425 --- /dev/null +++ b/libraries/wasm-jit/LICENSE @@ -0,0 +1,15 @@ +# License + +Copyright (c) 2016, Andrew Scheidecker +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of WAVM nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The contents of [Test/spec](Test/spec) is covered by the license in [Test/spec/LICENSE](Test/spec/LICENSE). +[Source/ThirdParty/dtoa.c](Source/ThirdParty/dtoa.c) is covered by the license in that file. +[Source/ThirdParty/xxhash](Source/ThirdParty/xxhash) is covered by the license in [Source/ThirdParty/xxhash/LICENSE](Source/ThirdParty/xxhash/LICENSE). \ No newline at end of file diff --git a/libraries/wasm-jit/README.md b/libraries/wasm-jit/README.md new file mode 100644 index 000000000..1bc83838b --- /dev/null +++ b/libraries/wasm-jit/README.md @@ -0,0 +1,100 @@ +[![Linux/OSX Build Status](https://travis-ci.org/AndrewScheidecker/WAVM.svg?branch=master)](https://travis-ci.org/AndrewScheidecker/WAVM) + +Primary repo: https://github.com/AndrewScheidecker/WAVM + +# Overview + +This is a standalone VM for WebAssembly. It can load both the standard binary format, and the text format defined by the [WebAssembly reference interpreter](https://github.com/WebAssembly/spec/tree/master/ml-proto). For the text format, it can load both the standard stack machine syntax and the old-fashioned AST syntax used by the reference interpreter, and all of the testing commands. + +# Building and running it + +To build it, you'll need CMake and [LLVM 4.0](http://llvm.org/releases/download.html#4.0.0). If CMake can't find your LLVM directory, you can manually give it the location in the LLVM_DIR CMake configuration variable. Note that on Windows, you must compile LLVM from source, and manually point the LLVM_DIR configuration variable at `\lib\cmake\llvm`. + +### Building WAVM on Windows + +**1.) Install the [Visual Studio C++ Build Tools for Visual Studio 2015 or 2017](http://landinghub.visualstudio.com/visual-cpp-build-tools)** + +Take note of which version you have installed: + +- If using Visual Studio 2015, use `-G"Visual Studio 14 Win64"` for the `` placeholder below +- If using Visual Studio 2017, use `-G"Visual Studio 15 Win64"` for the `` placeholder below + +**2.) Build LLVM x64 on Windows with Visual Studio** + +Create an llvm_build directory, navigate to that directory and run: + + cmake -Thost=x64 -DCMAKE_INSTALL_PREFIX= + +Open the generated LLVM.sln locateed within the 'llvm_build' directory in Visual Studio and build the "INSTALL" Project + +The output binaries should be located in `` + +**3.) Build WAVM x64 on Windows with Visual Studio against LLVM x64** + +Create a wavm_build directory, navigate to that directory and run: + + cmake -Thost=x64 -DLLVM_DIR=\lib\cmake\llvm + +Open the generated WAVM.sln located within the 'wavm_build' directory in Visual Studio and build the "ALL_BUILD" Project + +The output binaries should be located in `wavm_build\bin` + +# Usage + +I've tested it on Windows with Visual C++ 2015/2017, Linux with GCC and clang, and MacOS with Xcode/clang. Travis CI is testing Linux/GCC, Linux/clang, and OSX/clang. + +The primary executable is `wavm`: +``` +Usage: wavm [switches] [programfile] [--] [arguments] + in.wast|in.wasm Specify program file (.wast/.wasm) + -f|--function name Specify function name to run in module rather than main + -c|--check Exit after checking that the program is valid + -d|--debug Write additional debug information to stdout + -- Stop parsing arguments +``` + +`wavm` will load a WebAssembly file and call `main` (or a specified function). Example programs to try without changing any code include those found in the Test/wast and Test/spec directory such as the following: + +``` +wavm Test/wast/helloworld.wast +wavm Test/Benchmark/Benchmark.wast +wavm Test/zlib/zlib.wast +``` + +WebAssembly programs that export a main function with the standard parameters will be passed in the command line arguments. If the same main function returns a i32 type it will become the exit code. WAVM supports Emscripten's defined I/O functions so programs can read from stdin and write to stdout and stderr. See [echo.wast](Test/wast/echo.wast) for an example of a program that echos the command line arguments back out through stdout. + +There are a few additional executables that can be used to assemble the WAST file into a binary: + +``` +Assemble in.wast out.wasm +``` + +Disassemble a binary into a WAST file: + +``` +Disassemble in.wasm out.wast +``` + +and to execute a test script defined by a WAST file (see the [Test/spec directory](Test/spec) for examples of the syntax): + +``` +Test in.wast +``` + +# Architecture + +## IR + +The [IR](Include/IR) (Intermediate Representation) is the glue that the WAST parser, the WASM serialization, and the Runtime communicate through. It closely mirrors the semantics of the WebAssembly binary format, but is easier to work with in memory. + +## Parsing + +Parsing the WebAssembly text format uses a table-driven deterministic finite automaton to scan the input string for tokens. The tables are generated from a set of tokens that match literal strings, and a set of tokens that match regular expressions. The parser is a standard recursive descent parser. + +## Runtime + +The [Runtime](Source/Runtime/) is the primary consumer of the byte code. It provides an [API](Include/Runtime/Runtime.h) for instantiating WebAssembly modules and calling functions exported from them. To instantiate a module, it [initializes the module's runtime environment](Source/Runtime/ModuleInstance.cpp) (globals, memory objects, and table objects), [translates the byte code into LLVM IR](Source/Runtime/LLVMEmitIR.cpp), and [uses LLVM to generate machine code](Source/Runtime/LLVMJIT.cpp) for the module's functions. + +# License + +WAVM is provided under the terms of [LICENSE](LICENSE). \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Emscripten/Emscripten.cpp b/libraries/wasm-jit/Source/Emscripten/Emscripten.cpp new file mode 100644 index 000000000..969d75666 --- /dev/null +++ b/libraries/wasm-jit/Source/Emscripten/Emscripten.cpp @@ -0,0 +1,451 @@ +#include "Inline/BasicTypes.h" +#include "Logging/Logging.h" +#include "IR/IR.h" +#include "IR/Module.h" +#include "Runtime/Runtime.h" +#include "Runtime/Intrinsics.h" +#include "Emscripten.h" +#include +#include +#include +#include + +#ifndef _WIN32 +#include +#endif + +namespace Emscripten +{ + using namespace IR; + using namespace Runtime; + + static U32 coerce32bitAddress(Uptr address) + { + if(address >= UINT32_MAX) { causeException(Exception::Cause::accessViolation); } + return (U32)address; + } + + DEFINE_INTRINSIC_GLOBAL(env,STACKTOP,STACKTOP,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,STACK_MAX,STACK_MAX,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,tempDoublePtr,tempDoublePtr,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,ABORT,ABORT,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,cttz_i8,cttz_i8,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,___dso_handle,___dso_handle,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,_stderr,_stderr,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,_stdin,_stdin,i32,false,0); + DEFINE_INTRINSIC_GLOBAL(env,_stdout,_stdout,i32,false,0); + + DEFINE_INTRINSIC_MEMORY(env,emscriptenMemory,memory,MemoryType(false,SizeConstraints({256,UINT64_MAX}))); + DEFINE_INTRINSIC_TABLE(env,table,table,TableType(TableElementType::anyfunc,false,SizeConstraints({1024*1024,UINT64_MAX}))); + + DEFINE_INTRINSIC_GLOBAL(env,memoryBase,memoryBase,i32,false,1024); + DEFINE_INTRINSIC_GLOBAL(env,tableBase,tableBase,i32,false,0); + + DEFINE_INTRINSIC_GLOBAL(env,DYNAMICTOP_PTR,DYNAMICTOP_PTR,i32,false,0) + DEFINE_INTRINSIC_GLOBAL(env,em_environ,_environ,i32,false,0) + DEFINE_INTRINSIC_GLOBAL(env,EMTSTACKTOP,EMTSTACKTOP,i32,false,0) + DEFINE_INTRINSIC_GLOBAL(env,EMT_STACK_MAX,EMT_STACK_MAX,i32,false,0) + DEFINE_INTRINSIC_GLOBAL(env,eb,eb,i32,false,0) + + Platform::Mutex* sbrkMutex = Platform::createMutex(); + bool hasSbrkBeenCalled = false; + Uptr sbrkNumPages = 0; + U32 sbrkMinBytes = 0; + U32 sbrkNumBytes = 0; + + static U32 sbrk(I32 numBytes) + { + Platform::Lock sbrkLock(sbrkMutex); + + if(!hasSbrkBeenCalled) + { + // Do some first time initialization. + sbrkNumPages = getMemoryNumPages(emscriptenMemory); + sbrkMinBytes = sbrkNumBytes = coerce32bitAddress(sbrkNumPages << numBytesPerPageLog2); + hasSbrkBeenCalled = true; + } + else + { + // Ensure that nothing else is calling growMemory/shrinkMemory. + if(getMemoryNumPages(emscriptenMemory) != sbrkNumPages) + { causeException(Exception::Cause::unknown); } + } + + const U32 previousNumBytes = sbrkNumBytes; + + // Round the absolute value of numBytes to an alignment boundary, and ensure it won't allocate too much or too little memory. + numBytes = (numBytes + 7) & ~7; + if(numBytes > 0 && previousNumBytes > UINT32_MAX - numBytes) { causeException(Exception::Cause::accessViolation); } + else if(numBytes < 0 && previousNumBytes < sbrkMinBytes - numBytes) { causeException(Exception::Cause::accessViolation); } + + // Update the number of bytes allocated, and compute the number of pages needed for it. + sbrkNumBytes += numBytes; + const Uptr numDesiredPages = (sbrkNumBytes + numBytesPerPage - 1) >> numBytesPerPageLog2; + + // Grow or shrink the memory object to the desired number of pages. + if(numDesiredPages > sbrkNumPages) { growMemory(emscriptenMemory,numDesiredPages - sbrkNumPages); } + else if(numDesiredPages < sbrkNumPages) { shrinkMemory(emscriptenMemory,sbrkNumPages - numDesiredPages); } + sbrkNumPages = numDesiredPages; + + return previousNumBytes; + } + + DEFINE_INTRINSIC_FUNCTION1(env,_sbrk,_sbrk,i32,i32,numBytes) + { + return sbrk(numBytes); + } + + DEFINE_INTRINSIC_FUNCTION1(env,_time,_time,i32,i32,address) + { + time_t t = time(nullptr); + if(address) + { + memoryRef(emscriptenMemory,address) = (I32)t; + } + return (I32)t; + } + + DEFINE_INTRINSIC_FUNCTION0(env,___errno_location,___errno_location,i32) + { + return 0; + } + + DEFINE_INTRINSIC_FUNCTION1(env,_sysconf,_sysconf,i32,i32,a) + { + enum { sysConfPageSize = 30 }; + switch(a) + { + case sysConfPageSize: return IR::numBytesPerPage; + default: causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + } + + DEFINE_INTRINSIC_FUNCTION2(env,_pthread_cond_wait,_pthread_cond_wait,i32,i32,a,i32,b) { return 0; } + DEFINE_INTRINSIC_FUNCTION1(env,_pthread_cond_broadcast,_pthread_cond_broadcast,i32,i32,a) { return 0; } + DEFINE_INTRINSIC_FUNCTION2(env,_pthread_key_create,_pthread_key_create,i32,i32,a,i32,b) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + DEFINE_INTRINSIC_FUNCTION1(env,_pthread_mutex_lock,_pthread_mutex_lock,i32,i32,a) { return 0; } + DEFINE_INTRINSIC_FUNCTION1(env,_pthread_mutex_unlock,_pthread_mutex_unlock,i32,i32,a) { return 0; } + DEFINE_INTRINSIC_FUNCTION2(env,_pthread_setspecific,_pthread_setspecific,i32,i32,a,i32,b) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + DEFINE_INTRINSIC_FUNCTION1(env,_pthread_getspecific,_pthread_getspecific,i32,i32,a) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + DEFINE_INTRINSIC_FUNCTION2(env,_pthread_once,_pthread_once,i32,i32,a,i32,b) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + DEFINE_INTRINSIC_FUNCTION2(env,_pthread_cleanup_push,_pthread_cleanup_push,none,i32,a,i32,b) { } + DEFINE_INTRINSIC_FUNCTION1(env,_pthread_cleanup_pop,_pthread_cleanup_pop,none,i32,a) { } + DEFINE_INTRINSIC_FUNCTION0(env,_pthread_self,_pthread_self,i32) { return 0; } + + DEFINE_INTRINSIC_FUNCTION0(env,___ctype_b_loc,___ctype_b_loc,i32) + { + unsigned short data[384] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,8195,8194,8194,8194,8194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,24577,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,55304,55304,55304,55304,55304,55304,55304,55304,55304,55304,49156,49156,49156,49156,49156,49156,49156,54536,54536,54536,54536,54536,54536,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,49156,49156,49156,49156,49156,49156,54792,54792,54792,54792,54792,54792,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,49156,49156,49156,49156,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + static U32 vmAddress = 0; + if(vmAddress == 0) + { + vmAddress = coerce32bitAddress(sbrk(sizeof(data))); + memcpy(memoryArrayPtr(emscriptenMemory,vmAddress,sizeof(data)),data,sizeof(data)); + } + return vmAddress + sizeof(short)*128; + } + DEFINE_INTRINSIC_FUNCTION0(env,___ctype_toupper_loc,___ctype_toupper_loc,i32) + { + I32 data[384] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255}; + static U32 vmAddress = 0; + if(vmAddress == 0) + { + vmAddress = coerce32bitAddress(sbrk(sizeof(data))); + memcpy(memoryArrayPtr(emscriptenMemory,vmAddress,sizeof(data)),data,sizeof(data)); + } + return vmAddress + sizeof(I32)*128; + } + DEFINE_INTRINSIC_FUNCTION0(env,___ctype_tolower_loc,___ctype_tolower_loc,i32) + { + I32 data[384] = {128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255}; + static U32 vmAddress = 0; + if(vmAddress == 0) + { + vmAddress = coerce32bitAddress(sbrk(sizeof(data))); + memcpy(memoryArrayPtr(emscriptenMemory,vmAddress,sizeof(data)),data,sizeof(data)); + } + return vmAddress + sizeof(I32)*128; + } + DEFINE_INTRINSIC_FUNCTION4(env,___assert_fail,___assert_fail,none,i32,condition,i32,filename,i32,line,i32,function) + { + causeException(Runtime::Exception::Cause::calledAbort); + } + + DEFINE_INTRINSIC_FUNCTION3(env,___cxa_atexit,___cxa_atexit,i32,i32,a,i32,b,i32,c) + { + return 0; + } + DEFINE_INTRINSIC_FUNCTION1(env,___cxa_guard_acquire,___cxa_guard_acquire,i32,i32,address) + { + if(!memoryRef(emscriptenMemory,address)) + { + memoryRef(emscriptenMemory,address) = 1; + return 1; + } + else + { + return 0; + } + } + DEFINE_INTRINSIC_FUNCTION1(env,___cxa_guard_release,___cxa_guard_release,none,i32,a) + {} + DEFINE_INTRINSIC_FUNCTION3(env,___cxa_throw,___cxa_throw,none,i32,a,i32,b,i32,c) + { + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + DEFINE_INTRINSIC_FUNCTION1(env,___cxa_begin_catch,___cxa_begin_catch,i32,i32,a) + { + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + DEFINE_INTRINSIC_FUNCTION1(env,___cxa_allocate_exception,___cxa_allocate_exception,i32,i32,size) + { + return coerce32bitAddress(sbrk(size)); + } + DEFINE_INTRINSIC_FUNCTION0(env,__ZSt18uncaught_exceptionv,__ZSt18uncaught_exceptionv,i32) + { + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + DEFINE_INTRINSIC_FUNCTION0(env,_abort,_abort,none) + { + causeException(Runtime::Exception::Cause::calledAbort); + } + DEFINE_INTRINSIC_FUNCTION1(env,_exit,_exit,none,i32,code) + { + causeException(Runtime::Exception::Cause::calledAbort); + } + DEFINE_INTRINSIC_FUNCTION1(env,abort,abort,none,i32,code) + { + Log::printf(Log::Category::error,"env.abort(%i)\n",code); + causeException(Runtime::Exception::Cause::calledAbort); + } + + static U32 currentLocale = 0; + DEFINE_INTRINSIC_FUNCTION1(env,_uselocale,_uselocale,i32,i32,locale) + { + auto oldLocale = currentLocale; + currentLocale = locale; + return oldLocale; + } + DEFINE_INTRINSIC_FUNCTION3(env,_newlocale,_newlocale,i32,i32,mask,i32,locale,i32,base) + { + if(!base) + { + base = coerce32bitAddress(sbrk(4)); + } + return base; + } + DEFINE_INTRINSIC_FUNCTION1(env,_freelocale,_freelocale,none,i32,a) + {} + + DEFINE_INTRINSIC_FUNCTION5(env,_strftime_l,_strftime_l,i32,i32,a,i32,b,i32,c,i32,d,i32,e) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + DEFINE_INTRINSIC_FUNCTION1(env,_strerror,_strerror,i32,i32,a) { causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); } + + DEFINE_INTRINSIC_FUNCTION2(env,_catopen,_catopen,i32,i32,a,i32,b) { return (U32)-1; } + DEFINE_INTRINSIC_FUNCTION4(env,_catgets,_catgets,i32,i32,catd,i32,set_id,i32,msg_id,i32,s) { return s; } + DEFINE_INTRINSIC_FUNCTION1(env,_catclose,_catclose,i32,i32,a) { return 0; } + + DEFINE_INTRINSIC_FUNCTION3(env,_emscripten_memcpy_big,_emscripten_memcpy_big,i32,i32,a,i32,b,i32,c) + { + memcpy(memoryArrayPtr(emscriptenMemory,a,c),memoryArrayPtr(emscriptenMemory,b,c),U32(c)); + return a; + } + + enum class ioStreamVMHandle + { + StdErr = 1, + StdIn = 2, + StdOut = 3 + }; + FILE* vmFile(U32 vmHandle) + { + switch((ioStreamVMHandle)vmHandle) + { + case ioStreamVMHandle::StdErr: return stderr; + case ioStreamVMHandle::StdIn: return stdin; + case ioStreamVMHandle::StdOut: return stdout; + default: return stdout;//std::cerr << "invalid file handle " << vmHandle << std::endl; throw; + } + } + + DEFINE_INTRINSIC_FUNCTION3(env,_vfprintf,_vfprintf,i32,i32,file,i32,formatPointer,i32,argList) + { + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + DEFINE_INTRINSIC_FUNCTION1(env,_getc,_getc,i32,i32,file) + { + return getc(vmFile(file)); + } + DEFINE_INTRINSIC_FUNCTION2(env,_ungetc,_ungetc,i32,i32,character,i32,file) + { + return ungetc(character,vmFile(file)); + } + DEFINE_INTRINSIC_FUNCTION4(env,_fread,_fread,i32,i32,pointer,i32,size,i32,count,i32,file) + { + return (I32)fread(memoryArrayPtr(emscriptenMemory,pointer,U64(size) * U64(count)),U64(size),U64(count),vmFile(file)); + } + DEFINE_INTRINSIC_FUNCTION4(env,_fwrite,_fwrite,i32,i32,pointer,i32,size,i32,count,i32,file) + { + return (I32)fwrite(memoryArrayPtr(emscriptenMemory,pointer,U64(size) * U64(count)),U64(size),U64(count),vmFile(file)); + } + DEFINE_INTRINSIC_FUNCTION2(env,_fputc,_fputc,i32,i32,character,i32,file) + { + return fputc(character,vmFile(file)); + } + DEFINE_INTRINSIC_FUNCTION1(env,_fflush,_fflush,i32,i32,file) + { + return fflush(vmFile(file)); + } + + DEFINE_INTRINSIC_FUNCTION1(env,___lock,___lock,none,i32,a) + { + } + DEFINE_INTRINSIC_FUNCTION1(env,___unlock,___unlock,none,i32,a) + { + } + DEFINE_INTRINSIC_FUNCTION1(env,___lockfile,___lockfile,i32,i32,a) + { + return 1; + } + DEFINE_INTRINSIC_FUNCTION1(env,___unlockfile,___unlockfile,none,i32,a) + { + } + + DEFINE_INTRINSIC_FUNCTION2(env,___syscall6,___syscall6,i32,i32,a,i32,b) + { + // close + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + + DEFINE_INTRINSIC_FUNCTION2(env,___syscall54,___syscall54,i32,i32,a,i32,b) + { + // ioctl + return 0; + } + + DEFINE_INTRINSIC_FUNCTION2(env,___syscall140,___syscall140,i32,i32,a,i32,b) + { + // llseek + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + + DEFINE_INTRINSIC_FUNCTION2(env,___syscall145,___syscall145,i32,i32,file,i32,argsPtr) + { + // readv + causeException(Runtime::Exception::Cause::calledUnimplementedIntrinsic); + } + + DEFINE_INTRINSIC_FUNCTION2(env,___syscall146,___syscall146,i32,i32,file,i32,argsPtr) + { + // writev + U32* args = memoryArrayPtr(emscriptenMemory,argsPtr,3); + U32 iov = args[1]; + U32 iovcnt = args[2]; +#ifdef _WIN32 + U32 count = 0; + for(U32 i = 0; i < iovcnt; i++) + { + U32 base = memoryRef(emscriptenMemory,iov + i * 8); + U32 len = memoryRef(emscriptenMemory,iov + i * 8 + 4); + U32 size = (U32)fwrite(memoryArrayPtr(emscriptenMemory,base,len), 1, len, vmFile(file)); + count += size; + if (size < len) + break; + } +#else + struct iovec *native_iovec = new(alloca(sizeof(iovec)*iovcnt)) struct iovec [iovcnt]; + for(U32 i = 0; i < iovcnt; i++) + { + U32 base = memoryRef(emscriptenMemory,iov + i * 8); + U32 len = memoryRef(emscriptenMemory,iov + i * 8 + 4); + + native_iovec[i].iov_base = memoryArrayPtr(emscriptenMemory,base,len); + native_iovec[i].iov_len = len; + } + Iptr count = writev(fileno(vmFile(file)), native_iovec, iovcnt); +#endif + return count; + } + + DEFINE_INTRINSIC_FUNCTION1(asm2wasm,f64_to_int,f64-to-int,i32,f64,f) { return (I32)f; } + + static F64 zero = 0.0; + + static F64 makeNaN() { return zero / zero; } + static F64 makeInf() { return 1.0/zero; } + + DEFINE_INTRINSIC_GLOBAL(global,NaN,NaN,f64,false,makeNaN()) + DEFINE_INTRINSIC_GLOBAL(global,Infinity,Infinity,f64,false,makeInf()) + + DEFINE_INTRINSIC_FUNCTION2(asm2wasm,i32_remu,i32u-rem,i32,i32,left,i32,right) + { + return (I32)((U32)left % (U32)right); + } + DEFINE_INTRINSIC_FUNCTION2(asm2wasm,i32_rems,i32s-rem,i32,i32,left,i32,right) + { + return left % right; + } + DEFINE_INTRINSIC_FUNCTION2(asm2wasm,i32_divu,i32u-div,i32,i32,left,i32,right) + { + return (I32)((U32)left / (U32)right); + } + DEFINE_INTRINSIC_FUNCTION2(asm2wasm,i32_divs,i32s-div,i32,i32,left,i32,right) + { + return left / right; + } + + EMSCRIPTEN_API void initInstance(const Module& module,ModuleInstance* moduleInstance) + { + // Only initialize the module as an Emscripten module if it uses the emscripten memory by default. + if(getDefaultMemory(moduleInstance) == emscriptenMemory) + { + // Allocate a 5MB stack. + STACKTOP.reset(coerce32bitAddress(sbrk(5*1024*1024))); + STACK_MAX.reset(coerce32bitAddress(sbrk(0))); + + // Allocate some 8 byte memory region for tempDoublePtr. + tempDoublePtr.reset(coerce32bitAddress(sbrk(8))); + + // Setup IO stream handles. + _stderr.reset(coerce32bitAddress(sbrk(sizeof(U32)))); + _stdin.reset(coerce32bitAddress(sbrk(sizeof(U32)))); + _stdout.reset(coerce32bitAddress(sbrk(sizeof(U32)))); + memoryRef(emscriptenMemory,_stderr) = (U32)ioStreamVMHandle::StdErr; + memoryRef(emscriptenMemory,_stdin) = (U32)ioStreamVMHandle::StdIn; + memoryRef(emscriptenMemory,_stdout) = (U32)ioStreamVMHandle::StdOut; + + // Call the establishStackSpace function to set the Emscripten module's internal stack pointers. + FunctionInstance* establishStackSpace = asFunctionNullable(getInstanceExport(moduleInstance,"establishStackSpace")); + if(establishStackSpace && getFunctionType(establishStackSpace) == FunctionType::get(ResultType::none,{ValueType::i32,ValueType::i32})) + { + std::vector parameters = {Runtime::Value(STACKTOP),Runtime::Value(STACK_MAX)}; + Runtime::invokeFunction(establishStackSpace,parameters); + } + + // Call the global initializer functions. + for(Uptr exportIndex = 0;exportIndex < module.exports.size();++exportIndex) + { + const Export& functionExport = module.exports[exportIndex]; + if(functionExport.kind == ObjectKind::function && !strncmp(functionExport.name.c_str(),"__GLOBAL__",10)) + { + FunctionInstance* functionInstance = asFunctionNullable(getInstanceExport(moduleInstance,functionExport.name)); + if(functionInstance) { Runtime::invokeFunction(functionInstance,{}); } + } + } + } + } + + EMSCRIPTEN_API void injectCommandArgs(const std::vector& argStrings,std::vector& outInvokeArgs) + { + U8* emscriptenMemoryBase = getMemoryBaseAddress(emscriptenMemory); + + U32* argvOffsets = (U32*)(emscriptenMemoryBase + sbrk((U32)(sizeof(U32) * (argStrings.size() + 1)))); + for(Uptr argIndex = 0;argIndex < argStrings.size();++argIndex) + { + auto stringSize = strlen(argStrings[argIndex])+1; + auto stringMemory = emscriptenMemoryBase + sbrk((U32)stringSize); + memcpy(stringMemory,argStrings[argIndex],stringSize); + argvOffsets[argIndex] = (U32)(stringMemory - emscriptenMemoryBase); + } + argvOffsets[argStrings.size()] = 0; + outInvokeArgs = {(U32)argStrings.size(), (U32)((U8*)argvOffsets - emscriptenMemoryBase) }; + } +} diff --git a/libraries/wasm-jit/Source/IR/DisassemblyNames.cpp b/libraries/wasm-jit/Source/IR/DisassemblyNames.cpp new file mode 100644 index 000000000..d3c755e80 --- /dev/null +++ b/libraries/wasm-jit/Source/IR/DisassemblyNames.cpp @@ -0,0 +1,162 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Serialization.h" +#include "Logging/Logging.h" +#include "IR.h" +#include "Module.h" + +using namespace Serialization; + +namespace IR +{ + void getDisassemblyNames(const Module& module,DisassemblyNames& outNames) + { + // Fill in the output with the correct number of blank names. + for(const auto& functionImport : module.functions.imports) + { + DisassemblyNames::Function functionNames; + functionNames.locals.resize(module.types[functionImport.type.index]->parameters.size()); + outNames.functions.push_back(std::move(functionNames)); + } + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { + const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; + DisassemblyNames::Function functionNames; + functionNames.locals.insert(functionNames.locals.begin(),module.types[functionDef.type.index]->parameters.size() + functionDef.nonParameterLocalTypes.size(),""); + outNames.functions.push_back(std::move(functionNames)); + } + + outNames.types.insert(outNames.types.end(),module.types.size(),""); + outNames.tables.insert(outNames.tables.end(),module.tables.defs.size() + module.tables.imports.size(),""); + outNames.memories.insert(outNames.memories.end(),module.memories.defs.size() + module.memories.imports.size(),""); + outNames.globals.insert(outNames.globals.end(),module.globals.defs.size() + module.globals.imports.size(),""); + + // Deserialize the name section, if it is present. + Uptr userSectionIndex = 0; + if(findUserSection(module,"name",userSectionIndex)) + { + try + { + const UserSection& nameSection = module.userSections[userSectionIndex]; + MemoryInputStream stream(nameSection.data.data(),nameSection.data.size()); + + #if 0 + while(stream.capacity()) + { + U8 substreamType = 0; + serializeVarUInt7(stream,substreamType); + + U32 numSubstreamBytes = 0; + serializeVarUInt32(stream,numSubstreamBytes); + + MemoryInputStream substream(stream.advance(numSubstreamBytes),numSubstreamBytes); + switch(substreamType) + { + case 0: // function names + { + U32 numFunctionNames = 0; + serializeVarUInt32(substream,numFunctionNames); + for(Uptr functionNameIndex = 0;functionNameIndex < numFunctionNames;++functionNameIndex) + { + U32 functionIndex = 0; + serializeVarUInt32(substream,functionIndex); + + std::string functionName; + serialize(substream,functionName); + + if(functionIndex < outNames.functions.size()) { outNames.functions[functionIndex].name = std::move(functionName); } + } + break; + } + case 1: // local names + { + U32 numFunctionLocalNameMaps = 0; + serializeVarUInt32(substream,numFunctionLocalNameMaps); + for(Uptr functionNameIndex = 0;functionNameIndex < numFunctionLocalNameMaps;++functionNameIndex) + { + U32 functionIndex = 0; + serializeVarUInt32(substream,functionIndex); + + U32 numLocalNames = 0; + serializeVarUInt32(substream,numLocalNames); + + for(Uptr localNameIndex = 0;localNameIndex < numLocalNames;++numLocalNames) + { + U32 localIndex = 0; + serializeVarUInt32(substream,localIndex); + + std::string localName; + serialize(substream,localName); + + if(functionIndex < outNames.functions.size() && localIndex < outNames.functions[functionIndex].locals.size()) + { + outNames.functions[functionIndex].locals[localIndex] = std::move(localName); + } + } + } + + break; + } + }; + }; + #endif + + Uptr numFunctionNames = 0; + serializeVarUInt32(stream,numFunctionNames); + numFunctionNames = std::min(numFunctionNames,(Uptr)outNames.functions.size()); + + for(Uptr functionIndex = 0;functionIndex < numFunctionNames;++functionIndex) + { + DisassemblyNames::Function& functionNames = outNames.functions[functionIndex]; + + serialize(stream,outNames.functions[functionIndex].name); + + Uptr numLocalNames = 0; + serializeVarUInt32(stream,numLocalNames); + + for(Uptr localIndex = 0;localIndex < numLocalNames;++localIndex) + { + std::string localName; + serialize(stream,localName); + if(localIndex < functionNames.locals.size()) { functionNames.locals[localIndex] = std::move(localName); } + } + } + } + catch(FatalSerializationException exception) + { + Log::printf(Log::Category::debug,"FatalSerializationException while deserializing WASM user name section: %s\n",exception.message.c_str()); + } + } + } + + void setDisassemblyNames(Module& module,const DisassemblyNames& names) + { + // Replace an existing name section if one is present, or create a new section. + Uptr userSectionIndex = 0; + if(!findUserSection(module,"name",userSectionIndex)) + { + userSectionIndex = module.userSections.size(); + module.userSections.push_back({"name",{}}); + } + + ArrayOutputStream stream; + + Uptr numFunctionNames = names.functions.size(); + serializeVarUInt32(stream,numFunctionNames); + + for(Uptr functionIndex = 0;functionIndex < names.functions.size();++functionIndex) + { + std::string functionName = names.functions[functionIndex].name; + serialize(stream,functionName); + + Uptr numLocalNames = names.functions[functionIndex].locals.size(); + serializeVarUInt32(stream,numLocalNames); + for(Uptr localIndex = 0;localIndex < numLocalNames;++localIndex) + { + std::string localName = names.functions[functionIndex].locals[localIndex]; + serialize(stream,localName); + } + } + + module.userSections[userSectionIndex].data = stream.getBytes(); + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/IR/Operators.cpp b/libraries/wasm-jit/Source/IR/Operators.cpp new file mode 100644 index 000000000..12da1333a --- /dev/null +++ b/libraries/wasm-jit/Source/IR/Operators.cpp @@ -0,0 +1,15 @@ +#include "Operators.h" + +namespace IR +{ + const char* getOpcodeName(Opcode opcode) + { + switch(opcode) + { + #define VISIT_OPCODE(encoding,name,nameString,Imm,...) case Opcode::name: return nameString; + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + default: return "unknown"; + }; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/IR/Types.cpp b/libraries/wasm-jit/Source/IR/Types.cpp new file mode 100644 index 000000000..d1ade9c3b --- /dev/null +++ b/libraries/wasm-jit/Source/IR/Types.cpp @@ -0,0 +1,44 @@ +#include "Types.h" + +#include + +namespace IR +{ + struct FunctionTypeMap + { + struct Key + { + ResultType ret; + std::vector parameters; + + friend bool operator==(const Key& left,const Key& right) { return left.ret == right.ret && left.parameters == right.parameters; } + friend bool operator!=(const Key& left,const Key& right) { return left.ret != right.ret || left.parameters != right.parameters; } + friend bool operator<(const Key& left,const Key& right) { return left.ret < right.ret || (left.ret == right.ret && left.parameters < right.parameters); } + }; + static std::map& get() + { + static std::map map; + return map; + } + }; + + template + Value findExistingOrCreateNew(std::map& map,Key&& key,CreateValueThunk createValueThunk) + { + auto mapIt = map.find(key); + if(mapIt != map.end()) { return mapIt->second; } + else + { + Value value = createValueThunk(); + map.insert({std::move(key),value}); + return value; + } + } + + const FunctionType* FunctionType::get(ResultType ret,const std::initializer_list& parameters) + { return findExistingOrCreateNew(FunctionTypeMap::get(),FunctionTypeMap::Key {ret,parameters},[=]{return new FunctionType(ret,parameters);}); } + const FunctionType* FunctionType::get(ResultType ret,const std::vector& parameters) + { return findExistingOrCreateNew(FunctionTypeMap::get(),FunctionTypeMap::Key {ret,parameters},[=]{return new FunctionType(ret,parameters);}); } + const FunctionType* FunctionType::get(ResultType ret) + { return findExistingOrCreateNew(FunctionTypeMap::get(),FunctionTypeMap::Key {ret,{}},[=]{return new FunctionType(ret,{});}); } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/IR/Validate.cpp b/libraries/wasm-jit/Source/IR/Validate.cpp new file mode 100644 index 000000000..7fc506252 --- /dev/null +++ b/libraries/wasm-jit/Source/IR/Validate.cpp @@ -0,0 +1,688 @@ +#include "IR/Module.h" +#include "IR/Operators.h" +#include "IR/OperatorPrinter.h" +#include "IR/Validate.h" +#include "Logging/Logging.h" +#include "Inline/Timing.h" + +#include + +#define ENABLE_LOGGING 0 + +namespace IR +{ + #define VALIDATE_UNLESS(reason,comparison) \ + if(comparison) \ + { \ + throw ValidationException(reason #comparison); \ + } + + #define VALIDATE_INDEX(index,arraySize) VALIDATE_UNLESS("invalid index: ",index>=arraySize) + + void validate(ValueType valueType) + { + if(valueType == ValueType::any || valueType > ValueType::max) + { + throw ValidationException("invalid value type (" + std::to_string((Uptr)valueType) + ")"); + } + } + + void validate(ResultType returnType) + { + if(returnType > ResultType::max) + { + throw ValidationException("invalid return type (" + std::to_string((Uptr)returnType) + ")"); + } + } + + void validate(ObjectKind kind) + { + if(kind > ObjectKind::max) + { + throw ValidationException("invalid external kind (" + std::to_string((Uptr)kind) + ")"); + } + } + + void validate(SizeConstraints size,Uptr maxMax) + { + Uptr max = size.max == UINT64_MAX ? maxMax : size.max; + VALIDATE_UNLESS("disjoint size bounds: ",size.min>max); + VALIDATE_UNLESS("maximum size exceeds limit: ",max>maxMax); + } + + void validate(TableElementType type) + { + if(type != TableElementType::anyfunc) { throw ValidationException("invalid table element type (" + std::to_string((Uptr)type) + ")"); } + } + + void validate(TableType type) + { + validate(type.elementType); + validate(type.size,UINT32_MAX); + if(ENABLE_THREADING_PROTOTYPE) + { + VALIDATE_UNLESS("shared tables must have a maximum size: ",type.isShared && type.size.max == UINT64_MAX); + } + } + + void validate(MemoryType type) + { + validate(type.size,IR::maxMemoryPages); + if(ENABLE_THREADING_PROTOTYPE) + { + VALIDATE_UNLESS("shared tables must have a maximum size: ",type.isShared && type.size.max == UINT64_MAX); + } + } + + void validate(GlobalType type) + { + validate(type.valueType); + } + + void validateImportKind(ObjectType importType,ObjectKind expectedKind) + { + if(importType.kind != expectedKind) + { + throw ValidationException("incorrect kind"); + } + } + + template + void validateType(Type expectedType,Type actualType,const char* context) + { + if(expectedType != actualType) + { + throw ValidationException( + std::string("type mismatch: expected ") + asString(expectedType) + + " but got " + asString(actualType) + + " in " + context + ); + } + } + + void validateOperandType(ValueType expectedType,ValueType actualType,const char* context) + { + // Handle polymorphic values popped off the operand stack after unconditional branches. + if(expectedType != actualType && expectedType != ValueType::any && actualType != ValueType::any) + { + throw ValidationException( + std::string("type mismatch: expected ") + asString(expectedType) + + " but got " + asString(actualType) + + " in " + context + " operand" + ); + } + } + + ValueType validateGlobalIndex(const Module& module,Uptr globalIndex,bool mustBeMutable,bool mustBeImmutable,bool mustBeImport,const char* context) + { + VALIDATE_INDEX(globalIndex,module.globals.size()); + const GlobalType& globalType = module.globals.getType(globalIndex); + if(mustBeMutable && !globalType.isMutable) { throw ValidationException("attempting to mutate immutable global"); } + else if(mustBeImport && globalIndex >= module.globals.imports.size()) { throw ValidationException("global variable initializer expression may only access imported globals"); } + else if(mustBeImmutable && globalType.isMutable) { throw ValidationException("global variable initializer expression may only access immutable globals"); } + return globalType.valueType; + } + + const FunctionType* validateFunctionIndex(const Module& module,Uptr functionIndex) + { + VALIDATE_INDEX(functionIndex,module.functions.size()); + return module.types[module.functions.getType(functionIndex).index]; + } + + void validateInitializer(const Module& module,const InitializerExpression& expression,ValueType expectedType,const char* context) + { + switch(expression.type) + { + case InitializerExpression::Type::i32_const: validateType(expectedType,ValueType::i32,context); break; + case InitializerExpression::Type::i64_const: validateType(expectedType,ValueType::i64,context); break; + case InitializerExpression::Type::f32_const: validateType(expectedType,ValueType::f32,context); break; + case InitializerExpression::Type::f64_const: validateType(expectedType,ValueType::f64,context); break; + case InitializerExpression::Type::get_global: + { + const ValueType globalValueType = validateGlobalIndex(module,expression.globalIndex,false,true,true,"initializer expression global index"); + validateType(expectedType,globalValueType,context); + break; + } + default: + throw ValidationException("invalid initializer expression"); + }; + } + + struct FunctionValidationContext + { + FunctionValidationContext(const Module& inModule,const FunctionDef& inFunctionDef) + : module(inModule), functionDef(inFunctionDef), functionType(inModule.types[inFunctionDef.type.index]) + { + // Initialize the local types. + locals.reserve(functionType->parameters.size() + functionDef.nonParameterLocalTypes.size()); + locals = functionType->parameters; + locals.insert(locals.end(),functionDef.nonParameterLocalTypes.begin(),functionDef.nonParameterLocalTypes.end()); + + // Push the function context onto the control stack. + pushControlStack(ControlContext::Type::function,functionType->ret,functionType->ret); + } + + Uptr getControlStackSize() { return controlStack.size(); } + + void logOperator(const std::string& operatorDescription) + { + if(ENABLE_LOGGING) + { + std::string controlStackString; + for(Uptr stackIndex = 0;stackIndex < controlStack.size();++stackIndex) + { + if(!controlStack[stackIndex].isReachable) { controlStackString += "("; } + switch(controlStack[stackIndex].type) + { + case ControlContext::Type::function: controlStackString += "F"; break; + case ControlContext::Type::block: controlStackString += "B"; break; + case ControlContext::Type::ifThen: controlStackString += "T"; break; + case ControlContext::Type::ifElse: controlStackString += "E"; break; + case ControlContext::Type::loop: controlStackString += "L"; break; + default: Errors::unreachable(); + }; + if(!controlStack[stackIndex].isReachable) { controlStackString += ")"; } + } + + std::string stackString; + const Uptr stackBase = controlStack.size() == 0 ? 0 : controlStack.back().outerStackSize; + for(Uptr stackIndex = 0;stackIndex < stack.size();++stackIndex) + { + if(stackIndex == stackBase) { stackString += "| "; } + stackString += asString(stack[stackIndex]); + stackString += " "; + } + if(stack.size() == stackBase) { stackString += "|"; } + + Log::printf(Log::Category::debug,"%-50s %-50s %-50s\n",controlStackString.c_str(),operatorDescription.c_str(),stackString.c_str()); + } + } + + // Operation dispatch methods. + void unknown(Opcode opcode) + { + throw ValidationException("Unknown opcode: " + std::to_string((Uptr)opcode)); + } + void block(ControlStructureImm imm) + { + validate(imm.resultType); + pushControlStack(ControlContext::Type::block,imm.resultType,imm.resultType); + } + void loop(ControlStructureImm imm) + { + validate(imm.resultType); + pushControlStack(ControlContext::Type::loop,ResultType::none,imm.resultType); + } + void if_(ControlStructureImm imm) + { + validate(imm.resultType); + popAndValidateOperand("if condition",ValueType::i32); + pushControlStack(ControlContext::Type::ifThen,imm.resultType,imm.resultType); + } + void else_(NoImm imm) + { + popAndValidateResultType("if result",controlStack.back().resultType); + popControlStack(true); + } + void end(NoImm) + { + popAndValidateResultType("end result",controlStack.back().resultType); + popControlStack(); + } + + void return_(NoImm) + { + popAndValidateResultType("ret",functionType->ret); + enterUnreachable(); + } + + void br(BranchImm imm) + { + popAndValidateResultType("br argument",getBranchTargetByDepth(imm.targetDepth).branchArgumentType); + enterUnreachable(); + } + void br_table(BranchTableImm imm) + { + popAndValidateOperand("br_table index",ValueType::i32); + const ResultType defaultTargetArgumentType = getBranchTargetByDepth(imm.defaultTargetDepth).branchArgumentType; + popAndValidateResultType("br_table argument",defaultTargetArgumentType); + + assert(imm.branchTableIndex < functionDef.branchTables.size()); + const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; + for(Uptr targetIndex = 0;targetIndex < targetDepths.size();++targetIndex) + { + const ResultType targetArgumentType = getBranchTargetByDepth(targetDepths[targetIndex]).branchArgumentType; + VALIDATE_UNLESS("br_table target argument must match default target argument: ",targetArgumentType != defaultTargetArgumentType); + } + + enterUnreachable(); + } + void br_if(BranchImm imm) + { + popAndValidateOperand("br_if condition",ValueType::i32); + popAndValidateResultType("br_if argument",getBranchTargetByDepth(imm.targetDepth).branchArgumentType); + pushOperand(getBranchTargetByDepth(imm.targetDepth).branchArgumentType); + } + + void unreachable(NoImm) + { + enterUnreachable(); + } + void drop(NoImm) + { + popOperand(); + } + + void select(NoImm) + { + const ValueType condition = popOperand(); + const ValueType falseType = popOperand(); + const ValueType trueType = popOperand(); + validateOperandType(ValueType::i32,condition,"select condition"); + validateOperandType(falseType,trueType,"select operands"); + pushOperand(falseType); + } + + void get_local(GetOrSetVariableImm imm) + { + pushOperand(validateLocalIndex(imm.variableIndex)); + } + void set_local(GetOrSetVariableImm imm) + { + popAndValidateOperand("set_local",validateLocalIndex(imm.variableIndex)); + } + void tee_local(GetOrSetVariableImm imm) + { + const ValueType localType = validateLocalIndex(imm.variableIndex); + popAndValidateOperand("tee_local",localType); + pushOperand(localType); + } + + void get_global(GetOrSetVariableImm imm) + { + pushOperand(validateGlobalIndex(module,imm.variableIndex,false,false,false,"get_global")); + } + void set_global(GetOrSetVariableImm imm) + { + popAndValidateOperand("set_global",validateGlobalIndex(module,imm.variableIndex,true,false,false,"set_global")); + } + + void call(CallImm imm) + { + const FunctionType* calleeType = validateFunctionIndex(module,imm.functionIndex); + popAndValidateOperands("call arguments",calleeType->parameters.data(),(Uptr)calleeType->parameters.size()); + pushOperand(calleeType->ret); + } + void call_indirect(CallIndirectImm imm) + { + VALIDATE_INDEX(imm.type.index,module.types.size()); + VALIDATE_UNLESS("call_indirect is only valid if there is a default function table: ",module.tables.size()==0); + const FunctionType* calleeType = module.types[imm.type.index]; + popAndValidateOperand("call_indirect function index",ValueType::i32); + popAndValidateOperands("call_indirect arguments",calleeType->parameters.data(),(Uptr)calleeType->parameters.size()); + pushOperand(calleeType->ret); + } + + void validateImm(NoImm) {} + + template + void validateImm(LiteralImm imm) {} + + template + void validateImm(LoadOrStoreImm imm) + { + VALIDATE_UNLESS("load or store alignment greater than natural alignment: ",imm.alignmentLog2>naturalAlignmentLog2); + VALIDATE_UNLESS("load or store in module without default memory: ",module.memories.size()==0); + } + + void validateImm(MemoryImm) + { + VALIDATE_UNLESS("current_memory and grow_memory are only valid if there is a default memory",module.memories.size() == 0); + } + + #if ENABLE_SIMD_PROTOTYPE + template + void validateImm(LaneIndexImm imm) + { + VALIDATE_UNLESS("swizzle invalid lane index",imm.laneIndex>=numLanes); + } + + template + void validateImm(ShuffleImm imm) + { + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + VALIDATE_UNLESS("shuffle invalid lane index",imm.laneIndices[laneIndex]>=numLanes*2); + } + } + #endif + + #if ENABLE_THREADING_PROTOTYPE + void validateImm(LaunchThreadImm) + { + VALIDATE_UNLESS("launch_thread is only valid if there is a default table",module.tables.size() == 0); + } + template + void validateImm(AtomicLoadOrStoreImm imm) + { + VALIDATE_UNLESS("atomic memory operator in module without default memory: ",module.memories.size()==0); + if(requireSharedFlagForAtomicOperators) + { + VALIDATE_UNLESS("atomic memory operators require a memory with the shared flag: ",!module.memories.getType(0).isShared); + } + VALIDATE_UNLESS("atomic memory operators must have natural alignment: ",imm.alignmentLog2 != naturalAlignmentLog2); + } + #endif + + #define LOAD(resultTypeId) \ + popAndValidateOperand(operatorName,ValueType::i32); \ + pushOperand(ResultType::resultTypeId); + #define STORE(valueTypeId) \ + popAndValidateOperands(operatorName,ValueType::i32,ValueType::valueTypeId); + #define NULLARY(resultTypeId) \ + pushOperand(ResultType::resultTypeId); + #define BINARY(operandTypeId,resultTypeId) \ + popAndValidateOperands(operatorName,ValueType::operandTypeId,ValueType::operandTypeId); \ + pushOperand(ResultType::resultTypeId) + #define UNARY(operandTypeId,resultTypeId) \ + popAndValidateOperand(operatorName,ValueType::operandTypeId); \ + pushOperand(ResultType::resultTypeId) + + #if ENABLE_SIMD_PROTOTYPE + #define VECTORSELECT(vectorTypeId) \ + popAndValidateOperands(operatorName,ValueType::vectorTypeId,ValueType::vectorTypeId,ValueType::vectorTypeId); \ + pushOperand(ValueType::vectorTypeId); + #define REPLACELANE(scalarTypeId,vectorTypeId) \ + popAndValidateOperands(operatorName,ValueType::vectorTypeId,ValueType::scalarTypeId); \ + pushOperand(ValueType::vectorTypeId); + #endif + + #if ENABLE_THREADING_PROTOTYPE + #define LAUNCHTHREAD \ + popAndValidateOperands(operatorName,ValueType::i32,ValueType::i32,ValueType::i32); + #define COMPAREEXCHANGE(valueTypeId) \ + popAndValidateOperands(operatorName,ValueType::i32,ValueType::valueTypeId,ValueType::valueTypeId); \ + pushOperand(ValueType::valueTypeId); + #define WAIT(valueTypeId) \ + popAndValidateOperands(operatorName,ValueType::i32,ValueType::valueTypeId,ValueType::f64); \ + pushOperand(ValueType::i32); + #define ATOMICRMW(valueTypeId) \ + popAndValidateOperands(operatorName,ValueType::i32,ValueType::valueTypeId); \ + pushOperand(ValueType::valueTypeId); + #endif + + #define VALIDATE_OP(opcode,name,nameString,Imm,validateOperands) \ + void name(Imm imm) \ + { \ + const char* operatorName = nameString; SUPPRESS_UNUSED(operatorName); \ + validateImm(imm); \ + validateOperands; \ + } + ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(VALIDATE_OP) + #undef VALIDATE_OP + + private: + + struct ControlContext + { + enum class Type : U8 + { + function, + block, + ifWithoutElse, + ifThen, + ifElse, + loop + }; + + Type type; + Uptr outerStackSize; + + ResultType branchArgumentType; + ResultType resultType; + bool isReachable; + }; + + const Module& module; + const FunctionDef& functionDef; + const FunctionType* functionType; + + std::vector locals; + std::vector controlStack; + std::vector stack; + + void pushControlStack(ControlContext::Type type,ResultType branchArgumentType,ResultType resultType) + { + controlStack.push_back({type,stack.size(),branchArgumentType,resultType,true}); + } + + void popControlStack(bool isElse = false) + { + VALIDATE_UNLESS("stack was not empty at end of control structure: ",stack.size() > controlStack.back().outerStackSize); + + if(isElse && controlStack.back().type == ControlContext::Type::ifThen) + { + controlStack.back().type = ControlContext::Type::ifElse; + controlStack.back().isReachable = true; + } + else + { + VALIDATE_UNLESS("else only allowed in if context: ",isElse); + const ResultType resultType = controlStack.back().resultType; + if(controlStack.back().type == ControlContext::Type::ifThen && resultType != ResultType::none) + { + throw ValidationException("else-less if may not yield a result"); + } + controlStack.pop_back(); + if(controlStack.size()) { pushOperand(resultType); } + } + } + + void enterUnreachable() + { + stack.resize(controlStack.back().outerStackSize); + controlStack.back().isReachable = false; + } + + void validateBranchDepth(Uptr depth) const + { + VALIDATE_INDEX(depth,controlStack.size()); + if(depth >= controlStack.size()) { throw ValidationException("invalid branch depth"); } + } + + const ControlContext& getBranchTargetByDepth(Uptr depth) const + { + validateBranchDepth(depth); + return controlStack[controlStack.size() - depth - 1]; + } + + ValueType validateLocalIndex(Uptr localIndex) + { + VALIDATE_INDEX(localIndex,locals.size()); + return locals[localIndex]; + } + + ValueType popOperand() + { + if(stack.size() > controlStack.back().outerStackSize) + { + const ValueType result = stack.back(); + stack.pop_back(); + return result; + } + else if(controlStack.back().isReachable) + { + throw ValidationException("invalid stack access"); + } + else + { + return ValueType::any; + } + } + + void popAndValidateOperands(const char* context,const ValueType* expectedTypes,Uptr num) + { + for(Uptr operandIndexFromEnd = 0;operandIndexFromEnd < num;++operandIndexFromEnd) + { + const Uptr operandIndex = num - operandIndexFromEnd - 1; + const ValueType actualType = popOperand(); + validateOperandType(expectedTypes[operandIndex],actualType,context); + } + } + + template + void popAndValidateOperands(const char* context,const ValueType (&expectedTypes)[num]) { popAndValidateOperands(context,expectedTypes,num); } + + template + void popAndValidateOperands(const char* context,OperandTypes... operands) + { + ValueType operandTypes[] = {operands...}; + popAndValidateOperands(context,operandTypes); + } + + void popAndValidateOperand(const char* context,const ValueType expectedType) + { + const ValueType actualType = popOperand(); + validateOperandType(expectedType,actualType,context); + } + + void popAndValidateResultType(const char* context,ResultType expectedType) + { + if(expectedType != ResultType::none) { popAndValidateOperand(context,asValueType(expectedType)); } + } + + void pushOperand(ValueType type) + { + stack.push_back(type); + } + void pushOperand(ResultType type) + { + if(type != ResultType::none) { pushOperand(asValueType(type)); } + } + }; + + void validateDefinitions(const Module& module) + { + Timing::Timer timer; + + for(Uptr typeIndex = 0;typeIndex < module.types.size();++typeIndex) + { + const FunctionType* functionType = module.types[typeIndex]; + for(auto parameterType : functionType->parameters) { validate(parameterType); } + validate(functionType->ret); + } + + for(auto& functionImport : module.functions.imports) + { + VALIDATE_INDEX(functionImport.type.index,module.types.size()); + } + for(auto& tableImport : module.tables.imports) { validate(tableImport.type); } + for(auto& memoryImport : module.memories.imports) { validate(memoryImport.type); } + for(auto& globalImport : module.globals.imports) + { + validate(globalImport.type); + VALIDATE_UNLESS("mutable globals cannot be imported: ",globalImport.type.isMutable); + } + + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { + const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; + VALIDATE_INDEX(functionDef.type.index,module.types.size()); + for(auto localType : functionDef.nonParameterLocalTypes) { validate(localType); } + } + + for(auto& globalDef : module.globals.defs) + { + validate(globalDef.type); + validateInitializer(module,globalDef.initializer,globalDef.type.valueType,"global initializer expression"); + } + + for(auto& tableDef : module.tables.defs) { validate(tableDef.type); } + VALIDATE_UNLESS("too many tables: ",module.tables.size()>1); + + for(auto& memoryDef : module.memories.defs) { validate(memoryDef.type); } + VALIDATE_UNLESS("too many memories: ",module.memories.size()>1); + + std::set exportNameMap; + for(auto& exportIt : module.exports) + { + switch(exportIt.kind) + { + case ObjectKind::function: + VALIDATE_INDEX(exportIt.index,module.functions.size()); + break; + case ObjectKind::table: + VALIDATE_INDEX(exportIt.index,module.tables.size()); + break; + case ObjectKind::memory: + VALIDATE_INDEX(exportIt.index,module.memories.size()); + break; + case ObjectKind::global: + validateGlobalIndex(module,exportIt.index,false,true,false,"exported global index"); + break; + default: throw ValidationException("unknown export kind"); + }; + + VALIDATE_UNLESS("duplicate export: ",exportNameMap.count(exportIt.name)); + exportNameMap.emplace(exportIt.name); + } + + if(module.startFunctionIndex != UINTPTR_MAX) + { + VALIDATE_INDEX(module.startFunctionIndex,module.functions.size()); + const FunctionType* startFunctionType = module.types[module.functions.getType(module.startFunctionIndex).index]; + VALIDATE_UNLESS("start function must not have any parameters or results: ",startFunctionType != FunctionType::get()); + } + + for(auto& dataSegment : module.dataSegments) + { + VALIDATE_INDEX(dataSegment.memoryIndex,module.memories.size()); + validateInitializer(module,dataSegment.baseOffset,ValueType::i32,"data segment base initializer"); + } + + for(auto& tableSegment : module.tableSegments) + { + VALIDATE_INDEX(tableSegment.tableIndex,module.tables.size()); + validateInitializer(module,tableSegment.baseOffset,ValueType::i32,"table segment base initializer"); + for(auto functionIndex : tableSegment.indices) { VALIDATE_INDEX(functionIndex,module.functions.size()); } + } + + Log::printf(Log::Category::metrics,"Validated WebAssembly module definitions in %.2fms\n",timer.getMilliseconds()); + } + + struct CodeValidationStreamImpl + { + FunctionValidationContext functionContext; + OperatorPrinter operatorPrinter; + + CodeValidationStreamImpl(const Module& module,const FunctionDef& functionDef) + : functionContext(module,functionDef) + , operatorPrinter(module,functionDef) + {} + }; + + CodeValidationStream::CodeValidationStream(const Module& module,const FunctionDef& functionDef) + { + impl = new CodeValidationStreamImpl(module,functionDef); + } + + CodeValidationStream::~CodeValidationStream() + { + delete impl; + impl = nullptr; + } + + void CodeValidationStream::finish() + { + if(impl->functionContext.getControlStackSize()) { throw ValidationException("end of code reached before end of function"); } + } + + #define VISIT_OPCODE(_,name,nameString,Imm,...) \ + void CodeValidationStream::name(Imm imm) \ + { \ + if(ENABLE_LOGGING) { impl->functionContext.logOperator(impl->operatorPrinter.name(imm)); } \ + impl->functionContext.name(imm); \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Logging/Logging.cpp b/libraries/wasm-jit/Source/Logging/Logging.cpp new file mode 100644 index 000000000..04a9ff97a --- /dev/null +++ b/libraries/wasm-jit/Source/Logging/Logging.cpp @@ -0,0 +1,45 @@ +#include "Logging.h" +#include "Platform/Platform.h" + +#include +#include +#include + +namespace Log +{ + static Platform::Mutex* categoryEnabledMutex = Platform::createMutex(); + static bool categoryEnabled[(Uptr)Category::num] = + { + true, // error + #ifdef _DEBUG // debug + true, + #else + false, + #endif + WAVM_METRICS_OUTPUT != 0 // metrics + }; + void setCategoryEnabled(Category category,bool enable) + { + Platform::Lock lock(categoryEnabledMutex); + assert(category < Category::num); + categoryEnabled[(Uptr)category] = enable; + } + bool isCategoryEnabled(Category category) + { + Platform::Lock lock(categoryEnabledMutex); + assert(category < Category::num); + return categoryEnabled[(Uptr)category]; + } + void printf(Category category,const char* format,...) + { + Platform::Lock lock(categoryEnabledMutex); + if(categoryEnabled[(Uptr)category]) + { + va_list varArgs; + va_start(varArgs,format); + vfprintf(stdout,format,varArgs); + fflush(stdout); + va_end(varArgs); + } + } +} diff --git a/libraries/wasm-jit/Source/Platform/POSIX.cpp b/libraries/wasm-jit/Source/Platform/POSIX.cpp new file mode 100644 index 000000000..95506a625 --- /dev/null +++ b/libraries/wasm-jit/Source/Platform/POSIX.cpp @@ -0,0 +1,400 @@ +#ifndef _WIN32 + +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "Platform/Platform.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#define __STDC_FORMAT_MACROS +#include + +#ifdef __APPLE__ + #define MAP_ANONYMOUS MAP_ANON +#endif + +#ifdef __linux__ + #include + #include +#endif + +namespace Platform +{ + static Uptr internalGetPreferredVirtualPageSizeLog2() + { + U32 preferredVirtualPageSize = sysconf(_SC_PAGESIZE); + // Verify our assumption that the virtual page size is a power of two. + assert(!(preferredVirtualPageSize & (preferredVirtualPageSize - 1))); + return floorLogTwo(preferredVirtualPageSize); + } + Uptr getPageSizeLog2() + { + static Uptr preferredVirtualPageSizeLog2 = internalGetPreferredVirtualPageSizeLog2(); + return preferredVirtualPageSizeLog2; + } + + U32 memoryAccessAsPOSIXFlag(MemoryAccess access) + { + switch(access) + { + default: + case MemoryAccess::None: return PROT_NONE; + case MemoryAccess::ReadOnly: return PROT_READ; + case MemoryAccess::ReadWrite: return PROT_READ | PROT_WRITE; + case MemoryAccess::Execute: return PROT_EXEC; + case MemoryAccess::ReadWriteExecute: return PROT_EXEC | PROT_READ | PROT_WRITE; + } + } + + bool isPageAligned(U8* address) + { + const Uptr addressBits = reinterpret_cast(address); + return (addressBits & ((1ull << getPageSizeLog2()) - 1)) == 0; + } + + U8* allocateVirtualPages(Uptr numPages) + { + Uptr numBytes = numPages << getPageSizeLog2(); + auto result = mmap(nullptr,numBytes,PROT_NONE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0); + if(result == MAP_FAILED) + { + return nullptr; + } + return (U8*)result; + } + + bool commitVirtualPages(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access) + { + errorUnless(isPageAligned(baseVirtualAddress)); + return mprotect(baseVirtualAddress,numPages << getPageSizeLog2(),memoryAccessAsPOSIXFlag(access)) == 0; + } + + bool setVirtualPageAccess(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access) + { + errorUnless(isPageAligned(baseVirtualAddress)); + return mprotect(baseVirtualAddress,numPages << getPageSizeLog2(),memoryAccessAsPOSIXFlag(access)) == 0; + } + + void decommitVirtualPages(U8* baseVirtualAddress,Uptr numPages) + { + errorUnless(isPageAligned(baseVirtualAddress)); + auto numBytes = numPages << getPageSizeLog2(); + if(madvise(baseVirtualAddress,numBytes,MADV_DONTNEED)) { Errors::fatal("madvise failed"); } + if(mprotect(baseVirtualAddress,numBytes,PROT_NONE)) { Errors::fatal("mprotect failed"); } + } + + void freeVirtualPages(U8* baseVirtualAddress,Uptr numPages) + { + errorUnless(isPageAligned(baseVirtualAddress)); + if(munmap(baseVirtualAddress,numPages << getPageSizeLog2())) { Errors::fatal("munmap failed"); } + } + + bool describeInstructionPointer(Uptr ip,std::string& outDescription) + { + #ifdef __linux__ + // Look up static symbol information for the address. + Dl_info symbolInfo; + if(dladdr((void*)ip,&symbolInfo) && symbolInfo.dli_sname) + { + outDescription = symbolInfo.dli_sname; + return true; + } + #endif + return false; + } + + enum { signalStackNumBytes = 65536 }; + THREAD_LOCAL U8* signalStack = nullptr; + THREAD_LOCAL U8* stackMinAddr = nullptr; + THREAD_LOCAL U8* stackMaxAddr = nullptr; + + void initThread() + { + if(!signalStack) + { + // Allocate a stack to use when handling signals, so stack overflow can be handled safely. + signalStack = new U8[signalStackNumBytes]; + stack_t signalStackInfo; + signalStackInfo.ss_size = signalStackNumBytes; + signalStackInfo.ss_sp = signalStack; + signalStackInfo.ss_flags = 0; + if(sigaltstack(&signalStackInfo,nullptr) < 0) + { + Errors::fatal("sigaltstack failed"); + } + + // Get the stack address from pthreads, but use getrlimit to find the maximum size of the stack instead of the current. + struct rlimit stackLimit; + getrlimit(RLIMIT_STACK,&stackLimit); + #ifdef __linux__ + // Linux uses pthread_getattr_np/pthread_attr_getstack, and returns a pointer to the minimum address of the stack. + pthread_attr_t threadAttributes; + memset(&threadAttributes,0,sizeof(threadAttributes)); + pthread_getattr_np(pthread_self(),&threadAttributes); + Uptr stackSize; + pthread_attr_getstack(&threadAttributes,(void**)&stackMinAddr,&stackSize); + pthread_attr_destroy(&threadAttributes); + stackMaxAddr = stackMinAddr + stackSize; + stackMinAddr = stackMaxAddr - stackLimit.rlim_cur; + #else + // MacOS uses pthread_getstackaddr_np, and returns a pointer to the maximum address of the stack. + stackMaxAddr = (U8*)pthread_get_stackaddr_np(pthread_self()); + stackMinAddr = stackMaxAddr - stackLimit.rlim_cur; + #endif + + // Include an extra page below the stack's usable address range to distinguish stack overflows from general SIGSEGV. + const Uptr pageSize = sysconf(_SC_PAGESIZE); + stackMinAddr -= pageSize; + } + } + + THREAD_LOCAL jmp_buf signalReturnEnv; + THREAD_LOCAL HardwareTrapType signalType = HardwareTrapType::none; + THREAD_LOCAL CallStack* signalCallStack = nullptr; + THREAD_LOCAL Uptr* signalOperand = nullptr; + THREAD_LOCAL bool isReentrantSignal = false; + THREAD_LOCAL bool isCatchingSignals = false; + + void signalHandler(int signalNumber,siginfo_t* signalInfo,void*) + { + if(isReentrantSignal) { Errors::fatal("reentrant signal handler"); } + isReentrantSignal = true; + + // Derive the exception cause the from signal that was received. + switch(signalNumber) + { + case SIGFPE: + if(signalInfo->si_code != FPE_INTDIV && signalInfo->si_code != FPE_INTOVF) { Errors::fatal("unknown SIGFPE code"); } + signalType = HardwareTrapType::intDivideByZeroOrOverflow; + break; + case SIGSEGV: + case SIGBUS: + signalType = signalInfo->si_addr >= stackMinAddr && signalInfo->si_addr < stackMaxAddr + ? HardwareTrapType::stackOverflow + : HardwareTrapType::accessViolation; + *signalOperand = reinterpret_cast(signalInfo->si_addr); + break; + default: + Errors::fatalf("unknown signal number: %i",signalNumber); + break; + }; + + // Capture the execution context, omitting this function and the function that called it, + // so the top of the callstack is the function that triggered the signal. + *signalCallStack = captureCallStack(2); + + // If the signal occurred outside of a catchHardwareTraps call, just treat it as a fatal error. + if(!isCatchingSignals) + { + switch(signalNumber) + { + case SIGFPE: Errors::fatalf("unhandled SIGFPE\n"); + case SIGSEGV: Errors::fatalf("unhandled SIGSEGV\n"); + case SIGBUS: Errors::fatalf("unhandled SIGBUS\n"); + default: Errors::unreachable(); + }; + } + + // Jump back to the setjmp in catchHardwareTraps. + siglongjmp(signalReturnEnv,1); + } + + THREAD_LOCAL bool hasInitializedSignalHandlers = false; + + void initSignals() + { + if(!hasInitializedSignalHandlers) + { + hasInitializedSignalHandlers = true; + + // Set a signal handler for the signals we want to intercept. + struct sigaction signalAction; + signalAction.sa_sigaction = signalHandler; + sigemptyset(&signalAction.sa_mask); + signalAction.sa_flags = SA_SIGINFO | SA_ONSTACK; + sigaction(SIGSEGV,&signalAction,nullptr); + sigaction(SIGBUS,&signalAction,nullptr); + sigaction(SIGFPE,&signalAction,nullptr); + } + } + + HardwareTrapType catchHardwareTraps( + CallStack& outTrapCallStack, + Uptr& outTrapOperand, + const std::function& thunk + ) + { + initThread(); + initSignals(); + + jmp_buf oldSignalReturnEnv; + memcpy(&oldSignalReturnEnv,&signalReturnEnv,sizeof(jmp_buf)); + const bool oldIsCatchingSignals = isCatchingSignals; + + // Use setjmp to allow signals to jump back to this point. + bool isReturningFromSignalHandler = sigsetjmp(signalReturnEnv,1); + if(!isReturningFromSignalHandler) + { + signalType = HardwareTrapType::none; + signalCallStack = &outTrapCallStack; + signalOperand = &outTrapOperand; + isCatchingSignals = true; + + // Call the thunk. + thunk(); + } + + // Reset the signal state. + memcpy(&signalReturnEnv,&oldSignalReturnEnv,sizeof(jmp_buf)); + isCatchingSignals = oldIsCatchingSignals; + isReentrantSignal = false; + signalCallStack = nullptr; + signalOperand = nullptr; + + return signalType; + } + + CallStack captureCallStack(Uptr numOmittedFramesFromTop) + { + #ifdef __linux__ + // Unwind the callstack. + enum { maxCallStackSize = signalStackNumBytes / sizeof(void*) / 8 }; + void* callstackAddresses[maxCallStackSize]; + auto numCallStackEntries = backtrace(callstackAddresses,maxCallStackSize); + + // Copy the return pointers into the stack frames of the resulting ExecutionContext. + // Skip the first numOmittedFramesFromTop+1 frames, which correspond to this function + // and others that the caller would like to omit. + CallStack result; + for(Iptr index = numOmittedFramesFromTop + 1;index < numCallStackEntries;++index) + { + result.stackFrames.push_back({(Uptr)callstackAddresses[index]}); + } + return result; + #else + return CallStack(); + #endif + } + + U64 getMonotonicClock() + { + #ifdef __APPLE__ + timeval timeVal; + gettimeofday(&timeVal, nullptr); + return U64(timeVal.tv_sec) * 1000000 + U64(timeVal.tv_usec); + #else + timespec monotonicClock; + clock_gettime(CLOCK_MONOTONIC,&monotonicClock); + return U64(monotonicClock.tv_sec) * 1000000 + U64(monotonicClock.tv_nsec) / 1000; + #endif + } + + struct Mutex + { + pthread_mutex_t pthreadMutex; + }; + + Mutex* createMutex() + { + auto mutex = new Mutex(); + errorUnless(!pthread_mutex_init(&mutex->pthreadMutex,nullptr)); + return mutex; + } + + void destroyMutex(Mutex* mutex) + { + errorUnless(!pthread_mutex_destroy(&mutex->pthreadMutex)); + delete mutex; + } + + void lockMutex(Mutex* mutex) + { + errorUnless(!pthread_mutex_lock(&mutex->pthreadMutex)); + } + + void unlockMutex(Mutex* mutex) + { + errorUnless(!pthread_mutex_unlock(&mutex->pthreadMutex)); + } + + struct Event + { + pthread_cond_t conditionVariable; + pthread_mutex_t mutex; + }; + + Event* createEvent() + { + auto event = new Event(); + + pthread_condattr_t conditionVariableAttr; + errorUnless(!pthread_condattr_init(&conditionVariableAttr)); + + // Set the condition variable to use the monotonic clock for wait timeouts. + #ifndef __APPLE__ + errorUnless(!pthread_condattr_setclock(&conditionVariableAttr,CLOCK_MONOTONIC)); + #endif + + errorUnless(!pthread_cond_init(&event->conditionVariable,nullptr)); + errorUnless(!pthread_mutex_init(&event->mutex,nullptr)); + + errorUnless(!pthread_condattr_destroy(&conditionVariableAttr)); + + return event; + } + + void destroyEvent(Event* event) + { + pthread_cond_destroy(&event->conditionVariable); + errorUnless(!pthread_mutex_destroy(&event->mutex)); + delete event; + } + + bool waitForEvent(Event* event,U64 untilTime) + { + errorUnless(!pthread_mutex_lock(&event->mutex)); + + int result; + if(untilTime == UINT64_MAX) + { + result = pthread_cond_wait(&event->conditionVariable,&event->mutex); + } + else + { + timespec untilTimeSpec; + untilTimeSpec.tv_sec = untilTime / 1000000; + untilTimeSpec.tv_nsec = (untilTime % 1000000) * 1000; + + result = pthread_cond_timedwait(&event->conditionVariable,&event->mutex,&untilTimeSpec); + } + + errorUnless(!pthread_mutex_unlock(&event->mutex)); + + if(result == ETIMEDOUT) + { + return false; + } + else + { + errorUnless(!result); + return true; + } + } + + void signalEvent(Event* event) + { + errorUnless(!pthread_cond_signal(&event->conditionVariable)); + } +} + +#endif diff --git a/libraries/wasm-jit/Source/Platform/Windows.cpp b/libraries/wasm-jit/Source/Platform/Windows.cpp new file mode 100644 index 000000000..d2592b04e --- /dev/null +++ b/libraries/wasm-jit/Source/Platform/Windows.cpp @@ -0,0 +1,360 @@ +#if _WIN32 + +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "Platform.h" + +#include +#include +#include +#include + +#undef min + +namespace Platform +{ + static Uptr internalGetPreferredVirtualPageSizeLog2() + { + SYSTEM_INFO systemInfo; + GetSystemInfo(&systemInfo); + Uptr preferredVirtualPageSize = systemInfo.dwPageSize; + // Verify our assumption that the virtual page size is a power of two. + errorUnless(!(preferredVirtualPageSize & (preferredVirtualPageSize - 1))); + return floorLogTwo(preferredVirtualPageSize); + } + Uptr getPageSizeLog2() + { + static Uptr preferredVirtualPageSizeLog2 = internalGetPreferredVirtualPageSizeLog2(); + return preferredVirtualPageSizeLog2; + } + + U32 memoryAccessAsWin32Flag(MemoryAccess access) + { + switch(access) + { + default: + case MemoryAccess::None: return PAGE_NOACCESS; + case MemoryAccess::ReadOnly: return PAGE_READONLY; + case MemoryAccess::ReadWrite: return PAGE_READWRITE; + case MemoryAccess::Execute: return PAGE_EXECUTE_READ; + case MemoryAccess::ReadWriteExecute: return PAGE_EXECUTE_READWRITE; + } + } + + static bool isPageAligned(U8* address) + { + const Uptr addressBits = reinterpret_cast(address); + return (addressBits & ((1ull << getPageSizeLog2()) - 1)) == 0; + } + + U8* allocateVirtualPages(Uptr numPages) + { + Uptr numBytes = numPages << getPageSizeLog2(); + auto result = VirtualAlloc(nullptr,numBytes,MEM_RESERVE,PAGE_NOACCESS); + if(result == NULL) + { + return nullptr; + } + return (U8*)result; + } + + bool commitVirtualPages(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access) + { + errorUnless(isPageAligned(baseVirtualAddress)); + return baseVirtualAddress == VirtualAlloc(baseVirtualAddress,numPages << getPageSizeLog2(),MEM_COMMIT,memoryAccessAsWin32Flag(access)); + } + + bool setVirtualPageAccess(U8* baseVirtualAddress,Uptr numPages,MemoryAccess access) + { + errorUnless(isPageAligned(baseVirtualAddress)); + DWORD oldProtection = 0; + return VirtualProtect(baseVirtualAddress,numPages << getPageSizeLog2(),memoryAccessAsWin32Flag(access),&oldProtection) != 0; + } + + void decommitVirtualPages(U8* baseVirtualAddress,Uptr numPages) + { + errorUnless(isPageAligned(baseVirtualAddress)); + auto result = VirtualFree(baseVirtualAddress,numPages << getPageSizeLog2(),MEM_DECOMMIT); + if(baseVirtualAddress && !result) { Errors::fatal("VirtualFree(MEM_DECOMMIT) failed"); } + } + + void freeVirtualPages(U8* baseVirtualAddress,Uptr numPages) + { + errorUnless(isPageAligned(baseVirtualAddress)); + auto result = VirtualFree(baseVirtualAddress,0/*numPages << getPageSizeLog2()*/,MEM_RELEASE); + if(baseVirtualAddress && !result) { Errors::fatal("VirtualFree(MEM_RELEASE) failed"); } + } + + // The interface to the DbgHelp DLL + struct DbgHelp + { + typedef BOOL (WINAPI* SymFromAddr)(HANDLE,U64,U64*,SYMBOL_INFO*); + SymFromAddr symFromAddr; + DbgHelp() + { + HMODULE dbgHelpModule = ::LoadLibraryA("Dbghelp.dll"); + if(dbgHelpModule) + { + symFromAddr = (SymFromAddr)::GetProcAddress(dbgHelpModule,"SymFromAddr"); + + // Initialize the debug symbol lookup. + typedef BOOL (WINAPI* SymInitialize)(HANDLE,PCTSTR,BOOL); + SymInitialize symInitialize = (SymInitialize)::GetProcAddress(dbgHelpModule,"SymInitialize"); + if(symInitialize) + { + symInitialize(GetCurrentProcess(),nullptr,TRUE); + } + } + } + }; + DbgHelp* dbgHelp = nullptr; + + bool describeInstructionPointer(Uptr ip,std::string& outDescription) + { + // Initialize DbgHelp. + if(!dbgHelp) { dbgHelp = new DbgHelp(); } + + // Allocate up a SYMBOL_INFO struct to receive information about the symbol for this instruction pointer. + const Uptr maxSymbolNameChars = 256; + const Uptr symbolAllocationSize = sizeof(SYMBOL_INFO) + sizeof(TCHAR) * (maxSymbolNameChars - 1); + SYMBOL_INFO* symbolInfo = (SYMBOL_INFO*)alloca(symbolAllocationSize); + ZeroMemory(symbolInfo,symbolAllocationSize); + symbolInfo->SizeOfStruct = sizeof(SYMBOL_INFO); + symbolInfo->MaxNameLen = maxSymbolNameChars; + + // Call DbgHelp::SymFromAddr to try to find any debug symbol containing this address. + if(!dbgHelp->symFromAddr(GetCurrentProcess(),ip,nullptr,symbolInfo)) { return false; } + else + { + outDescription = symbolInfo->Name; + return true; + } + } + + void registerSEHUnwindInfo(Uptr imageLoadAddress,Uptr pdataAddress,Uptr pdataNumBytes) + { + const U32 numFunctions = (U32)(pdataNumBytes / sizeof(RUNTIME_FUNCTION)); + + // Register our manually fixed up copy of the function table. + if(!RtlAddFunctionTable(reinterpret_cast(pdataAddress),numFunctions,imageLoadAddress)) + { + Errors::fatal("RtlAddFunctionTable failed"); + } + } + void deregisterSEHUnwindInfo(Uptr pdataAddress) + { + auto functionTable = reinterpret_cast(pdataAddress); + RtlDeleteFunctionTable(functionTable); + delete [] functionTable; + } + + CallStack unwindStack(const CONTEXT& immutableContext) + { + // Make a mutable copy of the context. + CONTEXT context; + memcpy(&context,&immutableContext,sizeof(CONTEXT)); + + // Unwind the stack until there isn't a valid instruction pointer, which signals we've reached the base. + CallStack callStack; + while(context.Rip) + { + callStack.stackFrames.push_back({context.Rip}); + + // Look up the SEH unwind information for this function. + U64 imageBase; + auto runtimeFunction = RtlLookupFunctionEntry(context.Rip,&imageBase,nullptr); + if(!runtimeFunction) + { + // Leaf functions that don't touch Rsp may not have unwind information. + context.Rip = *(U64*)context.Rsp; + context.Rsp += 8; + } + else + { + // Use the SEH information to unwind to the next stack frame. + void* handlerData; + U64 establisherFrame; + RtlVirtualUnwind( + UNW_FLAG_NHANDLER, + imageBase, + context.Rip, + runtimeFunction, + &context, + &handlerData, + &establisherFrame, + nullptr + ); + } + } + + return callStack; + } + + CallStack captureCallStack(Uptr numOmittedFramesFromTop) + { + // Capture the current processor state. + CONTEXT context; + RtlCaptureContext(&context); + + // Unwind the stack. + auto result = unwindStack(context); + + // Remote the requested number of omitted frames, +1 for this function. + const Uptr numOmittedFrames = std::min(result.stackFrames.size(),numOmittedFramesFromTop + 1); + result.stackFrames.erase(result.stackFrames.begin(),result.stackFrames.begin() + numOmittedFrames); + + return result; + } + + THREAD_LOCAL bool isReentrantException = false; + LONG CALLBACK sehFilterFunction(EXCEPTION_POINTERS* exceptionPointers,HardwareTrapType& outType,Uptr& outTrapOperand,CallStack& outCallStack) + { + if(isReentrantException) { Errors::fatal("reentrant exception"); } + else + { + // Decide how to handle this exception code. + switch(exceptionPointers->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + outType = HardwareTrapType::accessViolation; + outTrapOperand = exceptionPointers->ExceptionRecord->ExceptionInformation[1]; + break; + case EXCEPTION_STACK_OVERFLOW: outType = HardwareTrapType::stackOverflow; break; + case STATUS_INTEGER_DIVIDE_BY_ZERO: outType = HardwareTrapType::intDivideByZeroOrOverflow; break; + case STATUS_INTEGER_OVERFLOW: outType = HardwareTrapType::intDivideByZeroOrOverflow; break; + default: return EXCEPTION_CONTINUE_SEARCH; + } + isReentrantException = true; + + // Unwind the stack frames from the context of the exception. + outCallStack = unwindStack(*exceptionPointers->ContextRecord); + + return EXCEPTION_EXECUTE_HANDLER; + } + } + + THREAD_LOCAL bool isThreadInitialized = false; + void initThread() + { + if(!isThreadInitialized) + { + isThreadInitialized = true; + + // Ensure that there's enough space left on the stack in the case of a stack overflow to prepare the stack trace. + ULONG stackOverflowReserveBytes = 32768; + SetThreadStackGuarantee(&stackOverflowReserveBytes); + } + } + + HardwareTrapType catchHardwareTraps( + CallStack& outTrapCallStack, + Uptr& outTrapOperand, + const std::function& thunk + ) + { + initThread(); + + HardwareTrapType result = HardwareTrapType::none; + __try + { + thunk(); + } + __except(sehFilterFunction(GetExceptionInformation(),result,outTrapOperand,outTrapCallStack)) + { + isReentrantException = false; + + // After a stack overflow, the stack will be left in a damaged state. Let the CRT repair it. + if(result == HardwareTrapType::stackOverflow) { _resetstkoflw(); } + } + return result; + } + + U64 getMonotonicClock() + { + LARGE_INTEGER performanceCounter; + LARGE_INTEGER performanceCounterFrequency; + QueryPerformanceCounter(&performanceCounter); + QueryPerformanceFrequency(&performanceCounterFrequency); + + const U64 wavmFrequency = 1000000; + + return performanceCounterFrequency.QuadPart > wavmFrequency + ? performanceCounter.QuadPart / (performanceCounterFrequency.QuadPart / wavmFrequency) + : performanceCounter.QuadPart * (wavmFrequency / performanceCounterFrequency.QuadPart); + } + + struct Mutex + { + CRITICAL_SECTION criticalSection; + }; + + Mutex* createMutex() + { + auto mutex = new Mutex(); + InitializeCriticalSection(&mutex->criticalSection); + return mutex; + } + + void destroyMutex(Mutex* mutex) + { + DeleteCriticalSection(&mutex->criticalSection); + delete mutex; + } + + void lockMutex(Mutex* mutex) + { + EnterCriticalSection(&mutex->criticalSection); + } + + void unlockMutex(Mutex* mutex) + { + LeaveCriticalSection(&mutex->criticalSection); + } + + Event* createEvent() + { + return reinterpret_cast(CreateEvent(nullptr,FALSE,FALSE,nullptr)); + } + + void destroyEvent(Event* event) + { + CloseHandle(reinterpret_cast(event)); + } + + bool waitForEvent(Event* event,U64 untilTime) + { + U64 currentTime = getMonotonicClock(); + const U64 startProcessTime = currentTime; + while(true) + { + const U64 timeoutMicroseconds = currentTime > untilTime ? 0 : (untilTime - currentTime); + const U64 timeoutMilliseconds64 = timeoutMicroseconds / 1000; + const U32 timeoutMilliseconds32 = + timeoutMilliseconds64 > UINT32_MAX + ? (UINT32_MAX - 1) + : U32(timeoutMilliseconds64); + + const U32 waitResult = WaitForSingleObject(reinterpret_cast(event),timeoutMilliseconds32); + if(waitResult != WAIT_TIMEOUT) + { + errorUnless(waitResult == WAIT_OBJECT_0); + return true; + } + else + { + currentTime = getMonotonicClock(); + if(currentTime >= untilTime) + { + return false; + } + } + }; + } + + void signalEvent(Event* event) + { + errorUnless(SetEvent(reinterpret_cast(event))); + } +} + +#endif diff --git a/libraries/wasm-jit/Source/Programs/Assemble.cpp b/libraries/wasm-jit/Source/Programs/Assemble.cpp new file mode 100644 index 000000000..60ca42cf0 --- /dev/null +++ b/libraries/wasm-jit/Source/Programs/Assemble.cpp @@ -0,0 +1,50 @@ +#include "Inline/BasicTypes.h" +#include "CLI.h" +#include "WAST/WAST.h" +#include "WASM/WASM.h" + +int commandMain(int argc,char** argv) +{ + if(argc < 3) + { + std::cerr << "Usage: Assemble in.wast out.wasm [switches]" << std::endl; + std::cerr << " -n|--omit-names\t\tOmits WAST function and local names from the output" << std::endl; + return EXIT_FAILURE; + } + const char* inputFilename = argv[1]; + const char* outputFilename = argv[2]; + bool omitNames = false; + if(argc > 3) + { + for(Iptr argumentIndex = 3;argumentIndex < argc;++argumentIndex) + { + if(!strcmp(argv[argumentIndex],"-n") || !strcmp(argv[argumentIndex],"--omit-names")) + { + omitNames = true; + } + else + { + std::cerr << "Unrecognized argument: " << argv[argumentIndex] << std::endl; + return EXIT_FAILURE; + } + } + } + + // Load the WAST module. + IR::Module module; + if(!loadTextModule(inputFilename,module)) { return EXIT_FAILURE; } + + // If the command-line switch to omit names was specified, strip the name section. + if(omitNames) + { + for(auto sectionIt = module.userSections.begin();sectionIt != module.userSections.end();++sectionIt) + { + if(sectionIt->name == "name") { module.userSections.erase(sectionIt); break; } + } + } + + // Write the binary module. + if(!saveBinaryModule(outputFilename,module)) { return EXIT_FAILURE; } + + return EXIT_SUCCESS; +} diff --git a/libraries/wasm-jit/Source/Programs/CLI.h b/libraries/wasm-jit/Source/Programs/CLI.h new file mode 100644 index 000000000..18dce3b36 --- /dev/null +++ b/libraries/wasm-jit/Source/Programs/CLI.h @@ -0,0 +1,184 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/Floats.h" +#include "Inline/Timing.h" +#include "WAST/WAST.h" +#include "WASM/WASM.h" +#include "IR/Module.h" +#include "IR/Validate.h" +#include "Runtime/Runtime.h" + +#include +#include +#include +#include +#include + +inline std::string loadFile(const char* filename) +{ + Timing::Timer timer; + std::ifstream stream(filename,std::ios::binary | std::ios::ate); + if(!stream.is_open()) + { + std::cerr << "Failed to open " << filename << ": " << std::strerror(errno) << std::endl; + return std::string(); + } + std::string data; + data.resize((unsigned int)stream.tellg()); + stream.seekg(0); + stream.read(const_cast(data.data()),data.size()); + stream.close(); + Timing::logRatePerSecond("loaded file",timer,data.size() / 1024.0 / 1024.0,"MB"); + return data; +} + +inline bool loadTextModule(const char* filename,const std::string& wastString,IR::Module& outModule) +{ + std::vector parseErrors; + WAST::parseModule(wastString.c_str(),wastString.size(),outModule,parseErrors); + if(!parseErrors.size()) { return true; } + else + { + // Print any parse errors; + std::cerr << "Error parsing WebAssembly text file:" << std::endl; + for(auto& error : parseErrors) + { + std::cerr << filename << ":" << error.locus.describe() << ": " << error.message.c_str() << std::endl; + std::cerr << error.locus.sourceLine << std::endl; + std::cerr << std::setw(error.locus.column(8)) << "^" << std::endl; + } + return false; + } +} + +inline bool loadTextModule(const char* filename,IR::Module& outModule) +{ + // Read the file into a string. + auto wastBytes = loadFile(filename); + if(!wastBytes.size()) { return false; } + const std::string wastString = std::move(wastBytes); + + return loadTextModule(filename,wastString,outModule); +} + +inline bool loadBinaryModule(const std::string& wasmBytes,IR::Module& outModule) +{ + Timing::Timer loadTimer; + + // Load the module from a binary WebAssembly file. + try + { + Serialization::MemoryInputStream stream((const U8*)wasmBytes.data(),wasmBytes.size()); + WASM::serialize(stream,outModule); + } + catch(Serialization::FatalSerializationException exception) + { + std::cerr << "Error deserializing WebAssembly binary file:" << std::endl; + std::cerr << exception.message << std::endl; + return false; + } + catch(IR::ValidationException exception) + { + std::cerr << "Error validating WebAssembly binary file:" << std::endl; + std::cerr << exception.message << std::endl; + return false; + } + catch(std::bad_alloc) + { + std::cerr << "Memory allocation failed: input is likely malformed" << std::endl; + return false; + } + + Timing::logRatePerSecond("Loaded WASM",loadTimer,wasmBytes.size()/1024.0/1024.0,"MB"); + return true; +} + +inline bool loadBinaryModule(const char* wasmFilename,IR::Module& outModule) +{ + // Read in packed .wasm file bytes. + auto wasmBytes = loadFile(wasmFilename); + if(!wasmBytes.size()) { return false; } + + return loadBinaryModule(wasmBytes,outModule); +} + +inline bool loadModule(const char* filename,IR::Module& outModule) +{ + // Read the specified file into an array. + auto fileBytes = loadFile(filename); + if(!fileBytes.size()) { return false; } + + // If the file starts with the WASM binary magic number, load it as a binary module. + if(*(U32*)fileBytes.data() == 0x6d736100) { return loadBinaryModule(fileBytes,outModule); } + else + { + // Otherwise, load it as a text module. + auto wastString = std::move(fileBytes); + return loadTextModule(filename,wastString,outModule); + } +} + +inline bool saveBinaryModule(const char* wasmFilename,const IR::Module& module) +{ + Timing::Timer saveTimer; + + std::vector wasmBytes; + try + { + // Serialize the WebAssembly module. + Serialization::ArrayOutputStream stream; + WASM::serialize(stream,module); + wasmBytes = stream.getBytes(); + } + catch(Serialization::FatalSerializationException exception) + { + std::cerr << "Error serializing WebAssembly binary file:" << std::endl; + std::cerr << exception.message << std::endl; + return false; + } + + Timing::logRatePerSecond("Saved WASM",saveTimer,wasmBytes.size()/1024.0/1024.0,"MB"); + + // Write the serialized data to the output file. + std::ofstream outputStream(wasmFilename,std::ios::binary); + outputStream.write((char*)wasmBytes.data(),wasmBytes.size()); + outputStream.close(); + + return true; +} + +inline bool endsWith(const char *str, const char *suffix) +{ + if(!str || !suffix) { return false; } + Uptr lenstr = strlen(str); + Uptr lensuffix = strlen(suffix); + if(lenstr < lensuffix) { return false; } + return (strncmp(str+lenstr-lensuffix, suffix, lensuffix) == 0); +} + +int commandMain(int argc,char** argv); + +int main(int argc,char** argv) +{ + try + { + return commandMain(argc,argv); + } + catch(IR::ValidationException exception) + { + std::cerr << "Failed to validate module: " << exception.message << std::endl; + return EXIT_FAILURE; + } + catch(Runtime::Exception exception) + { + std::cerr << "Runtime exception: " << describeExceptionCause(exception.cause) << std::endl; + for(auto calledFunction : exception.callStack) { std::cerr << " " << calledFunction << std::endl; } + return EXIT_FAILURE; + } + catch(Serialization::FatalSerializationException exception) + { + std::cerr << "Fatal serialization exception: " << exception.message << std::endl; + return EXIT_FAILURE; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Programs/Disassemble.cpp b/libraries/wasm-jit/Source/Programs/Disassemble.cpp new file mode 100644 index 000000000..16c6af5cf --- /dev/null +++ b/libraries/wasm-jit/Source/Programs/Disassemble.cpp @@ -0,0 +1,29 @@ +#include "Inline/BasicTypes.h" +#include "CLI.h" +#include "WAST/WAST.h" +#include "WASM/WASM.h" + +int commandMain(int argc,char** argv) +{ + if(argc != 3) + { + std::cerr << "Usage: Disassemble in.wasm out.wast" << std::endl; + return EXIT_FAILURE; + } + const char* inputFilename = argv[1]; + const char* outputFilename = argv[2]; + + // Load the WASM file. + IR::Module module; + if(!loadBinaryModule(inputFilename,module)) { return EXIT_FAILURE; } + + // Print the module to WAST. + const std::string wastString = WAST::print(module); + + // Write the serialized data to the output file. + std::ofstream outputStream(outputFilename); + outputStream.write(wastString.data(),wastString.size()); + outputStream.close(); + + return EXIT_SUCCESS; +} diff --git a/libraries/wasm-jit/Source/Programs/Test.cpp b/libraries/wasm-jit/Source/Programs/Test.cpp new file mode 100644 index 000000000..6796bcd3d --- /dev/null +++ b/libraries/wasm-jit/Source/Programs/Test.cpp @@ -0,0 +1,379 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Serialization.h" +#include "Platform/Platform.h" +#include "WAST/WAST.h" +#include "WAST/TestScript.h" +#include "WASM/WASM.h" +#include "Runtime/Runtime.h" +#include "Runtime/Linker.h" +#include "Runtime/Intrinsics.h" + +#include "CLI.h" + +#include +#include +#include +#include + +using namespace WAST; +using namespace IR; +using namespace Runtime; + +struct TestScriptState +{ + bool hasInstantiatedModule; + ModuleInstance* lastModuleInstance; + + std::map moduleInternalNameToInstanceMap; + std::map moduleNameToInstanceMap; + + std::vector errors; + + TestScriptState() : hasInstantiatedModule(false), lastModuleInstance(nullptr) {} +}; + +struct TestScriptResolver : Resolver +{ + TestScriptResolver(const TestScriptState& inState): state(inState) {} + bool resolve(const std::string& moduleName,const std::string& exportName,ObjectType type,ObjectInstance*& outObject) override + { + // Try to resolve an intrinsic first. + if(IntrinsicResolver::singleton.resolve(moduleName,exportName,type,outObject)) { return true; } + + // Then look for a named module. + auto mapIt = state.moduleNameToInstanceMap.find(moduleName); + if(mapIt != state.moduleNameToInstanceMap.end()) + { + outObject = getInstanceExport(mapIt->second,exportName); + return outObject != nullptr && isA(outObject,type); + } + + return false; + } +private: + const TestScriptState& state; +}; + +void testErrorf(TestScriptState& state,const TextFileLocus& locus,const char* messageFormat,...) +{ + va_list messageArguments; + va_start(messageArguments,messageFormat); + char messageBuffer[1024]; + int numPrintedChars = std::vsnprintf(messageBuffer,sizeof(messageBuffer),messageFormat,messageArguments); + if(numPrintedChars >= 1023 || numPrintedChars < 0) { Errors::unreachable(); } + messageBuffer[numPrintedChars] = 0; + va_end(messageArguments); + + state.errors.push_back({locus,messageBuffer}); +} + +void collectGarbage(TestScriptState& state) +{ + std::vector rootObjects; + rootObjects.push_back(asObject(state.lastModuleInstance)); + for(auto& mapIt : state.moduleInternalNameToInstanceMap) { rootObjects.push_back(asObject(mapIt.second)); } + for(auto& mapIt : state.moduleNameToInstanceMap) { rootObjects.push_back(asObject(mapIt.second)); } + freeUnreferencedObjects(std::move(rootObjects)); +} + +ModuleInstance* getModuleContextByInternalName(TestScriptState& state,const TextFileLocus& locus,const char* context,const std::string& internalName) +{ + // Look up the module this invoke uses. + if(!state.hasInstantiatedModule) { testErrorf(state,locus,"no module to use in %s",context); return nullptr; } + ModuleInstance* moduleInstance = state.lastModuleInstance; + if(internalName.size()) + { + auto mapIt = state.moduleInternalNameToInstanceMap.find(internalName); + if(mapIt == state.moduleInternalNameToInstanceMap.end()) + { + testErrorf(state,locus,"unknown %s module name: %s",context,internalName.c_str()); + return nullptr; + } + moduleInstance = mapIt->second; + } + return moduleInstance; +} + +bool processAction(TestScriptState& state,Action* action,Result& outResult) +{ + outResult = Result(); + + switch(action->type) + { + case ActionType::_module: + { + auto moduleAction = (ModuleAction*)action; + + // Clear the previous module. + state.lastModuleInstance = nullptr; + collectGarbage(state); + + // Link and instantiate the module. + TestScriptResolver resolver(state); + LinkResult linkResult = linkModule(*moduleAction->module,resolver); + if(linkResult.success) + { + state.hasInstantiatedModule = true; + state.lastModuleInstance = instantiateModule(*moduleAction->module,std::move(linkResult.resolvedImports)); + } + else + { + // Create an error for each import that couldn't be linked. + for(auto& missingImport : linkResult.missingImports) + { + testErrorf( + state, + moduleAction->locus, + "missing import module=\"%s\" export=\"%s\" type=\"%s\"", + missingImport.moduleName.c_str(), + missingImport.exportName.c_str(), + asString(missingImport.type).c_str() + ); + } + } + + // Register the module under its internal name. + if(moduleAction->internalModuleName.size()) + { + state.moduleInternalNameToInstanceMap[moduleAction->internalModuleName] = state.lastModuleInstance; + } + + return true; + } + case ActionType::invoke: + { + auto invokeAction = (InvokeAction*)action; + + // Look up the module this invoke uses. + ModuleInstance* moduleInstance = getModuleContextByInternalName(state,invokeAction->locus,"invoke",invokeAction->internalModuleName); + + // A null module instance at this point indicates a module that failed to link or instantiate, so don't produce further errors. + if(moduleInstance) + { + // Find the named export in the module instance. + auto functionInstance = asFunctionNullable(getInstanceExport(moduleInstance,invokeAction->exportName)); + if(!functionInstance) { testErrorf(state,invokeAction->locus,"couldn't find exported function with name: %s",invokeAction->exportName.c_str()); return false; } + + // Execute the invoke + outResult = invokeFunction(functionInstance,invokeAction->arguments); + } + return true; + } + case ActionType::get: + { + auto getAction = (GetAction*)action; + + // Look up the module this get uses. + ModuleInstance* moduleInstance = getModuleContextByInternalName(state,getAction->locus,"get",getAction->internalModuleName); + + // A null module instance at this point indicates a module that failed to link or instantiate, so just return without further errors. + if(!moduleInstance) { return false; } + + // Find the named export in the module instance. + auto globalInstance = asGlobalNullable(getInstanceExport(moduleInstance,getAction->exportName)); + if(!globalInstance) { testErrorf(state,getAction->locus,"couldn't find exported global with name: %s",getAction->exportName.c_str()); return false; } + + // Get the value of the specified global. + outResult = getGlobalValue(globalInstance); + + return true; + } + default: + Errors::unreachable(); + } +} + +// Tests whether a float is a "canonical" NaN, which just means that it's a NaN only the MSB of its significand set. +template bool isCanonicalOrArithmeticNaN(Float value,bool requireCanonical) +{ + Floats::FloatComponents components; + components.value = value; + return components.bits.exponent == Floats::FloatComponents::maxExponentBits + && (!requireCanonical || components.bits.significand == Floats::FloatComponents::canonicalSignificand); +} + +void processCommand(TestScriptState& state,const Command* command) +{ + try + { + switch(command->type) + { + case Command::_register: + { + auto registerCommand = (RegisterCommand*)command; + + // Look up a module by internal name, and bind the result to the public name. + ModuleInstance* moduleInstance = getModuleContextByInternalName(state,registerCommand->locus,"register",registerCommand->internalModuleName); + state.moduleNameToInstanceMap[registerCommand->moduleName] = moduleInstance; + break; + } + case Command::action: + { + Result result; + processAction(state,((ActionCommand*)command)->action.get(),result); + break; + } + case Command::assert_return: + { + auto assertCommand = (AssertReturnCommand*)command; + // Execute the action and do a bitwise comparison of the result to the expected result. + Result actionResult; + if(processAction(state,assertCommand->action.get(),actionResult) + && !areBitsEqual(actionResult,assertCommand->expectedReturn)) + { + testErrorf(state,assertCommand->locus,"expected %s but got %s", + asString(assertCommand->expectedReturn).c_str(), + asString(actionResult).c_str()); + } + break; + } + case Command::assert_return_canonical_nan: case Command::assert_return_arithmetic_nan: + { + auto assertCommand = (AssertReturnNaNCommand*)command; + // Execute the action and check that the result is a NaN of the expected type. + Result actionResult; + if(processAction(state,assertCommand->action.get(),actionResult)) + { + const bool requireCanonicalNaN = assertCommand->type == Command::assert_return_canonical_nan; + const bool isError = + actionResult.type == ResultType::f32 ? !isCanonicalOrArithmeticNaN(actionResult.f32,requireCanonicalNaN) + : actionResult.type == ResultType::f64 ? !isCanonicalOrArithmeticNaN(actionResult.f64,requireCanonicalNaN) + : true; + if(isError) + { + testErrorf(state,assertCommand->locus, + requireCanonicalNaN ? "expected canonical float NaN but got %s" : "expected float NaN but got %s", + asString(actionResult).c_str()); + } + } + break; + } + case Command::assert_trap: + { + auto assertCommand = (AssertTrapCommand*)command; + try + { + Result actionResult; + if(processAction(state,assertCommand->action.get(),actionResult)) + { + testErrorf(state,assertCommand->locus,"expected trap but got %s",asString(actionResult).c_str()); + } + } + catch(Runtime::Exception exception) + { + if(exception.cause != assertCommand->expectedCause) + { + testErrorf(state,assertCommand->action->locus,"expected %s trap but got %s trap", + describeExceptionCause(assertCommand->expectedCause), + describeExceptionCause(exception.cause)); + } + } + break; + } + case Command::assert_invalid: case Command::assert_malformed: + { + auto assertCommand = (AssertInvalidOrMalformedCommand*)command; + if(!assertCommand->wasInvalidOrMalformed) + { + testErrorf(state,assertCommand->locus,"module was %s", + assertCommand->type == Command::assert_invalid ? "valid" : "well formed"); + } + break; + } + case Command::assert_unlinkable: + { + auto assertCommand = (AssertUnlinkableCommand*)command; + Result result; + try + { + TestScriptResolver resolver(state); + LinkResult linkResult = linkModule(*assertCommand->moduleAction->module,resolver); + if(linkResult.success) + { + instantiateModule(*assertCommand->moduleAction->module,std::move(linkResult.resolvedImports)); + testErrorf(state,assertCommand->locus,"module was linkable"); + } + } + catch(Runtime::Exception) + { + // If the instantiation throws an exception, the assert_unlinkable succeeds. + } + break; + } + }; + } + catch(Runtime::Exception exception) + { + testErrorf(state,command->locus,"unexpected trap: %s",describeExceptionCause(exception.cause)); + } +} + +DEFINE_INTRINSIC_FUNCTION0(spectest,spectest_print,print,none) {} +DEFINE_INTRINSIC_FUNCTION1(spectest,spectest_print,print,none,i32,a) { std::cout << a << " : i32" << std::endl; } +DEFINE_INTRINSIC_FUNCTION1(spectest,spectest_print,print,none,i64,a) { std::cout << a << " : i64" << std::endl; } +DEFINE_INTRINSIC_FUNCTION1(spectest,spectest_print,print,none,f32,a) { std::cout << a << " : f32" << std::endl; } +DEFINE_INTRINSIC_FUNCTION1(spectest,spectest_print,print,none,f64,a) { std::cout << a << " : f64" << std::endl; } +DEFINE_INTRINSIC_FUNCTION2(spectest,spectest_print,print,none,f64,a,f64,b) { std::cout << a << " : f64" << std::endl << b << " : f64" << std::endl; } +DEFINE_INTRINSIC_FUNCTION2(spectest,spectest_print,print,none,i32,a,f32,b) { std::cout << a << " : i32" << std::endl << b << " : f32" << std::endl; } +DEFINE_INTRINSIC_FUNCTION2(spectest,spectest_print,print,none,i64,a,f64,b) { std::cout << a << " : i64" << std::endl << b << " : f64" << std::endl; } + +DEFINE_INTRINSIC_GLOBAL(spectest,spectest_globalI32,global,i32,false,666) +DEFINE_INTRINSIC_GLOBAL(spectest,spectest_globalI64,global,i64,false,0) +DEFINE_INTRINSIC_GLOBAL(spectest,spectest_globalF32,global,f32,false,0.0f) +DEFINE_INTRINSIC_GLOBAL(spectest,spectest_globalF64,global,f64,false,0.0) + +DEFINE_INTRINSIC_TABLE(spectest,spectest_table,table,TableType(TableElementType::anyfunc,false,SizeConstraints {10,20})) +DEFINE_INTRINSIC_MEMORY(spectest,spectest_memory,memory,MemoryType(false,SizeConstraints {1,2})) + +int commandMain(int argc,char** argv) +{ + if(argc != 2) + { + std::cerr << "Usage: Test in.wast" << std::endl; + return EXIT_FAILURE; + } + const char* filename = argv[1]; + + // Always enable debug logging for tests. + Log::setCategoryEnabled(Log::Category::debug,true); + + Runtime::init(); + + // Read the file into a string. + const std::string testScriptString = loadFile(filename); + if(!testScriptString.size()) { return EXIT_FAILURE; } + + // Process the test script. + TestScriptState testScriptState; + std::vector> testCommands; + + // Parse the test script. + WAST::parseTestCommands(testScriptString.c_str(),testScriptString.size(),testCommands,testScriptState.errors); + if(!testScriptState.errors.size()) + { + // Process the test script commands. + for(auto& command : testCommands) + { + processCommand(testScriptState,command.get()); + } + } + + if(testScriptState.errors.size()) + { + // Print any errors; + for(auto& error : testScriptState.errors) + { + std::cerr << filename << ":" << error.locus.describe() << ": " << error.message.c_str() << std::endl; + std::cerr << error.locus.sourceLine << std::endl; + std::cerr << std::setw(error.locus.column(8)) << "^" << std::endl; + } + + std::cerr << filename << ": testing failed!" << std::endl; + return EXIT_FAILURE; + } + else + { + std::cout << filename << ": all tests passed." << std::endl; + return EXIT_SUCCESS; + } +} diff --git a/libraries/wasm-jit/Source/Programs/wavm.cpp b/libraries/wasm-jit/Source/Programs/wavm.cpp new file mode 100644 index 000000000..a122f0a32 --- /dev/null +++ b/libraries/wasm-jit/Source/Programs/wavm.cpp @@ -0,0 +1,256 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Timing.h" +#include "Platform/Platform.h" +#include "WAST/WAST.h" +#include "Runtime/Runtime.h" +#include "Runtime/Linker.h" +#include "Runtime/Intrinsics.h" +#include "Emscripten/Emscripten.h" +#include "IR/Module.h" +#include "IR/Operators.h" +#include "IR/Validate.h" + +#include "CLI.h" + +#include + +using namespace IR; +using namespace Runtime; + +void showHelp() +{ + std::cerr << "Usage: wavm [switches] [programfile] [--] [arguments]" << std::endl; + std::cerr << " in.wast|in.wasm\t\tSpecify program file (.wast/.wasm)" << std::endl; + std::cerr << " -f|--function name\t\tSpecify function name to run in module rather than main" << std::endl; + std::cerr << " -c|--check\t\t\tExit after checking that the program is valid" << std::endl; + std::cerr << " -d|--debug\t\t\tWrite additional debug information to stdout" << std::endl; + std::cerr << " --\t\t\t\tStop parsing arguments" << std::endl; +} + +struct RootResolver : Resolver +{ + std::map moduleNameToResolverMap; + + bool resolve(const std::string& moduleName,const std::string& exportName,ObjectType type,ObjectInstance*& outObject) override + { + // Try to resolve an intrinsic first. + if(IntrinsicResolver::singleton.resolve(moduleName,exportName,type,outObject)) { return true; } + + // Then look for a named module. + auto namedResolverIt = moduleNameToResolverMap.find(moduleName); + if(namedResolverIt != moduleNameToResolverMap.end()) + { + return namedResolverIt->second->resolve(moduleName,exportName,type,outObject); + } + + // Finally, stub in missing function imports. + if(type.kind == ObjectKind::function) + { + // Generate a function body that just uses the unreachable op to fault if called. + Serialization::ArrayOutputStream codeStream; + OperatorEncoderStream encoder(codeStream); + encoder.unreachable(); + encoder.end(); + + // Generate a module for the stub function. + Module stubModule; + DisassemblyNames stubModuleNames; + stubModule.types.push_back(asFunctionType(type)); + stubModule.functions.defs.push_back({{0},{},std::move(codeStream.getBytes()),{}}); + stubModule.exports.push_back({"importStub",ObjectKind::function,0}); + stubModuleNames.functions.push_back({std::string(moduleName) + "." + exportName,{}}); + IR::setDisassemblyNames(stubModule,stubModuleNames); + IR::validateDefinitions(stubModule); + + // Instantiate the module and return the stub function instance. + auto stubModuleInstance = instantiateModule(stubModule,{}); + outObject = getInstanceExport(stubModuleInstance,"importStub"); + Log::printf(Log::Category::error,"Generated stub for missing function import %s.%s : %s\n",moduleName.c_str(),exportName.c_str(),asString(type).c_str()); + return true; + } + else if(type.kind == ObjectKind::memory) + { + outObject = asObject(Runtime::createMemory(asMemoryType(type))); + Log::printf(Log::Category::error,"Generated stub for missing memory import %s.%s : %s\n",moduleName.c_str(),exportName.c_str(),asString(type).c_str()); + return true; + } + else if(type.kind == ObjectKind::table) + { + outObject = asObject(Runtime::createTable(asTableType(type))); + Log::printf(Log::Category::error,"Generated stub for missing table import %s.%s : %s\n",moduleName.c_str(),exportName.c_str(),asString(type).c_str()); + return true; + } + else if(type.kind == ObjectKind::global) + { + outObject = asObject(Runtime::createGlobal(asGlobalType(type),Runtime::Value(asGlobalType(type).valueType,Runtime::UntaggedValue()))); + Log::printf(Log::Category::error,"Generated stub for missing global import %s.%s : %s\n",moduleName.c_str(),exportName.c_str(),asString(type).c_str()); + return true; + } + + return false; + } +}; + +int mainBody(const char* filename,const char* functionName,bool onlyCheck,char** args) +{ + Module module; + if(filename) + { + if(!loadModule(filename,module)) { return EXIT_FAILURE; } + } + else + { + showHelp(); + return EXIT_FAILURE; + } + + if(onlyCheck) { return EXIT_SUCCESS; } + + // Link and instantiate the module. + RootResolver rootResolver; + LinkResult linkResult = linkModule(module,rootResolver); + if(!linkResult.success) + { + std::cerr << "Failed to link module:" << std::endl; + for(auto& missingImport : linkResult.missingImports) + { + std::cerr << "Missing import: module=\"" << missingImport.moduleName + << "\" export=\"" << missingImport.exportName + << "\" type=\"" << asString(missingImport.type) << "\"" << std::endl; + } + return EXIT_FAILURE; + } + ModuleInstance* moduleInstance = instantiateModule(module,std::move(linkResult.resolvedImports)); + if(!moduleInstance) { return EXIT_FAILURE; } + Emscripten::initInstance(module,moduleInstance); + + // Look up the function export to call. + FunctionInstance* functionInstance; + if(!functionName) + { + functionInstance = asFunctionNullable(getInstanceExport(moduleInstance,"main")); + if(!functionInstance) { functionInstance = asFunctionNullable(getInstanceExport(moduleInstance,"_main")); } + if(!functionInstance) + { + std::cerr << "Module does not export main function" << std::endl; + return EXIT_FAILURE; + } + } + else + { + functionInstance = asFunctionNullable(getInstanceExport(moduleInstance,functionName)); + if(!functionInstance) + { + std::cerr << "Module does not export '" << functionName << "'" << std::endl; + return EXIT_FAILURE; + } + } + const FunctionType* functionType = getFunctionType(functionInstance); + + // Set up the arguments for the invoke. + std::vector invokeArgs; + if(!functionName) + { + if(functionType->parameters.size() == 2) + { + MemoryInstance* defaultMemory = Runtime::getDefaultMemory(moduleInstance); + if(!defaultMemory) + { + std::cerr << "Module does not declare a default memory object to put arguments in." << std::endl; + return EXIT_FAILURE; + } + + std::vector argStrings; + argStrings.push_back(filename); + while(*args) { argStrings.push_back(*args++); }; + + Emscripten::injectCommandArgs(argStrings,invokeArgs); + } + else if(functionType->parameters.size() > 0) + { + std::cerr << "WebAssembly function requires " << functionType->parameters.size() << " argument(s), but only 0 or 2 can be passed!" << std::endl; + return EXIT_FAILURE; + } + } + else + { + for(U32 i = 0; args[i]; ++i) + { + Value value; + switch(functionType->parameters[i]) + { + case ValueType::i32: value = (U32)atoi(args[i]); break; + case ValueType::i64: value = (U64)atol(args[i]); break; + case ValueType::f32: value = (F32)atof(args[i]); break; + case ValueType::f64: value = atof(args[i]); break; + default: Errors::unreachable(); + } + invokeArgs.push_back(value); + } + } + + // Invoke the function. + Timing::Timer executionTimer; + auto functionResult = invokeFunction(functionInstance,invokeArgs); + Timing::logTimer("Invoked function",executionTimer); + + if(functionName) + { + Log::printf(Log::Category::debug,"%s returned: %s\n",functionName,asString(functionResult).c_str()); + return EXIT_SUCCESS; + } + else if(functionResult.type == ResultType::i32) { return functionResult.i32; } + else { return EXIT_SUCCESS; } +} + +int commandMain(int argc,char** argv) +{ + const char* filename = nullptr; + const char* functionName = nullptr; + + bool onlyCheck = false; + auto args = argv; + while(*++args) + { + if(!strcmp(*args, "--function") || !strcmp(*args, "-f")) + { + if(!*++args) { showHelp(); return EXIT_FAILURE; } + functionName = *args; + } + else if(!strcmp(*args, "--check") || !strcmp(*args, "-c")) + { + onlyCheck = true; + } + else if(!strcmp(*args, "--debug") || !strcmp(*args, "-d")) + { + Log::setCategoryEnabled(Log::Category::debug,true); + } + else if(!strcmp(*args, "--")) + { + ++args; + break; + } + else if(!strcmp(*args, "--help") || !strcmp(*args, "-h")) + { + showHelp(); + return EXIT_SUCCESS; + } + else if(!filename) + { + filename = *args; + } + else { break; } + } + + Runtime::init(); + + int returnCode = EXIT_FAILURE; + #ifdef __AFL_LOOP + while(__AFL_LOOP(2000)) + #endif + { + returnCode = mainBody(filename,functionName,onlyCheck,args); + Runtime::freeUnreferencedObjects({}); + } + return returnCode; +} diff --git a/libraries/wasm-jit/Source/Runtime/Intrinsics.cpp b/libraries/wasm-jit/Source/Runtime/Intrinsics.cpp new file mode 100644 index 000000000..ed7fb3eb6 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Intrinsics.cpp @@ -0,0 +1,166 @@ +#include "Inline/BasicTypes.h" +#include "Intrinsics.h" +#include "Platform/Platform.h" +#include "Runtime.h" +#include "RuntimePrivate.h" + +#include + +namespace Intrinsics +{ + struct Singleton + { + std::map functionMap; + std::map variableMap; + std::map memoryMap; + std::map tableMap; + Platform::Mutex* mutex; + + Singleton(): mutex(Platform::createMutex()) {} + Singleton(const Singleton&) = delete; + + static Singleton& get() + { + static Singleton result; + return result; + } + }; + + std::string getDecoratedName(const std::string& name,const IR::ObjectType& type) + { + std::string decoratedName = name; + decoratedName += " : "; + decoratedName += IR::asString(type); + return decoratedName; + } + + Function::Function(const char* inName,const IR::FunctionType* type,void* nativeFunction) + : name(inName) + { + function = new Runtime::FunctionInstance(nullptr,type,nativeFunction); + Platform::Lock lock(Singleton::get().mutex); + Singleton::get().functionMap[getDecoratedName(inName,type)] = this; + } + + Function::~Function() + { + { + Platform::Lock Lock(Singleton::get().mutex); + Singleton::get().functionMap.erase(Singleton::get().functionMap.find(getDecoratedName(name,function->type))); + } + delete function; + } + + Global::Global(const char* inName,IR::GlobalType inType) + : name(inName) + , globalType(inType) + { + global = Runtime::createGlobal(inType,Runtime::Value((I64)0)); + value = &global->value; + { + Platform::Lock lock(Singleton::get().mutex); + Singleton::get().variableMap[getDecoratedName(inName,inType)] = this; + } + } + + Global::~Global() + { + { + Platform::Lock Lock(Singleton::get().mutex); + Singleton::get().variableMap.erase(Singleton::get().variableMap.find(getDecoratedName(name,global->type))); + } + delete global; + } + + void Global::reset() + { + global = Runtime::createGlobal(globalType,Runtime::Value((I64)0)); + value = &global->value; + } + + Table::Table(const char* inName,const IR::TableType& type) + : name(inName) + , table(Runtime::createTable(type)) + { + if(!table) { Errors::fatal("failed to create intrinsic table"); } + + Platform::Lock lock(Singleton::get().mutex); + Singleton::get().tableMap[getDecoratedName(inName,type)] = this; + } + + Table::~Table() + { + { + Platform::Lock Lock(Singleton::get().mutex); + Singleton::get().tableMap.erase(Singleton::get().tableMap.find(getDecoratedName(name,table->type))); + } + delete table; + } + + Memory::Memory(const char* inName,const IR::MemoryType& type) + : name(inName) + , memory(Runtime::createMemory(type)) + { + if(!memory) { Errors::fatal("failed to create intrinsic memory"); } + + Platform::Lock lock(Singleton::get().mutex); + Singleton::get().memoryMap[getDecoratedName(inName,type)] = this; + } + + Memory::~Memory() + { + { + Platform::Lock Lock(Singleton::get().mutex); + Singleton::get().memoryMap.erase(Singleton::get().memoryMap.find(getDecoratedName(name,memory->type))); + } + delete memory; + } + + Runtime::ObjectInstance* find(const std::string& name,const IR::ObjectType& type) + { + std::string decoratedName = getDecoratedName(name,type); + Platform::Lock Lock(Singleton::get().mutex); + Runtime::ObjectInstance* result = nullptr; + switch(type.kind) + { + case IR::ObjectKind::function: + { + auto keyValue = Singleton::get().functionMap.find(decoratedName); + result = keyValue == Singleton::get().functionMap.end() ? nullptr : asObject(keyValue->second->function); + break; + } + case IR::ObjectKind::table: + { + auto keyValue = Singleton::get().tableMap.find(decoratedName); + result = keyValue == Singleton::get().tableMap.end() ? nullptr : asObject((Runtime::TableInstance*)*keyValue->second); + break; + } + case IR::ObjectKind::memory: + { + auto keyValue = Singleton::get().memoryMap.find(decoratedName); + result = keyValue == Singleton::get().memoryMap.end() ? nullptr : asObject((Runtime::MemoryInstance*)*keyValue->second); + break; + } + case IR::ObjectKind::global: + { + auto keyValue = Singleton::get().variableMap.find(decoratedName); + result = keyValue == Singleton::get().variableMap.end() ? nullptr : asObject(keyValue->second->global); + break; + } + default: Errors::unreachable(); + }; + if(result && !isA(result,type)) { result = nullptr; } + return result; + } + + std::vector getAllIntrinsicObjects() + { + Platform::Lock lock(Singleton::get().mutex); + std::vector result; + for(auto mapIt : Singleton::get().functionMap) { result.push_back(mapIt.second->function); } + for(auto mapIt : Singleton::get().tableMap) { result.push_back((Runtime::TableInstance*)*mapIt.second); } + for(auto mapIt : Singleton::get().memoryMap) { result.push_back((Runtime::MemoryInstance*)*mapIt.second); } + for(auto mapIt : Singleton::get().variableMap) { result.push_back(mapIt.second->global); } + return result; + } +} diff --git a/libraries/wasm-jit/Source/Runtime/LLVMEmitIR.cpp b/libraries/wasm-jit/Source/Runtime/LLVMEmitIR.cpp new file mode 100644 index 000000000..9cf0c1575 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/LLVMEmitIR.cpp @@ -0,0 +1,1604 @@ +#include "LLVMJIT.h" +#include "llvm/ADT/SmallVector.h" +#include "Inline/Timing.h" +#include "IR/Operators.h" +#include "IR/OperatorPrinter.h" +#include "Logging/Logging.h" + +#define ENABLE_LOGGING 0 +#define ENABLE_FUNCTION_ENTER_EXIT_HOOKS 0 + +using namespace IR; + +namespace LLVMJIT +{ + // The LLVM IR for a module. + struct EmitModuleContext + { + const Module& module; + ModuleInstance* moduleInstance; + + llvm::Module* llvmModule; + std::vector functionDefs; + std::vector importedFunctionPointers; + std::vector globalPointers; + llvm::Constant* defaultTablePointer; + llvm::Constant* defaultTableEndOffset; + llvm::Constant* defaultMemoryBase; + llvm::Constant* defaultMemoryAddressMask; + + llvm::DIBuilder diBuilder; + llvm::DICompileUnit* diCompileUnit; + llvm::DIFile* diModuleScope; + + llvm::DIType* diValueTypes[(Uptr)ValueType::num]; + + llvm::MDNode* likelyFalseBranchWeights; + llvm::MDNode* likelyTrueBranchWeights; + + EmitModuleContext(const Module& inModule,ModuleInstance* inModuleInstance) + : module(inModule) + , moduleInstance(inModuleInstance) + , llvmModule(new llvm::Module("",context)) + , diBuilder(*llvmModule) + { + diModuleScope = diBuilder.createFile("unknown","unknown"); + diCompileUnit = diBuilder.createCompileUnit(0xffff,diModuleScope,"WAVM",true,"",0); + + diValueTypes[(Uptr)ValueType::any] = nullptr; + diValueTypes[(Uptr)ValueType::i32] = diBuilder.createBasicType("i32",32,llvm::dwarf::DW_ATE_signed); + diValueTypes[(Uptr)ValueType::i64] = diBuilder.createBasicType("i64",64,llvm::dwarf::DW_ATE_signed); + diValueTypes[(Uptr)ValueType::f32] = diBuilder.createBasicType("f32",32,llvm::dwarf::DW_ATE_float); + diValueTypes[(Uptr)ValueType::f64] = diBuilder.createBasicType("f64",64,llvm::dwarf::DW_ATE_float); + #if ENABLE_SIMD_PROTOTYPE + diValueTypes[(Uptr)ValueType::v128] = diBuilder.createBasicType("v128",128,llvm::dwarf::DW_ATE_signed); + #endif + + auto zeroAsMetadata = llvm::ConstantAsMetadata::get(emitLiteral(I32(0))); + auto i32MaxAsMetadata = llvm::ConstantAsMetadata::get(emitLiteral(I32(INT32_MAX))); + likelyFalseBranchWeights = llvm::MDTuple::getDistinct(context,{llvm::MDString::get(context,"branch_weights"),zeroAsMetadata,i32MaxAsMetadata}); + likelyTrueBranchWeights = llvm::MDTuple::getDistinct(context,{llvm::MDString::get(context,"branch_weights"),i32MaxAsMetadata,zeroAsMetadata}); + } + + llvm::Module* emit(); + }; + + // The context used by functions involved in JITing a single AST function. + struct EmitFunctionContext + { + typedef void Result; + + EmitModuleContext& moduleContext; + const Module& module; + const FunctionDef& functionDef; + const FunctionType* functionType; + FunctionInstance* functionInstance; + llvm::Function* llvmFunction; + llvm::IRBuilder<> irBuilder; + + std::vector localPointers; + + llvm::DISubprogram* diFunction; + + // Information about an in-scope control structure. + struct ControlContext + { + enum class Type : U8 + { + function, + block, + ifThen, + ifElse, + loop + }; + + Type type; + llvm::BasicBlock* endBlock; + llvm::PHINode* endPHI; + llvm::BasicBlock* elseBlock; + ResultType resultType; + Uptr outerStackSize; + Uptr outerBranchTargetStackSize; + bool isReachable; + bool isElseReachable; + }; + + struct BranchTarget + { + ResultType argumentType; + llvm::BasicBlock* block; + llvm::PHINode* phi; + }; + + std::vector controlStack; + std::vector branchTargetStack; + std::vector stack; + + EmitFunctionContext(EmitModuleContext& inEmitModuleContext,const Module& inModule,const FunctionDef& inFunctionDef,FunctionInstance* inFunctionInstance,llvm::Function* inLLVMFunction) + : moduleContext(inEmitModuleContext) + , module(inModule) + , functionDef(inFunctionDef) + , functionType(inModule.types[inFunctionDef.type.index]) + , functionInstance(inFunctionInstance) + , llvmFunction(inLLVMFunction) + , irBuilder(context) + {} + + void emit(); + + // Operand stack manipulation + llvm::Value* pop() + { + assert(stack.size() - (controlStack.size() ? controlStack.back().outerStackSize : 0) >= 1); + llvm::Value* result = stack.back(); + stack.pop_back(); + return result; + } + + void popMultiple(llvm::Value** outValues,Uptr num) + { + assert(stack.size() - (controlStack.size() ? controlStack.back().outerStackSize : 0) >= num); + std::copy(stack.end() - num,stack.end(),outValues); + stack.resize(stack.size() - num); + } + + llvm::Value* getTopValue() const + { + return stack.back(); + } + + void push(llvm::Value* value) + { + stack.push_back(value); + } + + // Creates a PHI node for the argument of branches to a basic block. + llvm::PHINode* createPHI(llvm::BasicBlock* basicBlock,ResultType type) + { + if(type == ResultType::none) { return nullptr; } + else + { + auto originalBlock = irBuilder.GetInsertBlock(); + irBuilder.SetInsertPoint(basicBlock); + auto phi = irBuilder.CreatePHI(asLLVMType(type),2); + if(originalBlock) { irBuilder.SetInsertPoint(originalBlock); } + return phi; + } + } + + // Debug logging. + void logOperator(const std::string& operatorDescription) + { + if(ENABLE_LOGGING) + { + std::string controlStackString; + for(Uptr stackIndex = 0;stackIndex < controlStack.size();++stackIndex) + { + if(!controlStack[stackIndex].isReachable) { controlStackString += "("; } + switch(controlStack[stackIndex].type) + { + case ControlContext::Type::function: controlStackString += "F"; break; + case ControlContext::Type::block: controlStackString += "B"; break; + case ControlContext::Type::ifThen: controlStackString += "T"; break; + case ControlContext::Type::ifElse: controlStackString += "E"; break; + case ControlContext::Type::loop: controlStackString += "L"; break; + default: Errors::unreachable(); + }; + if(!controlStack[stackIndex].isReachable) { controlStackString += ")"; } + } + + std::string stackString; + const Uptr stackBase = controlStack.size() == 0 ? 0 : controlStack.back().outerStackSize; + for(Uptr stackIndex = 0;stackIndex < stack.size();++stackIndex) + { + if(stackIndex == stackBase) { stackString += "| "; } + { + llvm::raw_string_ostream stackTypeStream(stackString); + stack[stackIndex]->getType()->print(stackTypeStream,true); + } + stackString += " "; + } + if(stack.size() == stackBase) { stackString += "|"; } + + Log::printf(Log::Category::debug,"%-50s %-50s %-50s\n",controlStackString.c_str(),operatorDescription.c_str(),stackString.c_str()); + } + } + + // Coerces an I32 value to an I1, and vice-versa. + llvm::Value* coerceI32ToBool(llvm::Value* i32Value) + { + return irBuilder.CreateICmpNE(i32Value,typedZeroConstants[(Uptr)ValueType::i32]); + } + llvm::Value* coerceBoolToI32(llvm::Value* boolValue) + { + return irBuilder.CreateZExt(boolValue,llvmI32Type); + } + + // Bounds checks and converts a memory operation I32 address operand to a LLVM pointer. + llvm::Value* coerceByteIndexToPointer(llvm::Value* byteIndex,U32 offset,llvm::Type* memoryType) + { + // On a 64 bit runtime, if the address is 32-bits, zext it to 64-bits. + // This is crucial for security, as LLVM will otherwise implicitly sign extend it to 64-bits in the GEP below, + // interpreting it as a signed offset and allowing access to memory outside the sandboxed memory range. + // There are no 'far addresses' in a 32 bit runtime. + llvm::Value* nativeByteIndex = sizeof(Uptr) == 4 ? byteIndex : irBuilder.CreateZExt(byteIndex,llvmI64Type); + llvm::Value* offsetByteIndex = nativeByteIndex; + if(offset) + { + auto nativeOffset = sizeof(Uptr) == 4 ? emitLiteral((U32)offset) : irBuilder.CreateZExt(emitLiteral((U32)offset),llvmI64Type); + offsetByteIndex = irBuilder.CreateAdd(nativeByteIndex,nativeOffset); + } + + // Mask the index to the address-space size. + auto maskedByteIndex = irBuilder.CreateAnd(offsetByteIndex,moduleContext.defaultMemoryAddressMask); + + // Cast the pointer to the appropriate type. + auto bytePointer = irBuilder.CreateInBoundsGEP(moduleContext.defaultMemoryBase,maskedByteIndex); + return irBuilder.CreatePointerCast(bytePointer,memoryType->getPointerTo()); + } + + // Traps a divide-by-zero + void trapDivideByZero(ValueType type,llvm::Value* divisor) + { + emitConditionalTrapIntrinsic( + irBuilder.CreateICmpEQ(divisor,typedZeroConstants[(Uptr)type]), + "wavmIntrinsics.divideByZeroTrap",FunctionType::get(),{}); + } + + llvm::Value* getLLVMIntrinsic(const std::initializer_list& argTypes,llvm::Intrinsic::ID id) + { + return llvm::Intrinsic::getDeclaration(moduleContext.llvmModule,id,llvm::ArrayRef(argTypes.begin(),argTypes.end())); + } + + // Emits a call to a WAVM intrinsic function. + llvm::Value* emitRuntimeIntrinsic(const char* intrinsicName,const FunctionType* intrinsicType,const std::initializer_list& args) + { + ObjectInstance* intrinsicObject = Intrinsics::find(intrinsicName,intrinsicType); + assert(intrinsicObject); + FunctionInstance* intrinsicFunction = asFunction(intrinsicObject); + assert(intrinsicFunction->type == intrinsicType); + auto intrinsicFunctionPointer = emitLiteralPointer(intrinsicFunction->nativeFunction,asLLVMType(intrinsicType)->getPointerTo()); + return irBuilder.CreateCall(intrinsicFunctionPointer,llvm::ArrayRef(args.begin(),args.end())); + } + + // A helper function to emit a conditional call to a non-returning intrinsic function. + void emitConditionalTrapIntrinsic(llvm::Value* booleanCondition,const char* intrinsicName,const FunctionType* intrinsicType,const std::initializer_list& args) + { + auto trueBlock = llvm::BasicBlock::Create(context,llvm::Twine(intrinsicName) + "Trap",llvmFunction); + auto endBlock = llvm::BasicBlock::Create(context,llvm::Twine(intrinsicName) + "Skip",llvmFunction); + + irBuilder.CreateCondBr(booleanCondition,trueBlock,endBlock,moduleContext.likelyFalseBranchWeights); + + irBuilder.SetInsertPoint(trueBlock); + emitRuntimeIntrinsic(intrinsicName,intrinsicType,args); + irBuilder.CreateUnreachable(); + + irBuilder.SetInsertPoint(endBlock); + } + + // + // Misc operators + // + + void nop(NoImm) {} + void unknown(Opcode opcode) { Errors::unreachable(); } + + // + // Control structure operators + // + + void pushControlStack( + ControlContext::Type type, + ResultType resultType, + llvm::BasicBlock* endBlock, + llvm::PHINode* endPHI, + llvm::BasicBlock* elseBlock = nullptr + ) + { + // The unreachable operator filtering should filter out any opcodes that call pushControlStack. + if(controlStack.size()) { errorUnless(controlStack.back().isReachable); } + + controlStack.push_back({type,endBlock,endPHI,elseBlock,resultType,stack.size(),branchTargetStack.size(),true,true}); + } + + void pushBranchTarget(ResultType branchArgumentType,llvm::BasicBlock* branchTargetBlock,llvm::PHINode* branchTargetPHI) + { + branchTargetStack.push_back({branchArgumentType,branchTargetBlock,branchTargetPHI}); + } + + void block(ControlStructureImm imm) + { + // Create an end block+phi for the block result. + auto endBlock = llvm::BasicBlock::Create(context,"blockEnd",llvmFunction); + auto endPHI = createPHI(endBlock,imm.resultType); + + // Push a control context that ends at the end block/phi. + pushControlStack(ControlContext::Type::block,imm.resultType,endBlock,endPHI); + + // Push a branch target for the end block/phi. + pushBranchTarget(imm.resultType,endBlock,endPHI); + } + void loop(ControlStructureImm imm) + { + // Create a loop block, and an end block+phi for the loop result. + auto loopBodyBlock = llvm::BasicBlock::Create(context,"loopBody",llvmFunction); + auto endBlock = llvm::BasicBlock::Create(context,"loopEnd",llvmFunction); + auto endPHI = createPHI(endBlock,imm.resultType); + + // Branch to the loop body and switch the IR builder to emit there. + irBuilder.CreateBr(loopBodyBlock); + irBuilder.SetInsertPoint(loopBodyBlock); + + // Push a control context that ends at the end block/phi. + pushControlStack(ControlContext::Type::loop,imm.resultType,endBlock,endPHI); + + // Push a branch target for the loop body start. + pushBranchTarget(ResultType::none,loopBodyBlock,nullptr); + } + void if_(ControlStructureImm imm) + { + // Create a then block and else block for the if, and an end block+phi for the if result. + auto thenBlock = llvm::BasicBlock::Create(context,"ifThen",llvmFunction); + auto elseBlock = llvm::BasicBlock::Create(context,"ifElse",llvmFunction); + auto endBlock = llvm::BasicBlock::Create(context,"ifElseEnd",llvmFunction); + auto endPHI = createPHI(endBlock,imm.resultType); + + // Pop the if condition from the operand stack. + auto condition = pop(); + irBuilder.CreateCondBr(coerceI32ToBool(condition),thenBlock,elseBlock); + + // Switch the IR builder to emit the then block. + irBuilder.SetInsertPoint(thenBlock); + + // Push an ifThen control context that ultimately ends at the end block/phi, but may + // be terminated by an else operator that changes the control context to the else block. + pushControlStack(ControlContext::Type::ifThen,imm.resultType,endBlock,endPHI,elseBlock); + + // Push a branch target for the if end. + pushBranchTarget(imm.resultType,endBlock,endPHI); + + } + void else_(NoImm imm) + { + assert(controlStack.size()); + ControlContext& currentContext = controlStack.back(); + + if(currentContext.isReachable) + { + // If the control context expects a result, take it from the operand stack and add it to the + // control context's end PHI. + if(currentContext.resultType != ResultType::none) + { + llvm::Value* result = pop(); + currentContext.endPHI->addIncoming(result,irBuilder.GetInsertBlock()); + } + + // Branch to the control context's end. + irBuilder.CreateBr(currentContext.endBlock); + } + assert(stack.size() == currentContext.outerStackSize); + + // Switch the IR emitter to the else block. + assert(currentContext.elseBlock); + assert(currentContext.type == ControlContext::Type::ifThen); + currentContext.elseBlock->moveAfter(irBuilder.GetInsertBlock()); + irBuilder.SetInsertPoint(currentContext.elseBlock); + + // Change the top of the control stack to an else clause. + currentContext.type = ControlContext::Type::ifElse; + currentContext.isReachable = currentContext.isElseReachable; + currentContext.elseBlock = nullptr; + } + void end(NoImm) + { + assert(controlStack.size()); + ControlContext& currentContext = controlStack.back(); + + if(currentContext.isReachable) + { + // If the control context yields a result, take the top of the operand stack and + // add it to the control context's end PHI. + if(currentContext.resultType != ResultType::none) + { + llvm::Value* result = pop(); + currentContext.endPHI->addIncoming(result,irBuilder.GetInsertBlock()); + } + + // Branch to the control context's end. + irBuilder.CreateBr(currentContext.endBlock); + } + assert(stack.size() == currentContext.outerStackSize); + + if(currentContext.elseBlock) + { + // If this is the end of an if without an else clause, create a dummy else clause. + currentContext.elseBlock->moveAfter(irBuilder.GetInsertBlock()); + irBuilder.SetInsertPoint(currentContext.elseBlock); + irBuilder.CreateBr(currentContext.endBlock); + } + + // Switch the IR emitter to the end block. + currentContext.endBlock->moveAfter(irBuilder.GetInsertBlock()); + irBuilder.SetInsertPoint(currentContext.endBlock); + + if(currentContext.endPHI) + { + // If the control context yields a result, take the PHI that merges all the control flow + // to the end and push it onto the operand stack. + if(currentContext.endPHI->getNumIncomingValues()) { push(currentContext.endPHI); } + else + { + // If there weren't any incoming values for the end PHI, remove it and push a dummy value. + currentContext.endPHI->eraseFromParent(); + assert(currentContext.resultType != ResultType::none); + push(typedZeroConstants[(Uptr)asValueType(currentContext.resultType)]); + } + } + + // Pop and branch targets introduced by this control context. + assert(currentContext.outerBranchTargetStackSize <= branchTargetStack.size()); + branchTargetStack.resize(currentContext.outerBranchTargetStackSize); + + // Pop this control context. + controlStack.pop_back(); + } + + // + // Control flow operators + // + + BranchTarget& getBranchTargetByDepth(Uptr depth) + { + assert(depth < branchTargetStack.size()); + return branchTargetStack[branchTargetStack.size() - depth - 1]; + } + + // This is called after unconditional control flow to indicate that operators following it are unreachable until the control stack is popped. + void enterUnreachable() + { + // Unwind the operand stack to the outer control context. + assert(controlStack.back().outerStackSize <= stack.size()); + stack.resize(controlStack.back().outerStackSize); + + // Mark the current control context as unreachable: this will cause the outer loop to stop dispatching operators to us + // until an else/end for the current control context is reached. + controlStack.back().isReachable = false; + } + + void br_if(BranchImm imm) + { + // Pop the condition from operand stack. + auto condition = pop(); + + BranchTarget& target = getBranchTargetByDepth(imm.targetDepth); + if(target.argumentType != ResultType::none) + { + // Use the stack top as the branch argument (don't pop it) and add it to the target phi's incoming values. + llvm::Value* argument = getTopValue(); + target.phi->addIncoming(argument,irBuilder.GetInsertBlock()); + } + + // Create a new basic block for the case where the branch is not taken. + auto falseBlock = llvm::BasicBlock::Create(context,"br_ifElse",llvmFunction); + + // Emit a conditional branch to either the falseBlock or the target block. + irBuilder.CreateCondBr(coerceI32ToBool(condition),target.block,falseBlock); + + // Resume emitting instructions in the falseBlock. + irBuilder.SetInsertPoint(falseBlock); + } + + void br(BranchImm imm) + { + BranchTarget& target = getBranchTargetByDepth(imm.targetDepth); + if(target.argumentType != ResultType::none) + { + // Pop the branch argument from the stack and add it to the target phi's incoming values. + llvm::Value* argument = pop(); + target.phi->addIncoming(argument,irBuilder.GetInsertBlock()); + } + + // Branch to the target block. + irBuilder.CreateBr(target.block); + + enterUnreachable(); + } + void br_table(BranchTableImm imm) + { + // Pop the table index from the operand stack. + auto index = pop(); + + // Look up the default branch target, and assume its argument type applies to all targets. + // (this is guaranteed by the validator) + BranchTarget& defaultTarget = getBranchTargetByDepth(imm.defaultTargetDepth); + const ResultType argumentType = defaultTarget.argumentType; + llvm::Value* argument = nullptr; + if(argumentType != ResultType::none) + { + // Pop the branch argument from the stack and add it to the default target phi's incoming values. + argument = pop(); + defaultTarget.phi->addIncoming(argument,irBuilder.GetInsertBlock()); + } + + // Create a LLVM switch instruction. + assert(imm.branchTableIndex < functionDef.branchTables.size()); + const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; + auto llvmSwitch = irBuilder.CreateSwitch(index,defaultTarget.block,(unsigned int)targetDepths.size()); + + for(Uptr targetIndex = 0;targetIndex < targetDepths.size();++targetIndex) + { + BranchTarget& target = getBranchTargetByDepth(targetDepths[targetIndex]); + + // Add this target to the switch instruction. + llvmSwitch->addCase(emitLiteral((U32)targetIndex),target.block); + + if(argumentType != ResultType::none) + { + // If this is the first case in the table for this branch target, add the branch argument to + // the target phi's incoming values. + target.phi->addIncoming(argument,irBuilder.GetInsertBlock()); + } + } + + enterUnreachable(); + } + void return_(NoImm) + { + if(functionType->ret != ResultType::none) + { + // Pop the return value from the stack and add it to the return phi's incoming values. + llvm::Value* result = pop(); + controlStack[0].endPHI->addIncoming(result,irBuilder.GetInsertBlock()); + } + + // Branch to the return block. + irBuilder.CreateBr(controlStack[0].endBlock); + + enterUnreachable(); + } + + void unreachable(NoImm) + { + // Call an intrinsic that causes a trap, and insert the LLVM unreachable terminator. + emitRuntimeIntrinsic("wavmIntrinsics.unreachableTrap",FunctionType::get(),{}); + irBuilder.CreateUnreachable(); + + enterUnreachable(); + } + + // + // Polymorphic operators + // + + void drop(NoImm) { stack.pop_back(); } + + void select(NoImm) + { + auto condition = pop(); + auto falseValue = pop(); + auto trueValue = pop(); + push(irBuilder.CreateSelect(coerceI32ToBool(condition),trueValue,falseValue)); + } + + // + // Call operators + // + + void call(CallImm imm) + { + // Map the callee function index to either an imported function pointer or a function in this module. + llvm::Value* callee; + const FunctionType* calleeType; + if(imm.functionIndex < moduleContext.importedFunctionPointers.size()) + { + assert(imm.functionIndex < moduleContext.moduleInstance->functions.size()); + callee = moduleContext.importedFunctionPointers[imm.functionIndex]; + calleeType = moduleContext.moduleInstance->functions[imm.functionIndex]->type; + } + else + { + const Uptr calleeIndex = imm.functionIndex - moduleContext.importedFunctionPointers.size(); + assert(calleeIndex < moduleContext.functionDefs.size()); + callee = moduleContext.functionDefs[calleeIndex]; + calleeType = module.types[module.functions.defs[calleeIndex].type.index]; + } + + // Pop the call arguments from the operand stack. + auto llvmArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * calleeType->parameters.size()); + popMultiple(llvmArgs,calleeType->parameters.size()); + + // Call the function. + auto result = irBuilder.CreateCall(callee,llvm::ArrayRef(llvmArgs,calleeType->parameters.size())); + + // Push the result on the operand stack. + if(calleeType->ret != ResultType::none) { push(result); } + } + void call_indirect(CallIndirectImm imm) + { + assert(imm.type.index < module.types.size()); + + auto calleeType = module.types[imm.type.index]; + auto functionPointerType = asLLVMType(calleeType)->getPointerTo()->getPointerTo(); + + // Compile the function index. + auto tableElementIndex = pop(); + + // Compile the call arguments. + auto llvmArgs = (llvm::Value**)alloca(sizeof(llvm::Value*) * calleeType->parameters.size()); + popMultiple(llvmArgs,calleeType->parameters.size()); + + // Zero extend the function index to the pointer size. + auto functionIndexZExt = irBuilder.CreateZExt(tableElementIndex,sizeof(Uptr) == 4 ? llvmI32Type : llvmI64Type); + + // If the function index is larger than the function table size, trap. + emitConditionalTrapIntrinsic( + irBuilder.CreateICmpUGE(functionIndexZExt,moduleContext.defaultTableEndOffset), + "wavmIntrinsics.indirectCallIndexOutOfBounds",FunctionType::get(),{}); + + // Load the type for this table entry. + auto functionTypePointerPointer = irBuilder.CreateInBoundsGEP(moduleContext.defaultTablePointer,{functionIndexZExt,emitLiteral((U32)0)}); + auto functionTypePointer = irBuilder.CreateLoad(functionTypePointerPointer); + auto llvmCalleeType = emitLiteralPointer(calleeType,llvmI8PtrType); + + // If the function type doesn't match, trap. + emitConditionalTrapIntrinsic( + irBuilder.CreateICmpNE(llvmCalleeType,functionTypePointer), + "wavmIntrinsics.indirectCallSignatureMismatch", + FunctionType::get(ResultType::none,{ValueType::i32,ValueType::i64,ValueType::i64}), + { tableElementIndex, + irBuilder.CreatePtrToInt(llvmCalleeType,llvmI64Type), + emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultTable)) } + ); + + // Call the function loaded from the table. + auto functionPointerPointer = irBuilder.CreateInBoundsGEP(moduleContext.defaultTablePointer,{functionIndexZExt,emitLiteral((U32)1)}); + auto functionPointer = irBuilder.CreateLoad(irBuilder.CreatePointerCast(functionPointerPointer,functionPointerType)); + auto result = irBuilder.CreateCall(functionPointer,llvm::ArrayRef(llvmArgs,calleeType->parameters.size())); + + // Push the result on the operand stack. + if(calleeType->ret != ResultType::none) { push(result); } + } + + // + // Local/global operators + // + + void get_local(GetOrSetVariableImm imm) + { + assert(imm.variableIndex < localPointers.size()); + push(irBuilder.CreateLoad(localPointers[imm.variableIndex])); + } + void set_local(GetOrSetVariableImm imm) + { + assert(imm.variableIndex < localPointers.size()); + auto value = irBuilder.CreateBitCast(pop(),localPointers[imm.variableIndex]->getType()->getPointerElementType()); + irBuilder.CreateStore(value,localPointers[imm.variableIndex]); + } + void tee_local(GetOrSetVariableImm imm) + { + assert(imm.variableIndex < localPointers.size()); + auto value = irBuilder.CreateBitCast(getTopValue(),localPointers[imm.variableIndex]->getType()->getPointerElementType()); + irBuilder.CreateStore(value,localPointers[imm.variableIndex]); + } + + void get_global(GetOrSetVariableImm imm) + { + assert(imm.variableIndex < moduleContext.globalPointers.size()); + push(irBuilder.CreateLoad(moduleContext.globalPointers[imm.variableIndex])); + } + void set_global(GetOrSetVariableImm imm) + { + assert(imm.variableIndex < moduleContext.globalPointers.size()); + auto value = irBuilder.CreateBitCast(pop(),moduleContext.globalPointers[imm.variableIndex]->getType()->getPointerElementType()); + irBuilder.CreateStore(value,moduleContext.globalPointers[imm.variableIndex]); + } + + // + // Memory size operators + // These just call out to wavmIntrinsics.growMemory/currentMemory, passing a pointer to the default memory for the module. + // + + void grow_memory(MemoryImm) + { + auto deltaNumPages = pop(); + auto defaultMemoryObjectAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultMemory)); + auto previousNumPages = emitRuntimeIntrinsic( + "wavmIntrinsics.growMemory", + FunctionType::get(ResultType::i32,{ValueType::i32,ValueType::i64}), + {deltaNumPages,defaultMemoryObjectAsI64}); + push(previousNumPages); + } + void current_memory(MemoryImm) + { + auto defaultMemoryObjectAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultMemory)); + auto currentNumPages = emitRuntimeIntrinsic( + "wavmIntrinsics.currentMemory", + FunctionType::get(ResultType::i32,{ValueType::i64}), + {defaultMemoryObjectAsI64}); + push(currentNumPages); + } + + // + // Constant operators + // + + #define EMIT_CONST(typeId,nativeType) void typeId##_const(LiteralImm imm) { push(emitLiteral(imm.value)); } + EMIT_CONST(i32,I32) EMIT_CONST(i64,I64) + EMIT_CONST(f32,F32) EMIT_CONST(f64,F64) + + // + // Load/store operators + // + + #define EMIT_LOAD_OP(valueTypeId,name,llvmMemoryType,naturalAlignmentLog2,conversionOp) \ + void valueTypeId##_##name(LoadOrStoreImm imm) \ + { \ + auto byteIndex = pop(); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto load = irBuilder.CreateLoad(pointer); \ + load->setAlignment(1<setVolatile(true); \ + push(conversionOp(load,asLLVMType(ValueType::valueTypeId))); \ + } + #define EMIT_STORE_OP(valueTypeId,name,llvmMemoryType,naturalAlignmentLog2,conversionOp) \ + void valueTypeId##_##name(LoadOrStoreImm imm) \ + { \ + auto value = pop(); \ + auto byteIndex = pop(); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto memoryValue = conversionOp(value,llvmMemoryType); \ + auto store = irBuilder.CreateStore(memoryValue,pointer); \ + store->setVolatile(true); \ + store->setAlignment(1<addIncoming(typedZeroConstants[(Uptr)type],preOverflowBlock); + phi->addIncoming(noOverflowValue,noOverflowBlock); + return phi; + } + + llvm::Value* emitShiftCountMask(ValueType type,llvm::Value* shiftCount) + { + // LLVM's shifts have undefined behavior where WebAssembly specifies that the shift count will wrap numbers + // grather than the bit count of the operands. This matches x86's native shift instructions, but explicitly mask + // the shift count anyway to support other platforms, and ensure the optimizer doesn't take advantage of the UB. + auto bitsMinusOne = irBuilder.CreateZExt(emitLiteral((U8)(getTypeBitWidth(type) - 1)),asLLVMType(type)); + return irBuilder.CreateAnd(shiftCount,bitsMinusOne); + } + + llvm::Value* emitRotl(ValueType type,llvm::Value* left,llvm::Value* right) + { + auto bitWidthMinusRight = irBuilder.CreateSub( + irBuilder.CreateZExt(emitLiteral(getTypeBitWidth(type)),asLLVMType(type)), + right + ); + return irBuilder.CreateOr( + irBuilder.CreateShl(left,emitShiftCountMask(type,right)), + irBuilder.CreateLShr(left,emitShiftCountMask(type,bitWidthMinusRight)) + ); + } + + llvm::Value* emitRotr(ValueType type,llvm::Value* left,llvm::Value* right) + { + auto bitWidthMinusRight = irBuilder.CreateSub( + irBuilder.CreateZExt(emitLiteral(getTypeBitWidth(type)),asLLVMType(type)), + right + ); + return irBuilder.CreateOr( + irBuilder.CreateShl(left,emitShiftCountMask(type,bitWidthMinusRight)), + irBuilder.CreateLShr(left,emitShiftCountMask(type,right)) + ); + } + + EMIT_INT_BINARY_OP(add,irBuilder.CreateAdd(left,right)) + EMIT_INT_BINARY_OP(sub,irBuilder.CreateSub(left,right)) + EMIT_INT_BINARY_OP(mul,irBuilder.CreateMul(left,right)) + EMIT_INT_BINARY_OP(and,irBuilder.CreateAnd(left,right)) + EMIT_INT_BINARY_OP(or,irBuilder.CreateOr(left,right)) + EMIT_INT_BINARY_OP(xor,irBuilder.CreateXor(left,right)) + EMIT_INT_BINARY_OP(rotr,emitRotr(type,left,right)) + EMIT_INT_BINARY_OP(rotl,emitRotl(type,left,right)) + + // Divides use trapDivideByZero to avoid the undefined behavior in LLVM's division instructions. + EMIT_INT_BINARY_OP(div_s, (trapDivideByZero(type,right), irBuilder.CreateSDiv(left,right)) ) + EMIT_INT_BINARY_OP(div_u, (trapDivideByZero(type,right), irBuilder.CreateUDiv(left,right)) ) + EMIT_INT_BINARY_OP(rem_u, (trapDivideByZero(type,right), irBuilder.CreateURem(left,right)) ) + EMIT_INT_BINARY_OP(rem_s,emitSRem(type,left,right)) + + // Explicitly mask the shift amount operand to the word size to avoid LLVM's undefined behavior. + EMIT_INT_BINARY_OP(shl,irBuilder.CreateShl(left,emitShiftCountMask(type,right))) + EMIT_INT_BINARY_OP(shr_s,irBuilder.CreateAShr(left,emitShiftCountMask(type,right))) + EMIT_INT_BINARY_OP(shr_u,irBuilder.CreateLShr(left,emitShiftCountMask(type,right))) + + EMIT_INT_BINARY_OP(eq,coerceBoolToI32(irBuilder.CreateICmpEQ(left,right))) + EMIT_INT_BINARY_OP(ne,coerceBoolToI32(irBuilder.CreateICmpNE(left,right))) + EMIT_INT_BINARY_OP(lt_s,coerceBoolToI32(irBuilder.CreateICmpSLT(left,right))) + EMIT_INT_BINARY_OP(lt_u,coerceBoolToI32(irBuilder.CreateICmpULT(left,right))) + EMIT_INT_BINARY_OP(le_s,coerceBoolToI32(irBuilder.CreateICmpSLE(left,right))) + EMIT_INT_BINARY_OP(le_u,coerceBoolToI32(irBuilder.CreateICmpULE(left,right))) + EMIT_INT_BINARY_OP(gt_s,coerceBoolToI32(irBuilder.CreateICmpSGT(left,right))) + EMIT_INT_BINARY_OP(gt_u,coerceBoolToI32(irBuilder.CreateICmpUGT(left,right))) + EMIT_INT_BINARY_OP(ge_s,coerceBoolToI32(irBuilder.CreateICmpSGE(left,right))) + EMIT_INT_BINARY_OP(ge_u,coerceBoolToI32(irBuilder.CreateICmpUGE(left,right))) + + EMIT_INT_UNARY_OP(clz,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::ctlz),llvm::ArrayRef({operand,emitLiteral(false)}))) + EMIT_INT_UNARY_OP(ctz,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::cttz),llvm::ArrayRef({operand,emitLiteral(false)}))) + EMIT_INT_UNARY_OP(popcnt,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::ctpop),llvm::ArrayRef({operand}))) + EMIT_INT_UNARY_OP(eqz,coerceBoolToI32(irBuilder.CreateICmpEQ(operand,typedZeroConstants[(Uptr)type]))) + + // + // FP operators + // + + EMIT_FP_BINARY_OP(add,irBuilder.CreateFAdd(left,right)) + EMIT_FP_BINARY_OP(sub,irBuilder.CreateFSub(left,right)) + EMIT_FP_BINARY_OP(mul,irBuilder.CreateFMul(left,right)) + EMIT_FP_BINARY_OP(div,irBuilder.CreateFDiv(left,right)) + EMIT_FP_BINARY_OP(copysign,irBuilder.CreateCall(getLLVMIntrinsic({left->getType()},llvm::Intrinsic::copysign),llvm::ArrayRef({left,right}))) + + EMIT_FP_UNARY_OP(neg,irBuilder.CreateFNeg(operand)) + EMIT_FP_UNARY_OP(abs,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::fabs),llvm::ArrayRef({operand}))) + EMIT_FP_UNARY_OP(sqrt,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::sqrt),llvm::ArrayRef({operand}))) + + EMIT_FP_BINARY_OP(eq,coerceBoolToI32(irBuilder.CreateFCmpOEQ(left,right))) + EMIT_FP_BINARY_OP(ne,coerceBoolToI32(irBuilder.CreateFCmpUNE(left,right))) + EMIT_FP_BINARY_OP(lt,coerceBoolToI32(irBuilder.CreateFCmpOLT(left,right))) + EMIT_FP_BINARY_OP(le,coerceBoolToI32(irBuilder.CreateFCmpOLE(left,right))) + EMIT_FP_BINARY_OP(gt,coerceBoolToI32(irBuilder.CreateFCmpOGT(left,right))) + EMIT_FP_BINARY_OP(ge,coerceBoolToI32(irBuilder.CreateFCmpOGE(left,right))) + + EMIT_UNARY_OP(i32,wrap_i64,irBuilder.CreateTrunc(operand,llvmI32Type)) + EMIT_UNARY_OP(i64,extend_s_i32,irBuilder.CreateSExt(operand,llvmI64Type)) + EMIT_UNARY_OP(i64,extend_u_i32,irBuilder.CreateZExt(operand,llvmI64Type)) + + EMIT_FP_UNARY_OP(convert_s_i32,irBuilder.CreateSIToFP(operand,asLLVMType(type))) + EMIT_FP_UNARY_OP(convert_s_i64,irBuilder.CreateSIToFP(operand,asLLVMType(type))) + EMIT_FP_UNARY_OP(convert_u_i32,irBuilder.CreateUIToFP(operand,asLLVMType(type))) + EMIT_FP_UNARY_OP(convert_u_i64,irBuilder.CreateUIToFP(operand,asLLVMType(type))) + + EMIT_UNARY_OP(f32,demote_f64,irBuilder.CreateFPTrunc(operand,llvmF32Type)) + EMIT_UNARY_OP(f64,promote_f32,irBuilder.CreateFPExt(operand,llvmF64Type)) + EMIT_UNARY_OP(f32,reinterpret_i32,irBuilder.CreateBitCast(operand,llvmF32Type)) + EMIT_UNARY_OP(f64,reinterpret_i64,irBuilder.CreateBitCast(operand,llvmF64Type)) + EMIT_UNARY_OP(i32,reinterpret_f32,irBuilder.CreateBitCast(operand,llvmI32Type)) + EMIT_UNARY_OP(i64,reinterpret_f64,irBuilder.CreateBitCast(operand,llvmI64Type)) + + // These operations don't match LLVM's semantics exactly, so just call out to C++ implementations. + EMIT_FP_BINARY_OP(min,emitRuntimeIntrinsic("wavmIntrinsics.floatMin",FunctionType::get(asResultType(type),{type,type}),{left,right})) + EMIT_FP_BINARY_OP(max,emitRuntimeIntrinsic("wavmIntrinsics.floatMax",FunctionType::get(asResultType(type),{type,type}),{left,right})) + EMIT_FP_UNARY_OP(ceil,emitRuntimeIntrinsic("wavmIntrinsics.floatCeil",FunctionType::get(asResultType(type),{type}),{operand})) + EMIT_FP_UNARY_OP(floor,emitRuntimeIntrinsic("wavmIntrinsics.floatFloor",FunctionType::get(asResultType(type),{type}),{operand})) + EMIT_FP_UNARY_OP(trunc,emitRuntimeIntrinsic("wavmIntrinsics.floatTrunc",FunctionType::get(asResultType(type),{type}),{operand})) + EMIT_FP_UNARY_OP(nearest,emitRuntimeIntrinsic("wavmIntrinsics.floatNearest",FunctionType::get(asResultType(type),{type}),{operand})) + EMIT_INT_UNARY_OP(trunc_s_f32,emitRuntimeIntrinsic("wavmIntrinsics.floatToSignedInt",FunctionType::get(asResultType(type),{ValueType::f32}),{operand})) + EMIT_INT_UNARY_OP(trunc_s_f64,emitRuntimeIntrinsic("wavmIntrinsics.floatToSignedInt",FunctionType::get(asResultType(type),{ValueType::f64}),{operand})) + EMIT_INT_UNARY_OP(trunc_u_f32,emitRuntimeIntrinsic("wavmIntrinsics.floatToUnsignedInt",FunctionType::get(asResultType(type),{ValueType::f32}),{operand})) + EMIT_INT_UNARY_OP(trunc_u_f64,emitRuntimeIntrinsic("wavmIntrinsics.floatToUnsignedInt",FunctionType::get(asResultType(type),{ValueType::f64}),{operand})) + + #if ENABLE_SIMD_PROTOTYPE + llvm::Value* emitAnyTrue(llvm::Value* boolVector) + { + const Uptr numLanes = boolVector->getType()->getVectorNumElements(); + llvm::Value* result = nullptr; + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + llvm::Value* scalar = irBuilder.CreateExtractElement(boolVector,laneIndex); + result = result ? irBuilder.CreateOr(result,scalar) : scalar; + } + return result; + } + llvm::Value* emitAllTrue(llvm::Value* boolVector) + { + const Uptr numLanes = boolVector->getType()->getVectorNumElements(); + llvm::Value* result = nullptr; + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + llvm::Value* scalar = irBuilder.CreateExtractElement(boolVector,laneIndex); + result = result ? irBuilder.CreateAnd(result,scalar) : scalar; + } + return result; + } + + llvm::Value* unimplemented() + { + Errors::unreachable(); + } + + #define EMIT_SIMD_SPLAT(vectorType,coerceScalar,numLanes) \ + void vectorType##_splat(NoImm) \ + { \ + auto scalar = pop(); \ + push(irBuilder.CreateVectorSplat(numLanes,coerceScalar)); \ + } + EMIT_SIMD_SPLAT(i8x16,irBuilder.CreateTrunc(scalar,llvmI8Type),16) + EMIT_SIMD_SPLAT(i16x8,irBuilder.CreateTrunc(scalar,llvmI16Type),8) + EMIT_SIMD_SPLAT(i32x4,scalar,4) + EMIT_SIMD_SPLAT(i64x2,scalar,2) + EMIT_SIMD_SPLAT(f32x4,scalar,4) + EMIT_SIMD_SPLAT(f64x2,scalar,2) + EMIT_SIMD_SPLAT(b8x16,coerceI32ToBool(scalar),16) + EMIT_SIMD_SPLAT(b16x8,coerceI32ToBool(scalar),8) + EMIT_SIMD_SPLAT(b32x4,coerceI32ToBool(scalar),4) + EMIT_SIMD_SPLAT(b64x2,coerceI32ToBool(scalar),2) + + EMIT_STORE_OP(v128,store,value->getType(),4,identityConversion) + EMIT_LOAD_OP(v128,load,llvmI64x2Type,4,identityConversion) + + #define EMIT_SIMD_BINARY_OP(name,llvmType,emitCode) \ + void name(NoImm) \ + { \ + auto right = irBuilder.CreateBitCast(pop(),llvmType); SUPPRESS_UNUSED(right); \ + auto left = irBuilder.CreateBitCast(pop(),llvmType); SUPPRESS_UNUSED(left); \ + push(emitCode); \ + } + #define EMIT_SIMD_UNARY_OP(name,llvmType,emitCode) \ + void name(NoImm) \ + { \ + auto operand = irBuilder.CreateBitCast(pop(),llvmType); SUPPRESS_UNUSED(operand); \ + push(emitCode); \ + } + #define EMIT_SIMD_INT_BINARY_OP(name,emitCode) \ + EMIT_SIMD_BINARY_OP(i8x16##_##name,llvmI8x16Type,emitCode) \ + EMIT_SIMD_BINARY_OP(i16x8##_##name,llvmI16x8Type,emitCode) \ + EMIT_SIMD_BINARY_OP(i32x4##_##name,llvmI32x4Type,emitCode) \ + EMIT_SIMD_BINARY_OP(i64x2##_##name,llvmI64x2Type,emitCode) + #define EMIT_SIMD_FP_BINARY_OP(name,emitCode) \ + EMIT_SIMD_BINARY_OP(f32x4##_##name,llvmF32x4Type,emitCode) \ + EMIT_SIMD_BINARY_OP(f64x2##_##name,llvmF64x2Type,emitCode) + #define EMIT_SIMD_INT_UNARY_OP(name,emitCode) \ + EMIT_SIMD_UNARY_OP(i8x16##_##name,llvmI8x16Type,emitCode) \ + EMIT_SIMD_UNARY_OP(i16x8##_##name,llvmI16x8Type,emitCode) \ + EMIT_SIMD_UNARY_OP(i32x4##_##name,llvmI32x4Type,emitCode) \ + EMIT_SIMD_UNARY_OP(i64x2##_##name,llvmI64x2Type,emitCode) + #define EMIT_SIMD_FP_UNARY_OP(name,emitCode) \ + EMIT_SIMD_UNARY_OP(f32x4##_##name,llvmF32x4Type,emitCode) \ + EMIT_SIMD_UNARY_OP(f64x2##_##name,llvmF64x2Type,emitCode) + EMIT_SIMD_INT_BINARY_OP(add,irBuilder.CreateAdd(left,right)) + EMIT_SIMD_INT_BINARY_OP(sub,irBuilder.CreateSub(left,right)) + + EMIT_SIMD_INT_BINARY_OP(shl,irBuilder.CreateShl(left,right)) + EMIT_SIMD_INT_BINARY_OP(shr_s,irBuilder.CreateAShr(left,right)) + EMIT_SIMD_INT_BINARY_OP(shr_u,irBuilder.CreateLShr(left,right)) + EMIT_SIMD_INT_BINARY_OP(mul,irBuilder.CreateMul(left,right)) + EMIT_SIMD_INT_BINARY_OP(div_s,irBuilder.CreateSDiv(left,right)) + EMIT_SIMD_INT_BINARY_OP(div_u,irBuilder.CreateUDiv(left,right)) + + EMIT_SIMD_INT_BINARY_OP(eq,irBuilder.CreateICmpEQ(left,right)) + EMIT_SIMD_INT_BINARY_OP(ne,irBuilder.CreateICmpNE(left,right)) + EMIT_SIMD_INT_BINARY_OP(lt_s,irBuilder.CreateICmpSLT(left,right)) + EMIT_SIMD_INT_BINARY_OP(lt_u,irBuilder.CreateICmpULT(left,right)) + EMIT_SIMD_INT_BINARY_OP(le_s,irBuilder.CreateICmpSLE(left,right)) + EMIT_SIMD_INT_BINARY_OP(le_u,irBuilder.CreateICmpULE(left,right)) + EMIT_SIMD_INT_BINARY_OP(gt_s,irBuilder.CreateICmpSGT(left,right)) + EMIT_SIMD_INT_BINARY_OP(gt_u,irBuilder.CreateICmpUGT(left,right)) + EMIT_SIMD_INT_BINARY_OP(ge_s,irBuilder.CreateICmpSGE(left,right)) + EMIT_SIMD_INT_BINARY_OP(ge_u,irBuilder.CreateICmpUGE(left,right)) + + EMIT_SIMD_INT_UNARY_OP(neg,irBuilder.CreateNeg(operand)) + + EMIT_SIMD_BINARY_OP(i8x16_add_saturate_s,llvmI8x16Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i8x16_add_saturate_u,llvmI16x8Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i8x16_sub_saturate_s,llvmI8x16Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i8x16_sub_saturate_u,llvmI16x8Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i16x8_add_saturate_s,llvmI8x16Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i16x8_add_saturate_u,llvmI16x8Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i16x8_sub_saturate_s,llvmI8x16Type,unimplemented()) + EMIT_SIMD_BINARY_OP(i16x8_sub_saturate_u,llvmI16x8Type,unimplemented()) + + EMIT_SIMD_UNARY_OP(i32x4_trunc_s_f32x4_sat,llvmF32x4Type,unimplemented()); + EMIT_SIMD_UNARY_OP(i32x4_trunc_u_f32x4_sat,llvmF32x4Type,unimplemented()); + EMIT_SIMD_UNARY_OP(i64x2_trunc_s_f64x2_sat,llvmF64x2Type,unimplemented()); + EMIT_SIMD_UNARY_OP(i64x2_trunc_u_f64x2_sat,llvmF64x2Type,unimplemented()); + + EMIT_SIMD_FP_BINARY_OP(add,irBuilder.CreateFAdd(left,right)) + EMIT_SIMD_FP_BINARY_OP(sub,irBuilder.CreateFSub(left,right)) + EMIT_SIMD_FP_BINARY_OP(mul,irBuilder.CreateFMul(left,right)) + EMIT_SIMD_FP_BINARY_OP(div,irBuilder.CreateFDiv(left,right)) + + EMIT_SIMD_FP_BINARY_OP(eq,irBuilder.CreateFCmpOEQ(left,right)) + EMIT_SIMD_FP_BINARY_OP(ne,irBuilder.CreateFCmpUNE(left,right)) + EMIT_SIMD_FP_BINARY_OP(lt,irBuilder.CreateFCmpOLT(left,right)) + EMIT_SIMD_FP_BINARY_OP(le,irBuilder.CreateFCmpOLE(left,right)) + EMIT_SIMD_FP_BINARY_OP(gt,irBuilder.CreateFCmpOGT(left,right)) + EMIT_SIMD_FP_BINARY_OP(ge,irBuilder.CreateFCmpOGE(left,right)) + EMIT_SIMD_FP_BINARY_OP(min,unimplemented()); + EMIT_SIMD_FP_BINARY_OP(max,unimplemented()); + + EMIT_SIMD_FP_UNARY_OP(neg,irBuilder.CreateFNeg(operand)) + EMIT_SIMD_FP_UNARY_OP(abs,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::fabs),llvm::ArrayRef({operand}))) + EMIT_SIMD_FP_UNARY_OP(sqrt,irBuilder.CreateCall(getLLVMIntrinsic({operand->getType()},llvm::Intrinsic::sqrt),llvm::ArrayRef({operand}))) + + EMIT_SIMD_UNARY_OP(f32x4_convert_s_i32x4,llvmI32x4Type,irBuilder.CreateSIToFP(operand,llvmF32x4Type)); + EMIT_SIMD_UNARY_OP(f32x4_convert_u_i32x4,llvmI32x4Type,irBuilder.CreateUIToFP(operand,llvmF32x4Type)); + EMIT_SIMD_UNARY_OP(f64x2_convert_s_i64x2,llvmI64x2Type,irBuilder.CreateSIToFP(operand,llvmF64x2Type)); + EMIT_SIMD_UNARY_OP(f64x2_convert_u_i64x2,llvmI64x2Type,irBuilder.CreateUIToFP(operand,llvmF64x2Type)); + + EMIT_SIMD_UNARY_OP(i8x16_any_true,llvmI8x16Type,emitAnyTrue(operand)) + EMIT_SIMD_UNARY_OP(i16x8_any_true,llvmI16x8Type,emitAnyTrue(operand)) + EMIT_SIMD_UNARY_OP(i32x4_any_true,llvmI32x4Type,emitAnyTrue(operand)) + EMIT_SIMD_UNARY_OP(i64x2_any_true,llvmI64x2Type,emitAnyTrue(operand)) + + EMIT_SIMD_UNARY_OP(i8x16_all_true,llvmI8x16Type,emitAllTrue(operand)) + EMIT_SIMD_UNARY_OP(i16x8_all_true,llvmI16x8Type,emitAllTrue(operand)) + EMIT_SIMD_UNARY_OP(i32x4_all_true,llvmI32x4Type,emitAllTrue(operand)) + EMIT_SIMD_UNARY_OP(i64x2_all_true,llvmI64x2Type,emitAllTrue(operand)) + + void v128_and(NoImm) + { + auto right = pop(); + auto left = irBuilder.CreateBitCast(pop(),right->getType()); + push(irBuilder.CreateAnd(left,right)); + } + void v128_or(NoImm) + { + auto right = pop(); + auto left = irBuilder.CreateBitCast(pop(),right->getType()); + push(irBuilder.CreateOr(left,right)); + } + void v128_xor(NoImm) + { + auto right = pop(); + auto left = irBuilder.CreateBitCast(pop(),right->getType()); + push(irBuilder.CreateXor(left,right)); + } + void v128_not(NoImm) + { + auto operand = pop(); + push(irBuilder.CreateNot(operand)); + } + + #define EMIT_SIMD_EXTRACT_LANE_OP(name,llvmType,numLanes,coerceScalar) \ + void name(LaneIndexImm imm) \ + { \ + auto operand = irBuilder.CreateBitCast(pop(),llvmType); \ + auto scalar = irBuilder.CreateExtractElement(operand,imm.laneIndex); \ + push(coerceScalar); \ + } + EMIT_SIMD_EXTRACT_LANE_OP(i8x16_extract_lane_s,llvmI8x16Type,16,irBuilder.CreateSExt(scalar,llvmI32Type)) + EMIT_SIMD_EXTRACT_LANE_OP(i8x16_extract_lane_u,llvmI8x16Type,16,irBuilder.CreateZExt(scalar,llvmI32Type)) + EMIT_SIMD_EXTRACT_LANE_OP(i16x8_extract_lane_s,llvmI16x8Type,8,irBuilder.CreateSExt(scalar,llvmI32Type)) + EMIT_SIMD_EXTRACT_LANE_OP(i16x8_extract_lane_u,llvmI16x8Type,8,irBuilder.CreateZExt(scalar,llvmI32Type)) + EMIT_SIMD_EXTRACT_LANE_OP(i32x4_extract_lane,llvmI32x4Type,4,scalar) + EMIT_SIMD_EXTRACT_LANE_OP(i64x2_extract_lane,llvmI64x2Type,2,scalar) + + EMIT_SIMD_EXTRACT_LANE_OP(f32x4_extract_lane,llvmF32x4Type,4,scalar) + EMIT_SIMD_EXTRACT_LANE_OP(f64x2_extract_lane,llvmF64x2Type,2,scalar) + + EMIT_SIMD_EXTRACT_LANE_OP(b8x16_extract_lane,llvmB8x16Type,16,coerceBoolToI32(scalar)) + EMIT_SIMD_EXTRACT_LANE_OP(b16x8_extract_lane,llvmB16x8Type,8,coerceBoolToI32(scalar)) + EMIT_SIMD_EXTRACT_LANE_OP(b32x4_extract_lane,llvmB32x4Type,4,coerceBoolToI32(scalar)) + EMIT_SIMD_EXTRACT_LANE_OP(b64x2_extract_lane,llvmB64x2Type,2,coerceBoolToI32(scalar)) + + #define EMIT_SIMD_REPLACE_LANE_OP(typePrefix,llvmType,numLanes,coerceScalar) \ + void typePrefix##_replace_lane(LaneIndexImm imm) \ + { \ + auto vector = irBuilder.CreateBitCast(pop(),llvmType); \ + auto scalar = pop(); \ + push(irBuilder.CreateInsertElement(vector,coerceScalar,imm.laneIndex)); \ + } + + EMIT_SIMD_REPLACE_LANE_OP(i8x16,llvmI8x16Type,16,irBuilder.CreateTrunc(scalar,llvmI8Type)) + EMIT_SIMD_REPLACE_LANE_OP(i16x8,llvmI16x8Type,8,irBuilder.CreateTrunc(scalar,llvmI16Type)) + EMIT_SIMD_REPLACE_LANE_OP(i32x4,llvmI32x4Type,4,scalar) + EMIT_SIMD_REPLACE_LANE_OP(i64x2,llvmI64x2Type,2,scalar) + + EMIT_SIMD_REPLACE_LANE_OP(f32x4,llvmF32x4Type,4,scalar) + EMIT_SIMD_REPLACE_LANE_OP(f64x2,llvmF64x2Type,2,scalar) + + EMIT_SIMD_REPLACE_LANE_OP(b8x16,llvmB8x16Type,16,coerceI32ToBool(scalar)) + EMIT_SIMD_REPLACE_LANE_OP(b16x8,llvmB16x8Type,8,coerceI32ToBool(scalar)) + EMIT_SIMD_REPLACE_LANE_OP(b32x4,llvmB32x4Type,4,coerceI32ToBool(scalar)) + EMIT_SIMD_REPLACE_LANE_OP(b64x2,llvmB64x2Type,2,coerceI32ToBool(scalar)) + + void v8x16_shuffle(ShuffleImm<16> imm) + { + auto right = irBuilder.CreateBitCast(pop(),llvmI8x16Type); + auto left = irBuilder.CreateBitCast(pop(),llvmI8x16Type); + unsigned int laneIndices[16]; + for(Uptr laneIndex = 0;laneIndex < 16;++laneIndex) + { + laneIndices[laneIndex] = imm.laneIndices[laneIndex]; + } + push(irBuilder.CreateShuffleVector(left,right,llvm::ArrayRef(laneIndices,16))); + } + + void v128_const(LiteralImm imm) + { + push(llvm::ConstantVector::get({emitLiteral(imm.value.u64[0]),emitLiteral(imm.value.u64[1])})); + } + + void v128_bitselect(NoImm) + { + auto mask = irBuilder.CreateBitCast(pop(),llvmI64x2Type); + auto falseValue = irBuilder.CreateBitCast(pop(),llvmI64x2Type); + auto trueValue = irBuilder.CreateBitCast(pop(),llvmI64x2Type); + push(irBuilder.CreateOr( + irBuilder.CreateAnd(trueValue,mask), + irBuilder.CreateAnd(falseValue,irBuilder.CreateNot(mask)) + )); + } + #endif + + #if ENABLE_THREADING_PROTOTYPE + void is_lock_free(NoImm) + { + auto numBytes = pop(); + push(emitRuntimeIntrinsic( + "wavmIntrinsics.isLockFree", + FunctionType::get(ResultType::i32,{ValueType::i32}), + {numBytes})); + } + void wake(AtomicLoadOrStoreImm<2>) + { + auto numWaiters = pop(); + auto address = pop(); + auto defaultMemoryObjectAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultMemory)); + push(emitRuntimeIntrinsic( + "wavmIntrinsics.wake", + FunctionType::get(ResultType::i32,{ValueType::i32,ValueType::i32,ValueType::i64}), + {address,numWaiters,defaultMemoryObjectAsI64})); + } + void i32_wait(AtomicLoadOrStoreImm<2>) + { + auto timeout = pop(); + auto expectedValue = pop(); + auto address = pop(); + auto defaultMemoryObjectAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultMemory)); + push(emitRuntimeIntrinsic( + "wavmIntrinsics.wait", + FunctionType::get(ResultType::i32,{ValueType::i32,ValueType::i32,ValueType::f64,ValueType::i64}), + {address,expectedValue,timeout,defaultMemoryObjectAsI64})); + } + void i64_wait(AtomicLoadOrStoreImm<3>) + { + auto timeout = pop(); + auto expectedValue = pop(); + auto address = pop(); + auto defaultMemoryObjectAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultMemory)); + push(emitRuntimeIntrinsic( + "wavmIntrinsics.wait", + FunctionType::get(ResultType::i32,{ValueType::i32,ValueType::i64,ValueType::f64,ValueType::i64}), + {address,expectedValue,timeout,defaultMemoryObjectAsI64})); + } + + void launch_thread(LaunchThreadImm) + { + assert(moduleContext.moduleInstance->defaultTable); + auto errorFunctionIndex = pop(); + auto argument = pop(); + auto functionIndex = pop(); + auto defaultTableAsI64 = emitLiteral(reinterpret_cast(moduleContext.moduleInstance->defaultTable)); + emitRuntimeIntrinsic( + "wavmIntrinsics.launchThread", + FunctionType::get(ResultType::none,{ValueType::i32,ValueType::i32,ValueType::i32,ValueType::i64}), + {functionIndex,argument,errorFunctionIndex,defaultTableAsI64}); + } + + void trapIfMisalignedAtomic(llvm::Value* address,U32 naturalAlignmentLog2) + { + if(naturalAlignmentLog2 > 0) + { + emitConditionalTrapIntrinsic( + irBuilder.CreateICmpNE( + typedZeroConstants[(Uptr)ValueType::i32], + irBuilder.CreateAnd(address,emitLiteral((U32(1) << naturalAlignmentLog2) - 1))), + "wavmIntrinsics.misalignedAtomicTrap", + FunctionType::get(ResultType::none,{ValueType::i32}), + {address}); + } + } + + EMIT_UNARY_OP(i32,extend_s_i8,irBuilder.CreateSExt(irBuilder.CreateTrunc(operand,llvmI8Type),llvmI32Type)) + EMIT_UNARY_OP(i32,extend_s_i16,irBuilder.CreateSExt(irBuilder.CreateTrunc(operand,llvmI16Type),llvmI32Type)) + EMIT_UNARY_OP(i64,extend_s_i8,irBuilder.CreateSExt(irBuilder.CreateTrunc(operand,llvmI8Type),llvmI64Type)) + EMIT_UNARY_OP(i64,extend_s_i16,irBuilder.CreateSExt(irBuilder.CreateTrunc(operand,llvmI16Type),llvmI64Type)) + + #define EMIT_ATOMIC_LOAD_OP(valueTypeId,name,llvmMemoryType,naturalAlignmentLog2,conversionOp) \ + void valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ + { \ + auto byteIndex = pop(); \ + trapIfMisalignedAtomic(byteIndex,naturalAlignmentLog2); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto load = irBuilder.CreateLoad(pointer); \ + load->setAlignment(1<setVolatile(true); \ + load->setAtomic(llvm::AtomicOrdering::SequentiallyConsistent); \ + push(conversionOp(load,asLLVMType(ValueType::valueTypeId))); \ + } + #define EMIT_ATOMIC_STORE_OP(valueTypeId,name,llvmMemoryType,naturalAlignmentLog2,conversionOp) \ + void valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ + { \ + auto value = pop(); \ + auto byteIndex = pop(); \ + trapIfMisalignedAtomic(byteIndex,naturalAlignmentLog2); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto memoryValue = conversionOp(value,llvmMemoryType); \ + auto store = irBuilder.CreateStore(memoryValue,pointer); \ + store->setVolatile(true); \ + store->setAlignment(1<setAtomic(llvm::AtomicOrdering::SequentiallyConsistent); \ + } + EMIT_ATOMIC_LOAD_OP(i32,atomic_load,llvmI32Type,2,identityConversion) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load,llvmI64Type,3,identityConversion) + EMIT_ATOMIC_LOAD_OP(f32,atomic_load,llvmF32Type,2,identityConversion) + EMIT_ATOMIC_LOAD_OP(f64,atomic_load,llvmF64Type,3,identityConversion) + + EMIT_ATOMIC_LOAD_OP(i32,atomic_load8_s,llvmI8Type,0,irBuilder.CreateSExt) + EMIT_ATOMIC_LOAD_OP(i32,atomic_load8_u,llvmI8Type,0,irBuilder.CreateZExt) + EMIT_ATOMIC_LOAD_OP(i32,atomic_load16_s,llvmI16Type,1,irBuilder.CreateSExt) + EMIT_ATOMIC_LOAD_OP(i32,atomic_load16_u,llvmI16Type,1,irBuilder.CreateZExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load8_s,llvmI8Type,0,irBuilder.CreateSExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load8_u,llvmI8Type,0,irBuilder.CreateZExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load16_s,llvmI16Type,1,irBuilder.CreateSExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load16_u,llvmI16Type,1,irBuilder.CreateZExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load32_s,llvmI32Type,2,irBuilder.CreateSExt) + EMIT_ATOMIC_LOAD_OP(i64,atomic_load32_u,llvmI32Type,2,irBuilder.CreateZExt) + + EMIT_ATOMIC_STORE_OP(i32,atomic_store,llvmI32Type,2,identityConversion) + EMIT_ATOMIC_STORE_OP(i64,atomic_store,llvmI64Type,3,identityConversion) + EMIT_ATOMIC_STORE_OP(f32,atomic_store,llvmF32Type,2,identityConversion) + EMIT_ATOMIC_STORE_OP(f64,atomic_store,llvmF64Type,3,identityConversion) + + EMIT_ATOMIC_STORE_OP(i32,atomic_store8,llvmI8Type,0,irBuilder.CreateTrunc) + EMIT_ATOMIC_STORE_OP(i32,atomic_store16,llvmI16Type,1,irBuilder.CreateTrunc) + EMIT_ATOMIC_STORE_OP(i64,atomic_store8,llvmI8Type,0,irBuilder.CreateTrunc) + EMIT_ATOMIC_STORE_OP(i64,atomic_store16,llvmI16Type,1,irBuilder.CreateTrunc) + EMIT_ATOMIC_STORE_OP(i64,atomic_store32,llvmI32Type,2,irBuilder.CreateTrunc) + + #define EMIT_ATOMIC_CMPXCHG(valueTypeId,name,llvmMemoryType,naturalAlignmentLog2,memoryToValueConversion,valueToMemoryConversion) \ + void valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ + { \ + auto replacementValue = valueToMemoryConversion(pop(),llvmMemoryType); \ + auto expectedValue = valueToMemoryConversion(pop(),llvmMemoryType); \ + auto byteIndex = pop(); \ + trapIfMisalignedAtomic(byteIndex,naturalAlignmentLog2); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto atomicCmpXchg = irBuilder.CreateAtomicCmpXchg( \ + pointer, \ + expectedValue, \ + replacementValue, \ + llvm::AtomicOrdering::SequentiallyConsistent, \ + llvm::AtomicOrdering::SequentiallyConsistent); \ + atomicCmpXchg->setVolatile(true); \ + push(memoryToValueConversion(atomicCmpXchg,asLLVMType(ValueType::valueTypeId))); \ + } + + EMIT_ATOMIC_CMPXCHG(i32,atomic_rmw8_u_cmpxchg,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_CMPXCHG(i32,atomic_rmw16_u_cmpxchg,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_CMPXCHG(i32,atomic_rmw_cmpxchg,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_CMPXCHG(i64,atomic_rmw8_u_cmpxchg,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_CMPXCHG(i64,atomic_rmw16_u_cmpxchg,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_CMPXCHG(i64,atomic_rmw32_u_cmpxchg,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_CMPXCHG(i64,atomic_rmw_cmpxchg,llvmI64Type,3,identityConversion,identityConversion) + + #define EMIT_ATOMIC_RMW(valueTypeId,name,rmwOpId,llvmMemoryType,naturalAlignmentLog2,memoryToValueConversion,valueToMemoryConversion) \ + void valueTypeId##_##name(AtomicLoadOrStoreImm imm) \ + { \ + auto value = valueToMemoryConversion(pop(),llvmMemoryType); \ + auto byteIndex = pop(); \ + trapIfMisalignedAtomic(byteIndex,naturalAlignmentLog2); \ + auto pointer = coerceByteIndexToPointer(byteIndex,imm.offset,llvmMemoryType); \ + auto atomicRMW = irBuilder.CreateAtomicRMW( \ + llvm::AtomicRMWInst::BinOp::rmwOpId, \ + pointer, \ + value, \ + llvm::AtomicOrdering::SequentiallyConsistent); \ + atomicRMW->setVolatile(true); \ + push(memoryToValueConversion(atomicRMW,asLLVMType(ValueType::valueTypeId))); \ + } + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_xchg,Xchg,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_xchg,Xchg,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_xchg,Xchg,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_xchg,Xchg,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_xchg,Xchg,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_xchg,Xchg,llvmI16Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_xchg,Xchg,llvmI64Type,3,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_add,Add,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_add,Add,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_add,Add,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_add,Add,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_add,Add,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_add,Add,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_add,Add,llvmI64Type,3,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_sub,Sub,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_sub,Sub,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_sub,Sub,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_sub,Sub,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_sub,Sub,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_sub,Sub,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_sub,Sub,llvmI64Type,3,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_and,And,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_and,And,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_and,And,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_and,And,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_and,And,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_and,And,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_and,And,llvmI64Type,3,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_or,Or,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_or,Or,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_or,Or,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_or,Or,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_or,Or,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_or,Or,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_or,Or,llvmI64Type,3,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i32,atomic_rmw8_u_xor,Xor,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw16_u_xor,Xor,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i32,atomic_rmw_xor,Xor,llvmI32Type,2,identityConversion,identityConversion) + + EMIT_ATOMIC_RMW(i64,atomic_rmw8_u_xor,Xor,llvmI8Type,0,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw16_u_xor,Xor,llvmI16Type,1,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw32_u_xor,Xor,llvmI32Type,2,irBuilder.CreateZExt,irBuilder.CreateTrunc) + EMIT_ATOMIC_RMW(i64,atomic_rmw_xor,Xor,llvmI64Type,3,identityConversion,identityConversion) + #endif + }; + + // A do-nothing visitor used to decode past unreachable operators (but supporting logging, and passing the end operator through). + struct UnreachableOpVisitor + { + typedef void Result; + + UnreachableOpVisitor(EmitFunctionContext& inContext): context(inContext), unreachableControlDepth(0) {} + #define VISIT_OP(opcode,name,nameString,Imm,...) void name(Imm imm) {} + ENUM_NONCONTROL_OPERATORS(VISIT_OP) + VISIT_OP(_,unknown,"unknown",Opcode) + #undef VISIT_OP + + // Keep track of control structure nesting level in unreachable code, so we know when we reach the end of the unreachable code. + void block(ControlStructureImm) { ++unreachableControlDepth; } + void loop(ControlStructureImm) { ++unreachableControlDepth; } + void if_(ControlStructureImm) { ++unreachableControlDepth; } + + // If an else or end opcode would signal an end to the unreachable code, then pass it through to the IR emitter. + void else_(NoImm imm) + { + if(!unreachableControlDepth) { context.else_(imm); } + } + void end(NoImm imm) + { + if(!unreachableControlDepth) { context.end(imm); } + else { --unreachableControlDepth; } + } + + private: + EmitFunctionContext& context; + Uptr unreachableControlDepth; + }; + + void EmitFunctionContext::emit() + { + // Create debug info for the function. + llvm::SmallVector diFunctionParameterTypes; + for(auto parameterType : functionType->parameters) { diFunctionParameterTypes.push_back(moduleContext.diValueTypes[(Uptr)parameterType]); } + auto diFunctionType = moduleContext.diBuilder.createSubroutineType(moduleContext.diBuilder.getOrCreateTypeArray(diFunctionParameterTypes)); + diFunction = moduleContext.diBuilder.createFunction( + moduleContext.diModuleScope, + functionInstance->debugName, + llvmFunction->getName(), + moduleContext.diModuleScope, + 0, + diFunctionType, + false, + true, + 0); + llvmFunction->setSubprogram(diFunction); + + // Create the return basic block, and push the root control context for the function. + auto returnBlock = llvm::BasicBlock::Create(context,"return",llvmFunction); + auto returnPHI = createPHI(returnBlock,functionType->ret); + pushControlStack(ControlContext::Type::function,functionType->ret,returnBlock,returnPHI); + pushBranchTarget(functionType->ret,returnBlock,returnPHI); + + // Create an initial basic block for the function. + auto entryBasicBlock = llvm::BasicBlock::Create(context,"entry",llvmFunction); + irBuilder.SetInsertPoint(entryBasicBlock); + + // If enabled, emit a call to the WAVM function enter hook (for debugging). + if(ENABLE_FUNCTION_ENTER_EXIT_HOOKS) + { + emitRuntimeIntrinsic( + "wavmIntrinsics.debugEnterFunction", + FunctionType::get(ResultType::none,{ValueType::i64}), + {emitLiteral(reinterpret_cast(functionInstance))} + ); + } + + // Create and initialize allocas for all the locals and parameters. + auto llvmArgIt = llvmFunction->arg_begin(); + for(Uptr localIndex = 0;localIndex < functionType->parameters.size() + functionDef.nonParameterLocalTypes.size();++localIndex) + { + auto localType = localIndex < functionType->parameters.size() + ? functionType->parameters[localIndex] + : functionDef.nonParameterLocalTypes[localIndex - functionType->parameters.size()]; + auto localPointer = irBuilder.CreateAlloca(asLLVMType(localType),nullptr,""); + localPointers.push_back(localPointer); + + if(localIndex < functionType->parameters.size()) + { + // Copy the parameter value into the local that stores it. + irBuilder.CreateStore((llvm::Argument*)&(*llvmArgIt),localPointer); + ++llvmArgIt; + } + else + { + // Initialize non-parameter locals to zero. + irBuilder.CreateStore(typedZeroConstants[(Uptr)localType],localPointer); + } + } + + // Decode the WebAssembly opcodes and emit LLVM IR for them. + OperatorDecoderStream decoder(functionDef.code); + UnreachableOpVisitor unreachableOpVisitor(*this); + OperatorPrinter operatorPrinter(module,functionDef); + Uptr opIndex = 0; + while(decoder && controlStack.size()) + { + irBuilder.SetCurrentDebugLocation(llvm::DILocation::get(context,(unsigned int)opIndex++,0,diFunction)); + if(ENABLE_LOGGING) + { + logOperator(decoder.decodeOpWithoutConsume(operatorPrinter)); + } + + if(controlStack.back().isReachable) { decoder.decodeOp(*this); } + else { decoder.decodeOp(unreachableOpVisitor); } + }; + assert(irBuilder.GetInsertBlock() == returnBlock); + + // If enabled, emit a call to the WAVM function enter hook (for debugging). + if(ENABLE_FUNCTION_ENTER_EXIT_HOOKS) + { + emitRuntimeIntrinsic( + "wavmIntrinsics.debugExitFunction", + FunctionType::get(ResultType::none,{ValueType::i64}), + {emitLiteral(reinterpret_cast(functionInstance))} + ); + } + + // Emit the function return. + if(functionType->ret == ResultType::none) { irBuilder.CreateRetVoid(); } + else { irBuilder.CreateRet(pop()); } + } + + llvm::Module* EmitModuleContext::emit() + { + Timing::Timer emitTimer; + + // Create literals for the default memory base and mask. + if(moduleInstance->defaultMemory) + { + defaultMemoryBase = emitLiteralPointer(moduleInstance->defaultMemory->baseAddress,llvmI8PtrType); + const Uptr defaultMemoryAddressMaskValue = Uptr(moduleInstance->defaultMemory->endOffset) - 1; + defaultMemoryAddressMask = emitLiteral(defaultMemoryAddressMaskValue); + } + else { defaultMemoryBase = defaultMemoryAddressMask = nullptr; } + + // Set up the LLVM values used to access the global table. + if(moduleInstance->defaultTable) + { + auto tableElementType = llvm::StructType::get(context,{ + llvmI8PtrType, + llvmI8PtrType + }); + defaultTablePointer = emitLiteralPointer(moduleInstance->defaultTable->baseAddress,tableElementType->getPointerTo()); + defaultTableEndOffset = emitLiteral((Uptr)moduleInstance->defaultTable->endOffset); + } + else + { + defaultTablePointer = defaultTableEndOffset = nullptr; + } + + // Create LLVM pointer constants for the module's imported functions. + for(Uptr functionIndex = 0;functionIndex < module.functions.imports.size();++functionIndex) + { + const FunctionInstance* functionInstance = moduleInstance->functions[functionIndex]; + importedFunctionPointers.push_back(emitLiteralPointer(functionInstance->nativeFunction,asLLVMType(functionInstance->type)->getPointerTo())); + } + + // Create LLVM pointer constants for the module's globals. + for(auto global : moduleInstance->globals) + { globalPointers.push_back(emitLiteralPointer(&global->value,asLLVMType(global->type.valueType)->getPointerTo())); } + + // Create the LLVM functions. + functionDefs.resize(module.functions.defs.size()); + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { + auto llvmFunctionType = asLLVMType(module.types[module.functions.defs[functionDefIndex].type.index]); + auto externalName = getExternalFunctionName(moduleInstance,functionDefIndex); + functionDefs[functionDefIndex] = llvm::Function::Create(llvmFunctionType,llvm::Function::ExternalLinkage,externalName,llvmModule); + } + + // Compile each function in the module. + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { EmitFunctionContext(*this,module,module.functions.defs[functionDefIndex],moduleInstance->functionDefs[functionDefIndex],functionDefs[functionDefIndex]).emit(); } + + // Finalize the debug info. + diBuilder.finalize(); + + Timing::logRatePerSecond("Emitted LLVM IR",emitTimer,(F64)llvmModule->size(),"functions"); + + return llvmModule; + } + + llvm::Module* emitModule(const Module& module,ModuleInstance* moduleInstance) + { + return EmitModuleContext(module,moduleInstance).emit(); + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/LLVMJIT.cpp b/libraries/wasm-jit/Source/Runtime/LLVMJIT.cpp new file mode 100644 index 000000000..d2328efeb --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/LLVMJIT.cpp @@ -0,0 +1,720 @@ +#include "LLVMJIT.h" +#include "Inline/BasicTypes.h" +#include "Inline/Timing.h" +#include "Logging/Logging.h" +#include "RuntimePrivate.h" + +#ifdef _DEBUG + // This needs to be 1 to allow debuggers such as Visual Studio to place breakpoints and step through the JITed code. + #define USE_WRITEABLE_JIT_CODE_PAGES 1 + + #define DUMP_UNOPTIMIZED_MODULE 1 + #define VERIFY_MODULE 1 + #define DUMP_OPTIMIZED_MODULE 1 +#else + #define USE_WRITEABLE_JIT_CODE_PAGES 0 + #define DUMP_UNOPTIMIZED_MODULE 0 + #define VERIFY_MODULE 0 + #define DUMP_OPTIMIZED_MODULE 0 +#endif + +namespace LLVMJIT +{ + llvm::LLVMContext context; + llvm::TargetMachine* targetMachine = nullptr; + llvm::Type* llvmResultTypes[(Uptr)ResultType::num]; + + llvm::Type* llvmI8Type; + llvm::Type* llvmI16Type; + llvm::Type* llvmI32Type; + llvm::Type* llvmI64Type; + llvm::Type* llvmF32Type; + llvm::Type* llvmF64Type; + llvm::Type* llvmVoidType; + llvm::Type* llvmBoolType; + llvm::Type* llvmI8PtrType; + + #if ENABLE_SIMD_PROTOTYPE + llvm::Type* llvmI8x16Type; + llvm::Type* llvmI16x8Type; + llvm::Type* llvmI32x4Type; + llvm::Type* llvmI64x2Type; + llvm::Type* llvmF32x4Type; + llvm::Type* llvmF64x2Type; + llvm::Type* llvmB8x16Type; + llvm::Type* llvmB16x8Type; + llvm::Type* llvmB32x4Type; + llvm::Type* llvmB64x2Type; + #endif + + llvm::Constant* typedZeroConstants[(Uptr)ValueType::num]; + + // A map from address to loaded JIT symbols. + Platform::Mutex* addressToSymbolMapMutex = Platform::createMutex(); + std::map addressToSymbolMap; + + // A map from function types to function indices in the invoke thunk unit. + std::map invokeThunkTypeToSymbolMap; + + // Information about a JIT symbol, used to map instruction pointers to descriptive names. + struct JITSymbol + { + enum class Type + { + functionInstance, + invokeThunk + }; + Type type; + union + { + FunctionInstance* functionInstance; + const FunctionType* invokeThunkType; + }; + Uptr baseAddress; + Uptr numBytes; + std::map offsetToOpIndexMap; + + JITSymbol(FunctionInstance* inFunctionInstance,Uptr inBaseAddress,Uptr inNumBytes,std::map&& inOffsetToOpIndexMap) + : type(Type::functionInstance), functionInstance(inFunctionInstance), baseAddress(inBaseAddress), numBytes(inNumBytes), offsetToOpIndexMap(inOffsetToOpIndexMap) {} + + JITSymbol(const FunctionType* inInvokeThunkType,Uptr inBaseAddress,Uptr inNumBytes,std::map&& inOffsetToOpIndexMap) + : type(Type::invokeThunk), invokeThunkType(inInvokeThunkType), baseAddress(inBaseAddress), numBytes(inNumBytes), offsetToOpIndexMap(inOffsetToOpIndexMap) {} + }; + + // Allocates memory for the LLVM object loader. + struct UnitMemoryManager : llvm::RTDyldMemoryManager + { + UnitMemoryManager() + : imageBaseAddress(nullptr) + , isFinalized(false) + , codeSection({0}) + , readOnlySection({0}) + , readWriteSection({0}) + , hasRegisteredEHFrames(false) + {} + virtual ~UnitMemoryManager() override + { + // Deregister the exception handling frame info. + if(hasRegisteredEHFrames) + { + hasRegisteredEHFrames = false; + deregisterEHFrames(ehFramesAddr,ehFramesLoadAddr,ehFramesNumBytes); + } + + // Decommit the image pages, but leave them reserved to catch any references to them that might erroneously remain. + Platform::decommitVirtualPages(imageBaseAddress,numAllocatedImagePages); + } + + void registerEHFrames(U8* addr, U64 loadAddr,uintptr_t numBytes) override + { + llvm::RTDyldMemoryManager::registerEHFrames(addr,loadAddr,numBytes); + hasRegisteredEHFrames = true; + ehFramesAddr = addr; + ehFramesLoadAddr = loadAddr; + ehFramesNumBytes = numBytes; + } + void deregisterEHFrames(U8* addr, U64 loadAddr,uintptr_t numBytes) override + { + llvm::RTDyldMemoryManager::deregisterEHFrames(addr,loadAddr,numBytes); + } + + virtual bool needsToReserveAllocationSpace() override { return true; } + virtual void reserveAllocationSpace(uintptr_t numCodeBytes,U32 codeAlignment,uintptr_t numReadOnlyBytes,U32 readOnlyAlignment,uintptr_t numReadWriteBytes,U32 readWriteAlignment) override + { + // Calculate the number of pages to be used by each section. + codeSection.numPages = shrAndRoundUp(numCodeBytes,Platform::getPageSizeLog2()); + readOnlySection.numPages = shrAndRoundUp(numReadOnlyBytes,Platform::getPageSizeLog2()); + readWriteSection.numPages = shrAndRoundUp(numReadWriteBytes,Platform::getPageSizeLog2()); + numAllocatedImagePages = codeSection.numPages + readOnlySection.numPages + readWriteSection.numPages; + if(numAllocatedImagePages) + { + // Reserve enough contiguous pages for all sections. + imageBaseAddress = Platform::allocateVirtualPages(numAllocatedImagePages); + if(!imageBaseAddress || !Platform::commitVirtualPages(imageBaseAddress,numAllocatedImagePages)) { Errors::fatal("memory allocation for JIT code failed"); } + codeSection.baseAddress = imageBaseAddress; + readOnlySection.baseAddress = codeSection.baseAddress + (codeSection.numPages << Platform::getPageSizeLog2()); + readWriteSection.baseAddress = readOnlySection.baseAddress + (readOnlySection.numPages << Platform::getPageSizeLog2()); + } + } + virtual U8* allocateCodeSection(uintptr_t numBytes,U32 alignment,U32 sectionID,llvm::StringRef sectionName) override + { + return allocateBytes((Uptr)numBytes,alignment,codeSection); + } + virtual U8* allocateDataSection(uintptr_t numBytes,U32 alignment,U32 sectionID,llvm::StringRef SectionName,bool isReadOnly) override + { + return allocateBytes((Uptr)numBytes,alignment,isReadOnly ? readOnlySection : readWriteSection); + } + virtual bool finalizeMemory(std::string* ErrMsg = nullptr) override + { + assert(!isFinalized); + isFinalized = true; + // Set the requested final memory access for each section's pages. + const Platform::MemoryAccess codeAccess = USE_WRITEABLE_JIT_CODE_PAGES ? Platform::MemoryAccess::ReadWriteExecute : Platform::MemoryAccess::Execute; + if(codeSection.numPages && !Platform::setVirtualPageAccess(codeSection.baseAddress,codeSection.numPages,codeAccess)) { return false; } + if(readOnlySection.numPages && !Platform::setVirtualPageAccess(readOnlySection.baseAddress,readOnlySection.numPages,Platform::MemoryAccess::ReadOnly)) { return false; } + if(readWriteSection.numPages && !Platform::setVirtualPageAccess(readWriteSection.baseAddress,readWriteSection.numPages,Platform::MemoryAccess::ReadWrite)) { return false; } + return true; + } + virtual void invalidateInstructionCache() + { + // Invalidate the instruction cache for the whole image. + llvm::sys::Memory::InvalidateInstructionCache(imageBaseAddress,numAllocatedImagePages << Platform::getPageSizeLog2()); + } + + U8* getImageBaseAddress() const { return imageBaseAddress; } + + private: + struct Section + { + U8* baseAddress; + Uptr numPages; + Uptr numCommittedBytes; + }; + + U8* imageBaseAddress; + Uptr numAllocatedImagePages; + bool isFinalized; + + Section codeSection; + Section readOnlySection; + Section readWriteSection; + + bool hasRegisteredEHFrames; + U8* ehFramesAddr; + U64 ehFramesLoadAddr; + Uptr ehFramesNumBytes; + + U8* allocateBytes(Uptr numBytes,Uptr alignment,Section& section) + { + assert(section.baseAddress); + assert(!(alignment & (alignment - 1))); + assert(!isFinalized); + + // Allocate the section at the lowest uncommitted byte of image memory. + U8* allocationBaseAddress = section.baseAddress + align(section.numCommittedBytes,alignment); + assert(!(reinterpret_cast(allocationBaseAddress) & (alignment-1))); + section.numCommittedBytes = align(section.numCommittedBytes,alignment) + align(numBytes,alignment); + + // Check that enough space was reserved in the section. + if(section.numCommittedBytes > (section.numPages << Platform::getPageSizeLog2())) { Errors::fatal("didn't reserve enough space in section"); } + + return allocationBaseAddress; + } + + static Uptr align(Uptr size,Uptr alignment) { return (size + alignment - 1) & ~(alignment - 1); } + static Uptr shrAndRoundUp(Uptr value,Uptr shift) { return (value + (Uptr(1)<> shift; } + + UnitMemoryManager(const UnitMemoryManager&) = delete; + void operator=(const UnitMemoryManager&) = delete; + }; + + // A unit of JIT compilation. + // Encapsulates the LLVM JIT compilation pipeline but allows subclasses to define how the resulting code is used. + struct JITUnit + { + JITUnit(bool inShouldLogMetrics = true) + : shouldLogMetrics(inShouldLogMetrics) + #ifdef _WIN32 + , pdataCopy(nullptr) + #endif + { + objectLayer = llvm::make_unique(NotifyLoadedFunctor(this),NotifyFinalizedFunctor(this)); + objectLayer->setProcessAllSections(true); + compileLayer = llvm::make_unique(*objectLayer,llvm::orc::SimpleCompiler(*targetMachine)); + } + ~JITUnit() + { + compileLayer->removeModuleSet(handle); + #ifdef _WIN32 + if(pdataCopy) { Platform::deregisterSEHUnwindInfo(reinterpret_cast(pdataCopy)); } + #endif + } + + void compile(llvm::Module* llvmModule); + + virtual void notifySymbolLoaded(const char* name,Uptr baseAddress,Uptr numBytes,std::map&& offsetToOpIndexMap) = 0; + + private: + + // Functor that receives notifications when an object produced by the JIT is loaded. + struct NotifyLoadedFunctor + { + JITUnit* jitUnit; + NotifyLoadedFunctor(JITUnit* inJITUnit): jitUnit(inJITUnit) {} + void operator()( + const llvm::orc::ObjectLinkingLayerBase::ObjSetHandleT& objectSetHandle, + const std::vector>>& objectSet, + const std::vector>& loadedObjects + ); + }; + + // Functor that receives notifications when an object produced by the JIT is finalized. + struct NotifyFinalizedFunctor + { + JITUnit* jitUnit; + NotifyFinalizedFunctor(JITUnit* inJITUnit): jitUnit(inJITUnit) {} + void operator()(const llvm::orc::ObjectLinkingLayerBase::ObjSetHandleT& objectSetHandle); + }; + typedef llvm::orc::ObjectLinkingLayer ObjectLayer; + typedef llvm::orc::IRCompileLayer CompileLayer; + + UnitMemoryManager memoryManager; + std::unique_ptr objectLayer; + std::unique_ptr compileLayer; + CompileLayer::ModuleSetHandleT handle; + bool shouldLogMetrics; + + struct LoadedObject + { + llvm::object::ObjectFile* object; + llvm::RuntimeDyld::LoadedObjectInfo* loadedObject; + }; + + std::vector loadedObjects; + + #ifdef _WIN32 + U8* pdataCopy; + #endif + }; + + // The JIT compilation unit for a WebAssembly module instance. + struct JITModule : JITUnit, JITModuleBase + { + ModuleInstance* moduleInstance; + + std::vector functionDefSymbols; + + JITModule(ModuleInstance* inModuleInstance): moduleInstance(inModuleInstance) {} + ~JITModule() override + { + // Delete the module's symbols, and remove them from the global address-to-symbol map. + Platform::Lock addressToSymbolMapLock(addressToSymbolMapMutex); + for(auto symbol : functionDefSymbols) + { + addressToSymbolMap.erase(addressToSymbolMap.find(symbol->baseAddress + symbol->numBytes)); + delete symbol; + } + } + + void notifySymbolLoaded(const char* name,Uptr baseAddress,Uptr numBytes,std::map&& offsetToOpIndexMap) override + { + // Save the address range this function was loaded at for future address->symbol lookups. + Uptr functionDefIndex; + if(getFunctionIndexFromExternalName(name,functionDefIndex)) + { + assert(moduleInstance); + assert(functionDefIndex < moduleInstance->functionDefs.size()); + FunctionInstance* functionInstance = moduleInstance->functionDefs[functionDefIndex]; + auto symbol = new JITSymbol(functionInstance,baseAddress,numBytes,std::move(offsetToOpIndexMap)); + functionDefSymbols.push_back(symbol); + functionInstance->nativeFunction = reinterpret_cast(baseAddress); + + { + Platform::Lock addressToSymbolMapLock(addressToSymbolMapMutex); + addressToSymbolMap[baseAddress + numBytes] = symbol; + } + } + } + }; + + // The JIT compilation unit for a single invoke thunk. + struct JITInvokeThunkUnit : JITUnit + { + const FunctionType* functionType; + + JITSymbol* symbol; + + JITInvokeThunkUnit(const FunctionType* inFunctionType): JITUnit(false), functionType(inFunctionType), symbol(nullptr) {} + + void notifySymbolLoaded(const char* name,Uptr baseAddress,Uptr numBytes,std::map&& offsetToOpIndexMap) override + { + assert(!strcmp(name,"invokeThunk")); + symbol = new JITSymbol(functionType,baseAddress,numBytes,std::move(offsetToOpIndexMap)); + } + }; + + // Used to override LLVM's default behavior of looking up unresolved symbols in DLL exports. + struct NullResolver : llvm::JITSymbolResolver + { + static NullResolver singleton; + virtual llvm::JITSymbol findSymbol(const std::string& name) override; + virtual llvm::JITSymbol findSymbolInLogicalDylib(const std::string& name) override; + }; + + NullResolver NullResolver::singleton; + llvm::JITSymbol NullResolver::findSymbol(const std::string& name) + { + // Allow __chkstk through: the LLVM X86 code generator adds calls to it when allocating more than 4KB of stack space. + if(name == "__chkstk") + { + void *addr = llvm::sys::DynamicLibrary::SearchForAddressOfSymbol(name); + if (addr) { return llvm::JITSymbol(reinterpret_cast(addr),llvm::JITSymbolFlags::None); } + } + + Log::printf(Log::Category::error,"LLVM generated code referenced external symbol: %s\n",name.c_str()); + Errors::unreachable(); + } + llvm::JITSymbol NullResolver::findSymbolInLogicalDylib(const std::string& name) { return llvm::JITSymbol(nullptr); } + + void JITUnit::NotifyLoadedFunctor::operator()( + const llvm::orc::ObjectLinkingLayerBase::ObjSetHandleT& objectSetHandle, + const std::vector>>& objectSet, + const std::vector>& loadedObjects + ) + { + assert(objectSet.size() == loadedObjects.size()); + for(Uptr objectIndex = 0;objectIndex < loadedObjects.size();++objectIndex) + { + llvm::object::ObjectFile* object = objectSet[objectIndex].get()->getBinary(); + llvm::RuntimeDyld::LoadedObjectInfo* loadedObject = loadedObjects[objectIndex].get(); + + // Make a copy of the loaded object info for use by the finalizer. + jitUnit->loadedObjects.push_back({object,loadedObject}); + + #ifdef _WIN32 + // On Windows, look for .pdata and .xdata sections containing information about how to unwind the stack. + // This needs to be done before the below emitAndFinalize call, which will incorrectly apply relocations to the unwind info. + + // Find the pdata section. + llvm::object::SectionRef pdataSection; + for(auto section : object->sections()) + { + llvm::StringRef sectionName; + if(!section.getName(sectionName)) + { + if(sectionName == ".pdata") { pdataSection = section; break; } + } + } + + // Pass the pdata section to the platform to register unwind info. + if(pdataSection.getObject()) + { + const Uptr imageBaseAddress = reinterpret_cast(jitUnit->memoryManager.getImageBaseAddress()); + const Uptr pdataSectionLoadAddress = (Uptr)loadedObject->getSectionLoadAddress(pdataSection); + + // The LLVM COFF dynamic loader doesn't handle the image-relative relocations used by the pdata section, + // and overwrites those values with o: https://github.com/llvm-mirror/llvm/blob/e84d8c12d5157a926db15976389f703809c49aa5/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h#L96 + // This works around that by making a copy of the pdata section and doing the pdata relocations manually. + jitUnit->pdataCopy = new U8[pdataSection.getSize()]; + memcpy(jitUnit->pdataCopy,reinterpret_cast(pdataSectionLoadAddress),pdataSection.getSize()); + + for(auto pdataRelocIt : pdataSection.relocations()) + { + // Only handle type 3 (IMAGE_REL_AMD64_ADDR32NB). + if(pdataRelocIt.getType() != 3) { Errors::unreachable(); } + + const auto symbol = pdataRelocIt.getSymbol(); + const U64 symbolAddress = symbol->getAddress().get(); + const llvm::object::section_iterator symbolSection = symbol->getSection().get(); + U32* valueToRelocate = (U32*)(jitUnit->pdataCopy + pdataRelocIt.getOffset()); + const U64 relocatedValue64 = + + (symbolAddress - symbolSection->getAddress()) + + loadedObject->getSectionLoadAddress(*symbolSection) + + *valueToRelocate + - imageBaseAddress; + if(relocatedValue64 > UINT32_MAX) { Errors::unreachable(); } + *valueToRelocate = (U32)relocatedValue64; + } + + Platform::registerSEHUnwindInfo(imageBaseAddress,reinterpret_cast(jitUnit->pdataCopy),pdataSection.getSize()); + } + #endif + } + + } + + void JITUnit::NotifyFinalizedFunctor::operator()(const llvm::orc::ObjectLinkingLayerBase::ObjSetHandleT& objectSetHandle) + { + for(Uptr objectIndex = 0;objectIndex < jitUnit->loadedObjects.size();++objectIndex) + { + llvm::object::ObjectFile* object = jitUnit->loadedObjects[objectIndex].object; + llvm::RuntimeDyld::LoadedObjectInfo* loadedObject = jitUnit->loadedObjects[objectIndex].loadedObject; + + // Create a DWARF context to interpret the debug information in this compilation unit. + auto dwarfContext = llvm::make_unique(*object,loadedObject); + + // Iterate over the functions in the loaded object. + for(auto symbolSizePair : llvm::object::computeSymbolSizes(*object)) + { + auto symbol = symbolSizePair.first; + auto name = symbol.getName(); + auto address = symbol.getAddress(); + if( symbol.getType() && symbol.getType().get() == llvm::object::SymbolRef::ST_Function + && name + && address) + { + // Compute the address the functions was loaded at. + Uptr loadedAddress = *address; + auto symbolSection = symbol.getSection(); + if(symbolSection) + { + loadedAddress += (Uptr)loadedObject->getSectionLoadAddress(*symbolSection.get()); + } + + // Get the DWARF line info for this symbol, which maps machine code addresses to WebAssembly op indices. + llvm::DILineInfoTable lineInfoTable = dwarfContext->getLineInfoForAddressRange(loadedAddress,symbolSizePair.second); + std::map offsetToOpIndexMap; + for(auto lineInfo : lineInfoTable) { offsetToOpIndexMap.emplace(U32(lineInfo.first - loadedAddress),lineInfo.second.Line); } + + // Notify the JIT unit that the symbol was loaded. + jitUnit->notifySymbolLoaded(name->data(),loadedAddress,symbolSizePair.second,std::move(offsetToOpIndexMap)); + } + } + } + + jitUnit->loadedObjects.clear(); + } + + static Uptr printedModuleId = 0; + + void printModule(const llvm::Module* llvmModule,const char* filename) + { + std::error_code errorCode; + std::string augmentedFilename = std::string(filename) + std::to_string(printedModuleId++) + ".ll"; + llvm::raw_fd_ostream dumpFileStream(augmentedFilename,errorCode,llvm::sys::fs::OpenFlags::F_Text); + llvmModule->print(dumpFileStream,nullptr); + Log::printf(Log::Category::debug,"Dumped LLVM module to: %s\n",augmentedFilename.c_str()); + } + + void JITUnit::compile(llvm::Module* llvmModule) + { + // Get a target machine object for this host, and set the module to use its data layout. + llvmModule->setDataLayout(targetMachine->createDataLayout()); + + // Verify the module. + if(DUMP_UNOPTIMIZED_MODULE) { printModule(llvmModule,"llvmDump"); } + if(VERIFY_MODULE) + { + std::string verifyOutputString; + llvm::raw_string_ostream verifyOutputStream(verifyOutputString); + if(llvm::verifyModule(*llvmModule,&verifyOutputStream)) + { Errors::fatalf("LLVM verification errors:\n%s\n",verifyOutputString.c_str()); } + Log::printf(Log::Category::debug,"Verified LLVM module\n"); + } + + // Run some optimization on the module's functions. + Timing::Timer optimizationTimer; + + auto fpm = new llvm::legacy::FunctionPassManager(llvmModule); + fpm->add(llvm::createPromoteMemoryToRegisterPass()); + fpm->add(llvm::createInstructionCombiningPass()); + fpm->add(llvm::createCFGSimplificationPass()); + fpm->add(llvm::createJumpThreadingPass()); + fpm->add(llvm::createConstantPropagationPass()); + fpm->doInitialization(); + for(auto functionIt = llvmModule->begin();functionIt != llvmModule->end();++functionIt) + { fpm->run(*functionIt); } + delete fpm; + + if(shouldLogMetrics) + { + Timing::logRatePerSecond("Optimized LLVM module",optimizationTimer,(F64)llvmModule->size(),"functions"); + } + + if(DUMP_OPTIMIZED_MODULE) { printModule(llvmModule,"llvmOptimizedDump"); } + + // Pass the module to the JIT compiler. + Timing::Timer machineCodeTimer; + handle = compileLayer->addModuleSet( + std::vector{llvmModule}, + &memoryManager, + &NullResolver::singleton); + compileLayer->emitAndFinalize(handle); + + if(shouldLogMetrics) + { + Timing::logRatePerSecond("Generated machine code",machineCodeTimer,(F64)llvmModule->size(),"functions"); + } + + delete llvmModule; + } + + void instantiateModule(const IR::Module& module,ModuleInstance* moduleInstance) + { + // Emit LLVM IR for the module. + auto llvmModule = emitModule(module,moduleInstance); + + // Construct the JIT compilation pipeline for this module. + auto jitModule = new JITModule(moduleInstance); + moduleInstance->jitModule = jitModule; + + // Compile the module. + jitModule->compile(llvmModule); + } + + std::string getExternalFunctionName(ModuleInstance* moduleInstance,Uptr functionDefIndex) + { + assert(functionDefIndex < moduleInstance->functionDefs.size()); + return "wasmFunc" + std::to_string(functionDefIndex) + + "_" + moduleInstance->functionDefs[functionDefIndex]->debugName; + } + + bool getFunctionIndexFromExternalName(const char* externalName,Uptr& outFunctionDefIndex) + { + if(!strncmp(externalName,"wasmFunc",8)) + { + char* numberEnd = nullptr; + outFunctionDefIndex = std::strtoull(externalName + 8,&numberEnd,10); + return true; + } + else { return false; } + } + + bool describeInstructionPointer(Uptr ip,std::string& outDescription) + { + JITSymbol* symbol; + { + Platform::Lock addressToSymbolMapLock(addressToSymbolMapMutex); + auto symbolIt = addressToSymbolMap.upper_bound(ip); + if(symbolIt == addressToSymbolMap.end()) { return false; } + symbol = symbolIt->second; + } + if(ip < symbol->baseAddress || ip >= symbol->baseAddress + symbol->numBytes) { return false; } + + switch(symbol->type) + { + case JITSymbol::Type::functionInstance: + outDescription = symbol->functionInstance->debugName; + if(!outDescription.size()) { outDescription = ""; } + break; + case JITSymbol::Type::invokeThunk: + outDescription = "invokeThunkType) + ">"; + break; + default: Errors::unreachable(); + }; + + // Find the highest entry in the offsetToOpIndexMap whose offset is <= the symbol-relative IP. + U32 ipOffset = (U32)(ip - symbol->baseAddress); + Iptr opIndex = -1; + for(auto offsetMapIt : symbol->offsetToOpIndexMap) + { + if(offsetMapIt.first <= ipOffset) { opIndex = offsetMapIt.second; } + else { break; } + } + if(opIndex >= 0) { outDescription += " (op " + std::to_string(opIndex) + ")"; } + return true; + } + + InvokeFunctionPointer getInvokeThunk(const FunctionType* functionType) + { + // Reuse cached invoke thunks for the same function type. + auto mapIt = invokeThunkTypeToSymbolMap.find(functionType); + if(mapIt != invokeThunkTypeToSymbolMap.end()) { return reinterpret_cast(mapIt->second->baseAddress); } + + auto llvmModule = new llvm::Module("",context); + auto llvmFunctionType = llvm::FunctionType::get( + llvmVoidType, + {asLLVMType(functionType)->getPointerTo(),llvmI64Type->getPointerTo()}, + false); + auto llvmFunction = llvm::Function::Create(llvmFunctionType,llvm::Function::ExternalLinkage,"invokeThunk",llvmModule); + auto argIt = llvmFunction->args().begin(); + llvm::Value* functionPointer = &*argIt++; + llvm::Value* argBaseAddress = &*argIt; + auto entryBlock = llvm::BasicBlock::Create(context,"entry",llvmFunction); + llvm::IRBuilder<> irBuilder(entryBlock); + + // Load the function's arguments from an array of 64-bit values at an address provided by the caller. + std::vector structArgLoads; + for(Uptr parameterIndex = 0;parameterIndex < functionType->parameters.size();++parameterIndex) + { + structArgLoads.push_back(irBuilder.CreateLoad( + irBuilder.CreatePointerCast( + irBuilder.CreateInBoundsGEP(argBaseAddress,{emitLiteral((Uptr)parameterIndex)}), + asLLVMType(functionType->parameters[parameterIndex])->getPointerTo() + ) + )); + } + + // Call the llvm function with the actual implementation. + auto returnValue = irBuilder.CreateCall(functionPointer,structArgLoads); + + // If the function has a return value, write it to the end of the argument array. + if(functionType->ret != ResultType::none) + { + auto llvmResultType = asLLVMType(functionType->ret); + irBuilder.CreateStore( + returnValue, + irBuilder.CreatePointerCast( + irBuilder.CreateInBoundsGEP(argBaseAddress,{emitLiteral((Uptr)functionType->parameters.size())}), + llvmResultType->getPointerTo() + ) + ); + } + + irBuilder.CreateRetVoid(); + + // Compile the invoke thunk. + auto jitUnit = new JITInvokeThunkUnit(functionType); + jitUnit->compile(llvmModule); + + assert(jitUnit->symbol); + invokeThunkTypeToSymbolMap[functionType] = jitUnit->symbol; + + { + Platform::Lock addressToSymbolMapLock(addressToSymbolMapMutex); + addressToSymbolMap[jitUnit->symbol->baseAddress + jitUnit->symbol->numBytes] = jitUnit->symbol; + } + + return reinterpret_cast(jitUnit->symbol->baseAddress); + } + + void init() + { + llvm::InitializeNativeTarget(); + llvm::InitializeNativeTargetAsmPrinter(); + llvm::InitializeNativeTargetAsmParser(); + llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr); + + auto targetTriple = llvm::sys::getProcessTriple(); + #ifdef __APPLE__ + // Didn't figure out exactly why, but this works around a problem with the MacOS dynamic loader. Without it, + // our symbols can't be found in the JITed object file. + targetTriple += "-elf"; + #endif + targetMachine = llvm::EngineBuilder().selectTarget(llvm::Triple(targetTriple),"","",llvm::SmallVector()); + + llvmI8Type = llvm::Type::getInt8Ty(context); + llvmI16Type = llvm::Type::getInt16Ty(context); + llvmI32Type = llvm::Type::getInt32Ty(context); + llvmI64Type = llvm::Type::getInt64Ty(context); + llvmF32Type = llvm::Type::getFloatTy(context); + llvmF64Type = llvm::Type::getDoubleTy(context); + llvmVoidType = llvm::Type::getVoidTy(context); + llvmBoolType = llvm::Type::getInt1Ty(context); + llvmI8PtrType = llvmI8Type->getPointerTo(); + + #if ENABLE_SIMD_PROTOTYPE + llvmI8x16Type = llvm::VectorType::get(llvmI8Type,16); + llvmI16x8Type = llvm::VectorType::get(llvmI16Type,8); + llvmI32x4Type = llvm::VectorType::get(llvmI32Type,4); + llvmI64x2Type = llvm::VectorType::get(llvmI64Type,2); + llvmF32x4Type = llvm::VectorType::get(llvmF32Type,4); + llvmF64x2Type = llvm::VectorType::get(llvmF64Type,2); + llvmB8x16Type = llvm::VectorType::get(llvmBoolType,16); + llvmB16x8Type = llvm::VectorType::get(llvmBoolType,8); + llvmB32x4Type = llvm::VectorType::get(llvmBoolType,4); + llvmB64x2Type = llvm::VectorType::get(llvmBoolType,2); + #endif + + llvmResultTypes[(Uptr)ResultType::none] = llvm::Type::getVoidTy(context); + llvmResultTypes[(Uptr)ResultType::i32] = llvmI32Type; + llvmResultTypes[(Uptr)ResultType::i64] = llvmI64Type; + llvmResultTypes[(Uptr)ResultType::f32] = llvmF32Type; + llvmResultTypes[(Uptr)ResultType::f64] = llvmF64Type; + + #if ENABLE_SIMD_PROTOTYPE + llvmResultTypes[(Uptr)ResultType::v128] = llvmI64x2Type; + #endif + + // Create zero constants of each type. + typedZeroConstants[(Uptr)ValueType::any] = nullptr; + typedZeroConstants[(Uptr)ValueType::i32] = emitLiteral((U32)0); + typedZeroConstants[(Uptr)ValueType::i64] = emitLiteral((U64)0); + typedZeroConstants[(Uptr)ValueType::f32] = emitLiteral((F32)0.0f); + typedZeroConstants[(Uptr)ValueType::f64] = emitLiteral((F64)0.0); + + #if ENABLE_SIMD_PROTOTYPE + typedZeroConstants[(Uptr)ValueType::v128] = llvm::ConstantVector::get({typedZeroConstants[(Uptr)ValueType::i64],typedZeroConstants[(Uptr)ValueType::i64]}); + #endif + } +} diff --git a/libraries/wasm-jit/Source/Runtime/LLVMJIT.h b/libraries/wasm-jit/Source/Runtime/LLVMJIT.h new file mode 100644 index 000000000..3d22067d0 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/LLVMJIT.h @@ -0,0 +1,134 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Platform/Platform.h" +#include "RuntimePrivate.h" +#include "Intrinsics.h" + +#ifdef _WIN32 + #pragma warning(push) + #pragma warning (disable:4267) + #pragma warning (disable:4800) + #pragma warning (disable:4291) + #pragma warning (disable:4244) + #pragma warning (disable:4351) + #pragma warning (disable:4065) + #pragma warning (disable:4624) + #pragma warning (disable:4245) // conversion from 'int' to 'unsigned int', signed/unsigned mismatch + #pragma warning(disable:4146) // unary minus operator applied to unsigned type, result is still unsigned + #pragma warning(disable:4458) // declaration of 'x' hides class member + #pragma warning(disable:4510) // default constructor could not be generated + #pragma warning(disable:4610) // struct can never be instantiated - user defined constructor required + #pragma warning(disable:4324) // structure was padded due to alignment specifier + #pragma warning(disable:4702) // unreachable code +#endif + +#include "llvm/Analysis/Passes.h" +#include "llvm/ExecutionEngine/ExecutionEngine.h" +#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" +#include "llvm/ExecutionEngine/Orc/CompileUtils.h" +#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" +#include "llvm/ExecutionEngine/Orc/LambdaResolver.h" +#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" +#include "llvm/IR/DataLayout.h" +#include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/LegacyPassManager.h" +#include "llvm/IR/Module.h" +#include "llvm/IR/Intrinsics.h" +#include "llvm/IR/Verifier.h" +#include "llvm/IR/ValueHandle.h" +#include "llvm/IR/DebugLoc.h" +#include "llvm/Object/ObjectFile.h" +#include "llvm/Object/SymbolSize.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/DataTypes.h" +#include "llvm/Support/TargetSelect.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/DynamicLibrary.h" +#include "llvm/Transforms/Scalar.h" +#include "llvm/IR/DIBuilder.h" +#include "llvm/DebugInfo/DIContext.h" +#include "llvm/DebugInfo/DWARF/DWARFContext.h" +#include +#include +#include + +#ifdef _WIN32 + #undef and + #undef or + #undef xor + #pragma warning(pop) +#endif + +namespace LLVMJIT +{ + // The global LLVM context. + extern llvm::LLVMContext context; + + // Maps a type ID to the corresponding LLVM type. + extern llvm::Type* llvmResultTypes[(Uptr)ResultType::num]; + extern llvm::Type* llvmI8Type; + extern llvm::Type* llvmI16Type; + extern llvm::Type* llvmI32Type; + extern llvm::Type* llvmI64Type; + extern llvm::Type* llvmF32Type; + extern llvm::Type* llvmF64Type; + extern llvm::Type* llvmVoidType; + extern llvm::Type* llvmBoolType; + extern llvm::Type* llvmI8PtrType; + + #if ENABLE_SIMD_PROTOTYPE + extern llvm::Type* llvmI8x16Type; + extern llvm::Type* llvmI16x8Type; + extern llvm::Type* llvmI32x4Type; + extern llvm::Type* llvmI64x2Type; + extern llvm::Type* llvmF32x4Type; + extern llvm::Type* llvmF64x2Type; + extern llvm::Type* llvmB8x16Type; + extern llvm::Type* llvmB16x8Type; + extern llvm::Type* llvmB32x4Type; + extern llvm::Type* llvmB64x2Type; + #endif + + // Zero constants of each type. + extern llvm::Constant* typedZeroConstants[(Uptr)ValueType::num]; + + // Converts a WebAssembly type to a LLVM type. + inline llvm::Type* asLLVMType(ValueType type) { return llvmResultTypes[(Uptr)asResultType(type)]; } + inline llvm::Type* asLLVMType(ResultType type) { return llvmResultTypes[(Uptr)type]; } + + // Converts a WebAssembly function type to a LLVM type. + inline llvm::FunctionType* asLLVMType(const FunctionType* functionType) + { + auto llvmArgTypes = (llvm::Type**)alloca(sizeof(llvm::Type*) * functionType->parameters.size()); + for(Uptr argIndex = 0;argIndex < functionType->parameters.size();++argIndex) + { + llvmArgTypes[argIndex] = asLLVMType(functionType->parameters[argIndex]); + } + auto llvmResultType = asLLVMType(functionType->ret); + return llvm::FunctionType::get(llvmResultType,llvm::ArrayRef(llvmArgTypes,functionType->parameters.size()),false); + } + + // Overloaded functions that compile a literal value to a LLVM constant of the right type. + inline llvm::ConstantInt* emitLiteral(U32 value) { return (llvm::ConstantInt*)llvm::ConstantInt::get(llvmI32Type,llvm::APInt(32,(U64)value,false)); } + inline llvm::ConstantInt* emitLiteral(I32 value) { return (llvm::ConstantInt*)llvm::ConstantInt::get(llvmI32Type,llvm::APInt(32,(I64)value,false)); } + inline llvm::ConstantInt* emitLiteral(U64 value) { return (llvm::ConstantInt*)llvm::ConstantInt::get(llvmI64Type,llvm::APInt(64,value,false)); } + inline llvm::ConstantInt* emitLiteral(I64 value) { return (llvm::ConstantInt*)llvm::ConstantInt::get(llvmI64Type,llvm::APInt(64,value,false)); } + inline llvm::Constant* emitLiteral(F32 value) { return llvm::ConstantFP::get(context,llvm::APFloat(value)); } + inline llvm::Constant* emitLiteral(F64 value) { return llvm::ConstantFP::get(context,llvm::APFloat(value)); } + inline llvm::Constant* emitLiteral(bool value) { return llvm::ConstantInt::get(llvmBoolType,llvm::APInt(1,value ? 1 : 0,false)); } + inline llvm::Constant* emitLiteralPointer(const void* pointer,llvm::Type* type) + { + auto pointerInt = llvm::APInt(sizeof(Uptr) == 8 ? 64 : 32,reinterpret_cast(pointer)); + return llvm::Constant::getIntegerValue(type,pointerInt); + } + + // Functions that map between the symbols used for externally visible functions and the function + std::string getExternalFunctionName(ModuleInstance* moduleInstance,Uptr functionDefIndex); + bool getFunctionIndexFromExternalName(const char* externalName,Uptr& outFunctionDefIndex); + + // Emits LLVM IR for a module. + llvm::Module* emitModule(const IR::Module& module,ModuleInstance* moduleInstance); +} diff --git a/libraries/wasm-jit/Source/Runtime/Linker.cpp b/libraries/wasm-jit/Source/Runtime/Linker.cpp new file mode 100644 index 000000000..c4f2d05a4 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Linker.cpp @@ -0,0 +1,69 @@ +#include "Inline/BasicTypes.h" +#include "Runtime.h" +#include "Platform/Platform.h" +#include "RuntimePrivate.h" +#include "Linker.h" +#include "Intrinsics.h" +#include "IR/Module.h" + +#include + +namespace Runtime +{ + RUNTIME_API IntrinsicResolver IntrinsicResolver::singleton; + + bool IntrinsicResolver::resolve(const std::string& moduleName,const std::string& exportName,ObjectType type,ObjectInstance*& outObject) + { + // Make sure the wavmIntrinsics module can't be directly imported. + if(moduleName == "wavmIntrinsics") { return false; } + + outObject = Intrinsics::find(moduleName + "." + exportName,type); + return outObject != nullptr; + } + + const FunctionType* resolveImportType(const IR::Module& module,IndexedFunctionType type) + { + return module.types[type.index]; + } + TableType resolveImportType(const IR::Module& module,TableType type) { return type; } + MemoryType resolveImportType(const IR::Module& module,MemoryType type) { return type; } + GlobalType resolveImportType(const IR::Module& module,GlobalType type) { return type; } + + template + void linkImport(const IR::Module& module,const Import& import,Resolver& resolver,LinkResult& linkResult,std::vector& resolvedImports) + { + // Ask the resolver for a value for this import. + ObjectInstance* importValue; + if(resolver.resolve(import.moduleName,import.exportName,resolveImportType(module,import.type),importValue)) + { + // Sanity check that the resolver returned an object of the right type. + assert(isA(importValue,resolveImportType(module,import.type))); + resolvedImports.push_back(as(importValue)); + } + else { linkResult.missingImports.push_back({import.moduleName,import.exportName,resolveImportType(module,import.type)}); } + } + + LinkResult linkModule(const IR::Module& module,Resolver& resolver) + { + LinkResult linkResult; + for(const auto& import : module.functions.imports) + { + linkImport(module,import,resolver,linkResult,linkResult.resolvedImports.functions); + } + for(const auto& import : module.tables.imports) + { + linkImport(module,import,resolver,linkResult,linkResult.resolvedImports.tables); + } + for(const auto& import : module.memories.imports) + { + linkImport(module,import,resolver,linkResult,linkResult.resolvedImports.memories); + } + for(const auto& import : module.globals.imports) + { + linkImport(module,import,resolver,linkResult,linkResult.resolvedImports.globals); + } + + linkResult.success = linkResult.missingImports.size() == 0; + return linkResult; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/Memory.cpp b/libraries/wasm-jit/Source/Runtime/Memory.cpp new file mode 100644 index 000000000..99097e9c9 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Memory.cpp @@ -0,0 +1,144 @@ +#include "Inline/BasicTypes.h" +#include "Runtime.h" +#include "Platform/Platform.h" +#include "RuntimePrivate.h" + +namespace Runtime +{ + // Global lists of memories; used to query whether an address is reserved by one of them. + std::vector memories; + + static Uptr getPlatformPagesPerWebAssemblyPageLog2() + { + errorUnless(Platform::getPageSizeLog2() <= IR::numBytesPerPageLog2); + return IR::numBytesPerPageLog2 - Platform::getPageSizeLog2(); + } + + U8* allocateVirtualPagesAligned(Uptr numBytes,Uptr alignmentBytes,U8*& outUnalignedBaseAddress,Uptr& outUnalignedNumPlatformPages) + { + const Uptr numAllocatedVirtualPages = numBytes >> Platform::getPageSizeLog2(); + const Uptr alignmentPages = alignmentBytes >> Platform::getPageSizeLog2(); + outUnalignedNumPlatformPages = numAllocatedVirtualPages + alignmentPages; + outUnalignedBaseAddress = Platform::allocateVirtualPages(outUnalignedNumPlatformPages); + if(!outUnalignedBaseAddress) { return nullptr; } + else { return (U8*)((Uptr)(outUnalignedBaseAddress + alignmentBytes - 1) & ~(alignmentBytes - 1)); } + } + + MemoryInstance* createMemory(MemoryType type) + { + MemoryInstance* memory = new MemoryInstance(type); + + // On a 64-bit runtime, allocate 8GB of address space for the memory. + // This allows eliding bounds checks on memory accesses, since a 32-bit index + 32-bit offset will always be within the reserved address-space. + // On a 32-bit runtime, allocate 1GB. + const Uptr memoryMaxBytes = HAS_64BIT_ADDRESS_SPACE ? 8ull*1024*1024*1024 : 0x40000000; + + // On a 64 bit runtime, align the instance memory base to a 4GB boundary, so the lower 32-bits will all be zero. Maybe it will allow better code generation? + // Note that this reserves a full extra 4GB, but only uses (4GB-1 page) for alignment, so there will always be a guard page at the end to + // protect against unaligned loads/stores that straddle the end of the address-space. + const Uptr alignmentBytes = HAS_64BIT_ADDRESS_SPACE ? 4ull*1024*1024*1024 : ((Uptr)1 << Platform::getPageSizeLog2()); + memory->baseAddress = allocateVirtualPagesAligned(memoryMaxBytes,alignmentBytes,memory->reservedBaseAddress,memory->reservedNumPlatformPages); + memory->endOffset = memoryMaxBytes; + if(!memory->baseAddress) { delete memory; return nullptr; } + + // Grow the memory to the type's minimum size. + if(growMemory(memory,type.size.min) == -1) { delete memory; return nullptr; } + + // Add the memory to the global array. + memories.push_back(memory); + return memory; + } + + MemoryInstance::~MemoryInstance() + { + // Decommit all default memory pages. + if(numPages > 0) { Platform::decommitVirtualPages(baseAddress,numPages << getPlatformPagesPerWebAssemblyPageLog2()); } + + // Free the virtual address space. + if(reservedNumPlatformPages > 0) { Platform::freeVirtualPages(reservedBaseAddress,reservedNumPlatformPages); } + reservedBaseAddress = baseAddress = nullptr; + reservedNumPlatformPages = 0; + + // Remove the memory from the global array. + for(Uptr memoryIndex = 0;memoryIndex < memories.size();++memoryIndex) + { + if(memories[memoryIndex] == this) { memories.erase(memories.begin() + memoryIndex); break; } + } + } + + bool isAddressOwnedByMemory(U8* address) + { + // Iterate over all memories and check if the address is within the reserved address space for each. + for(auto memory : memories) + { + U8* startAddress = memory->reservedBaseAddress; + U8* endAddress = memory->reservedBaseAddress + (memory->reservedNumPlatformPages << Platform::getPageSizeLog2()); + if(address >= startAddress && address < endAddress) { return true; } + } + return false; + } + + Uptr getMemoryNumPages(MemoryInstance* memory) { return memory->numPages; } + Uptr getMemoryMaxPages(MemoryInstance* memory) { return memory->type.size.max; } + + Iptr growMemory(MemoryInstance* memory,Uptr numNewPages) + { + const Uptr previousNumPages = memory->numPages; + if(numNewPages > 0) + { + // If the number of pages to grow would cause the memory's size to exceed its maximum, return -1. + if(numNewPages > memory->type.size.max || memory->numPages > memory->type.size.max - numNewPages) { return -1; } + + // Try to commit the new pages, and return -1 if the commit fails. + if(!Platform::commitVirtualPages( + memory->baseAddress + (memory->numPages << IR::numBytesPerPageLog2), + numNewPages << getPlatformPagesPerWebAssemblyPageLog2() + )) + { + return -1; + } + memory->numPages += numNewPages; + } + return previousNumPages; + } + + Iptr shrinkMemory(MemoryInstance* memory,Uptr numPagesToShrink) + { + const Uptr previousNumPages = memory->numPages; + if(numPagesToShrink > 0) + { + // If the number of pages to shrink would cause the memory's size to drop below its minimum, return -1. + if(numPagesToShrink > memory->numPages + || memory->numPages - numPagesToShrink < memory->type.size.min) + { return -1; } + memory->numPages -= numPagesToShrink; + + // Decommit the pages that were shrunk off the end of the memory. + Platform::decommitVirtualPages( + memory->baseAddress + (memory->numPages << IR::numBytesPerPageLog2), + numPagesToShrink << getPlatformPagesPerWebAssemblyPageLog2() + ); + } + return previousNumPages; + } + + U8* getMemoryBaseAddress(MemoryInstance* memory) + { + return memory->baseAddress; + } + + U8* getValidatedMemoryOffsetRange(MemoryInstance* memory,Uptr offset,Uptr numBytes) + { + // Validate that the range [offset..offset+numBytes) is contained by the memory's reserved pages. + U8* address = memory->baseAddress + offset; + if( !memory + || address < memory->reservedBaseAddress + || address + numBytes < address + || address + numBytes >= memory->reservedBaseAddress + (memory->reservedNumPlatformPages << Platform::getPageSizeLog2())) + { + causeException(Exception::Cause::accessViolation); + } + return address; + } + +} diff --git a/libraries/wasm-jit/Source/Runtime/ModuleInstance.cpp b/libraries/wasm-jit/Source/Runtime/ModuleInstance.cpp new file mode 100644 index 000000000..84601310e --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/ModuleInstance.cpp @@ -0,0 +1,207 @@ +#include "Inline/BasicTypes.h" +#include "Runtime.h" +#include "RuntimePrivate.h" +#include "IR/Module.h" + +#include + +namespace Runtime +{ + std::vector moduleInstances; + + Value evaluateInitializer(ModuleInstance* moduleInstance,InitializerExpression expression) + { + switch(expression.type) + { + case InitializerExpression::Type::i32_const: return expression.i32; + case InitializerExpression::Type::i64_const: return expression.i64; + case InitializerExpression::Type::f32_const: return expression.f32; + case InitializerExpression::Type::f64_const: return expression.f64; + case InitializerExpression::Type::get_global: + { + // Find the import this refers to. + errorUnless(expression.globalIndex < moduleInstance->globals.size()); + GlobalInstance* globalInstance = moduleInstance->globals[expression.globalIndex]; + return Runtime::Value(globalInstance->type.valueType,globalInstance->value); + } + default: Errors::unreachable(); + }; + } + + ModuleInstance* instantiateModule(const IR::Module& module,ImportBindings&& imports) + { + ModuleInstance* moduleInstance = new ModuleInstance( + std::move(imports.functions), + std::move(imports.tables), + std::move(imports.memories), + std::move(imports.globals) + ); + + // Get disassembly names for the module's objects. + DisassemblyNames disassemblyNames; + IR::getDisassemblyNames(module,disassemblyNames); + + // Check the type of the ModuleInstance's imports. + errorUnless(moduleInstance->functions.size() == module.functions.imports.size()); + for(Uptr importIndex = 0;importIndex < module.functions.imports.size();++importIndex) + { + errorUnless(isA(moduleInstance->functions[importIndex],module.types[module.functions.imports[importIndex].type.index])); + } + errorUnless(moduleInstance->tables.size() == module.tables.imports.size()); + for(Uptr importIndex = 0;importIndex < module.tables.imports.size();++importIndex) + { + errorUnless(isA(moduleInstance->tables[importIndex],module.tables.imports[importIndex].type)); + } + errorUnless(moduleInstance->memories.size() == module.memories.imports.size()); + for(Uptr importIndex = 0;importIndex < module.memories.imports.size();++importIndex) + { + errorUnless(isA(moduleInstance->memories[importIndex],module.memories.imports[importIndex].type)); + } + errorUnless(moduleInstance->globals.size() == module.globals.imports.size()); + for(Uptr importIndex = 0;importIndex < module.globals.imports.size();++importIndex) + { + errorUnless(isA(moduleInstance->globals[importIndex],module.globals.imports[importIndex].type)); + } + + // Instantiate the module's memory and table definitions. + for(const TableDef& tableDef : module.tables.defs) + { + auto table = createTable(tableDef.type); + if(!table) { causeException(Exception::Cause::outOfMemory); } + moduleInstance->tables.push_back(table); + } + for(const MemoryDef& memoryDef : module.memories.defs) + { + auto memory = createMemory(memoryDef.type); + if(!memory) { causeException(Exception::Cause::outOfMemory); } + moduleInstance->memories.push_back(memory); + } + + // Find the default memory and table for the module. + if(moduleInstance->memories.size() != 0) + { + assert(moduleInstance->memories.size() == 1); + moduleInstance->defaultMemory = moduleInstance->memories[0]; + } + if(moduleInstance->tables.size() != 0) + { + assert(moduleInstance->tables.size() == 1); + moduleInstance->defaultTable = moduleInstance->tables[0]; + } + + // If any memory or table segment doesn't fit, throw an exception before mutating any memory/table. + for(auto& tableSegment : module.tableSegments) + { + TableInstance* table = moduleInstance->tables[tableSegment.tableIndex]; + const Value baseOffsetValue = evaluateInitializer(moduleInstance,tableSegment.baseOffset); + errorUnless(baseOffsetValue.type == ValueType::i32); + const U32 baseOffset = baseOffsetValue.i32; + if(baseOffset + tableSegment.indices.size() > table->elements.size()) + { causeException(Exception::Cause::invalidSegmentOffset); } + } + for(auto& dataSegment : module.dataSegments) + { + MemoryInstance* memory = moduleInstance->memories[dataSegment.memoryIndex]; + + const Value baseOffsetValue = evaluateInitializer(moduleInstance,dataSegment.baseOffset); + errorUnless(baseOffsetValue.type == ValueType::i32); + const U32 baseOffset = baseOffsetValue.i32; + if(baseOffset + dataSegment.data.size() > (memory->numPages << IR::numBytesPerPageLog2)) + { causeException(Exception::Cause::invalidSegmentOffset); } + } + + // Copy the module's data segments into the module's default memory. + for(const DataSegment& dataSegment : module.dataSegments) + { + MemoryInstance* memory = moduleInstance->memories[dataSegment.memoryIndex]; + + const Value baseOffsetValue = evaluateInitializer(moduleInstance,dataSegment.baseOffset); + errorUnless(baseOffsetValue.type == ValueType::i32); + const U32 baseOffset = baseOffsetValue.i32; + + assert(baseOffset + dataSegment.data.size() <= (memory->numPages << IR::numBytesPerPageLog2)); + + memcpy(memory->baseAddress + baseOffset,dataSegment.data.data(),dataSegment.data.size()); + } + + // Instantiate the module's global definitions. + for(const GlobalDef& globalDef : module.globals.defs) + { + const Value initialValue = evaluateInitializer(moduleInstance,globalDef.initializer); + errorUnless(initialValue.type == globalDef.type.valueType); + moduleInstance->globals.push_back(new GlobalInstance(globalDef.type,initialValue)); + } + + // Create the FunctionInstance objects for the module's function definitions. + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { + const Uptr functionIndex = moduleInstance->functions.size(); + const DisassemblyNames::Function& functionNames = disassemblyNames.functions[functionIndex]; + std::string debugName = functionNames.name; + if(!debugName.size()) { debugName = ""; } + auto functionInstance = new FunctionInstance(moduleInstance,module.types[module.functions.defs[functionDefIndex].type.index],nullptr,debugName.c_str()); + moduleInstance->functionDefs.push_back(functionInstance); + moduleInstance->functions.push_back(functionInstance); + } + + // Generate machine code for the module. + LLVMJIT::instantiateModule(module,moduleInstance); + + // Set up the instance's exports. + for(const Export& exportIt : module.exports) + { + ObjectInstance* exportedObject = nullptr; + switch(exportIt.kind) + { + case ObjectKind::function: exportedObject = moduleInstance->functions[exportIt.index]; break; + case ObjectKind::table: exportedObject = moduleInstance->tables[exportIt.index]; break; + case ObjectKind::memory: exportedObject = moduleInstance->memories[exportIt.index]; break; + case ObjectKind::global: exportedObject = moduleInstance->globals[exportIt.index]; break; + default: Errors::unreachable(); + } + moduleInstance->exportMap[exportIt.name] = exportedObject; + } + + // Copy the module's table segments into the module's default table. + for(const TableSegment& tableSegment : module.tableSegments) + { + TableInstance* table = moduleInstance->tables[tableSegment.tableIndex]; + + const Value baseOffsetValue = evaluateInitializer(moduleInstance,tableSegment.baseOffset); + errorUnless(baseOffsetValue.type == ValueType::i32); + const U32 baseOffset = baseOffsetValue.i32; + assert(baseOffset + tableSegment.indices.size() <= table->elements.size()); + + for(Uptr index = 0;index < tableSegment.indices.size();++index) + { + const Uptr functionIndex = tableSegment.indices[index]; + assert(functionIndex < moduleInstance->functions.size()); + setTableElement(table,baseOffset + index,moduleInstance->functions[functionIndex]); + } + } + + // Call the module's start function. + if(module.startFunctionIndex != UINTPTR_MAX) + { + assert(moduleInstance->functions[module.startFunctionIndex]->type == IR::FunctionType::get()); + invokeFunction(moduleInstance->functions[module.startFunctionIndex],{}); + } + + moduleInstances.push_back(moduleInstance); + return moduleInstance; + } + + ModuleInstance::~ModuleInstance() + { + delete jitModule; + } + + MemoryInstance* getDefaultMemory(ModuleInstance* moduleInstance) { return moduleInstance->defaultMemory; } + TableInstance* getDefaultTable(ModuleInstance* moduleInstance) { return moduleInstance->defaultTable; } + + ObjectInstance* getInstanceExport(ModuleInstance* moduleInstance,const std::string& name) + { + auto mapIt = moduleInstance->exportMap.find(name); + return mapIt == moduleInstance->exportMap.end() ? nullptr : mapIt->second; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/ObjectGC.cpp b/libraries/wasm-jit/Source/Runtime/ObjectGC.cpp new file mode 100644 index 000000000..7c099e616 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/ObjectGC.cpp @@ -0,0 +1,130 @@ +#include "Inline/BasicTypes.h" +#include "Runtime.h" +#include "RuntimePrivate.h" +#include "Intrinsics.h" + +#include +#include + +namespace Runtime +{ + // Keep a global list of all objects. + struct GCGlobals + { + std::set allObjects; + + static GCGlobals& get() + { + static GCGlobals globals; + return globals; + } + + private: + GCGlobals() {} + }; + + GCObject::GCObject(ObjectKind inKind): ObjectInstance(inKind) + { + // Add the object to the global array. + GCGlobals::get().allObjects.insert(this); + } + + GCObject::~GCObject() + { + // Remove the object from the global array. + GCGlobals::get().allObjects.erase(this); + } + + void freeUnreferencedObjects(std::vector&& rootObjectReferences) + { + std::set referencedObjects; + std::vector pendingScanObjects; + + // Gather GC roots from running WASM threads. + getThreadGCRoots(rootObjectReferences); + + // Initialize the referencedObjects set from the rootObjectReferences and intrinsic objects. + for(auto object : rootObjectReferences) + { + if(object && !referencedObjects.count(object)) + { + referencedObjects.insert(object); + pendingScanObjects.push_back(object); + } + } + + const std::vector intrinsicObjects = Intrinsics::getAllIntrinsicObjects(); + for(auto object : intrinsicObjects) + { + if(object && !referencedObjects.count(object)) + { + referencedObjects.insert(object); + pendingScanObjects.push_back(object); + } + } + + // Scan the objects added to the referenced set so far: gather their child references and recurse. + while(pendingScanObjects.size()) + { + ObjectInstance* scanObject = pendingScanObjects.back(); + pendingScanObjects.pop_back(); + + // Gather the child references for this object based on its kind. + std::vector childReferences; + switch(scanObject->kind) + { + case ObjectKind::function: + { + FunctionInstance* function = asFunction(scanObject); + childReferences.push_back(function->moduleInstance); + break; + } + case ObjectKind::module: + { + ModuleInstance* moduleInstance = asModule(scanObject); + childReferences.insert(childReferences.begin(),moduleInstance->functionDefs.begin(),moduleInstance->functionDefs.end()); + childReferences.insert(childReferences.begin(),moduleInstance->functions.begin(),moduleInstance->functions.end()); + childReferences.insert(childReferences.begin(),moduleInstance->tables.begin(),moduleInstance->tables.end()); + childReferences.insert(childReferences.begin(),moduleInstance->memories.begin(),moduleInstance->memories.end()); + childReferences.insert(childReferences.begin(),moduleInstance->globals.begin(),moduleInstance->globals.end()); + childReferences.push_back(moduleInstance->defaultMemory); + childReferences.push_back(moduleInstance->defaultTable); + break; + } + case ObjectKind::table: + { + TableInstance* table = asTable(scanObject); + childReferences.insert(childReferences.end(),table->elements.begin(),table->elements.end()); + break; + } + case ObjectKind::memory: + case ObjectKind::global: break; + default: Errors::unreachable(); + }; + + // Add the object's child references to the referenced set, and enqueue them for scanning. + for(auto reference : childReferences) + { + if(reference && !referencedObjects.count(reference)) + { + referencedObjects.insert(reference); + pendingScanObjects.push_back(reference); + } + } + }; + + // Iterate over all objects, and delete objects that weren't referenced directly or indirectly by the root set. + GCGlobals& gcGlobals = GCGlobals::get(); + auto objectIt = gcGlobals.allObjects.begin(); + while(objectIt != gcGlobals.allObjects.end()) + { + if(referencedObjects.count(*objectIt)) { ++objectIt; } + else + { + ObjectInstance* object = *objectIt; + objectIt = gcGlobals.allObjects.erase(objectIt); + delete object; + } + } + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/Runtime.cpp b/libraries/wasm-jit/Source/Runtime/Runtime.cpp new file mode 100644 index 000000000..ed859f458 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Runtime.cpp @@ -0,0 +1,151 @@ +#include "Inline/BasicTypes.h" +#include "Platform/Platform.h" +#include "Logging/Logging.h" +#include "Runtime.h" +#include "RuntimePrivate.h" + +namespace Runtime +{ + void init() + { + LLVMJIT::init(); + initWAVMIntrinsics(); + } + + // Returns a vector of strings, each element describing a frame of the call stack. + // If the frame is a JITed function, use the JIT's information about the function + // to describe it, otherwise fallback to whatever platform-specific symbol resolution + // is available. + std::vector describeCallStack(const Platform::CallStack& callStack) + { + std::vector frameDescriptions; + for(auto frame : callStack.stackFrames) + { + std::string frameDescription; + if( LLVMJIT::describeInstructionPointer(frame.ip,frameDescription) + || Platform::describeInstructionPointer(frame.ip,frameDescription)) + { + frameDescriptions.push_back(frameDescription); + } + else { frameDescriptions.push_back(""); } + } + return frameDescriptions; + } + + [[noreturn]] void causeException(Exception::Cause cause) + { + auto callStack = Platform::captureCallStack(); + throw Exception {cause,describeCallStack(callStack)}; + } + + bool isA(ObjectInstance* object,const ObjectType& type) + { + if(type.kind != object->kind) { return false; } + + switch(type.kind) + { + case ObjectKind::function: return asFunctionType(type) == asFunction(object)->type; + case ObjectKind::global: return asGlobalType(type) == asGlobal(object)->type; + case ObjectKind::table: return isSubset(asTableType(type),asTable(object)->type); + case ObjectKind::memory: return isSubset(asMemoryType(type),asMemory(object)->type); + default: Errors::unreachable(); + } + } + + [[noreturn]] void handleHardwareTrap(Platform::HardwareTrapType trapType,Platform::CallStack&& trapCallStack,Uptr trapOperand) + { + std::vector callStackDescription = describeCallStack(trapCallStack); + + switch(trapType) + { + case Platform::HardwareTrapType::accessViolation: + { + // If the access violation occured in a Table's reserved pages, treat it as an undefined table element runtime error. + if(isAddressOwnedByTable(reinterpret_cast(trapOperand))) { throw Exception { Exception::Cause::undefinedTableElement, callStackDescription }; } + // If the access violation occured in a Memory's reserved pages, treat it as an access violation runtime error. + else if(isAddressOwnedByMemory(reinterpret_cast(trapOperand))) { throw Exception { Exception::Cause::accessViolation, callStackDescription }; } + else + { + // If the access violation occured outside of a Table or Memory, treat it as a bug (possibly a security hole) + // rather than a runtime error in the WebAssembly code. + Log::printf(Log::Category::error,"Access violation outside of table or memory reserved addresses. Call stack:\n"); + for(auto calledFunction : callStackDescription) { Log::printf(Log::Category::error," %s\n",calledFunction.c_str()); } + Errors::fatalf("unsandboxed access violation"); + } + } + case Platform::HardwareTrapType::stackOverflow: throw Exception { Exception::Cause::stackOverflow, callStackDescription }; + case Platform::HardwareTrapType::intDivideByZeroOrOverflow: throw Exception { Exception::Cause::integerDivideByZeroOrIntegerOverflow, callStackDescription }; + default: Errors::unreachable(); + }; + } + + Result invokeFunction(FunctionInstance* function,const std::vector& parameters) + { + const FunctionType* functionType = function->type; + + // Check that the parameter types match the function, and copy them into a memory block that stores each as a 64-bit value. + if(parameters.size() != functionType->parameters.size()) + { throw Exception {Exception::Cause::invokeSignatureMismatch}; } + + U64* thunkMemory = (U64*)alloca((functionType->parameters.size() + getArity(functionType->ret)) * sizeof(U64)); + for(Uptr parameterIndex = 0;parameterIndex < functionType->parameters.size();++parameterIndex) + { + if(functionType->parameters[parameterIndex] != parameters[parameterIndex].type) + { + throw Exception {Exception::Cause::invokeSignatureMismatch}; + } + + thunkMemory[parameterIndex] = parameters[parameterIndex].i64; + } + + // Get the invoke thunk for this function type. + LLVMJIT::InvokeFunctionPointer invokeFunctionPointer = LLVMJIT::getInvokeThunk(functionType); + + // Catch platform-specific runtime exceptions and turn them into Runtime::Values. + Result result; + Platform::HardwareTrapType trapType; + Platform::CallStack trapCallStack; + Uptr trapOperand; + trapType = Platform::catchHardwareTraps(trapCallStack,trapOperand, + [&] + { + // Call the invoke thunk. + (*invokeFunctionPointer)(function->nativeFunction,thunkMemory); + + // Read the return value out of the thunk memory block. + if(functionType->ret != ResultType::none) + { + result.type = functionType->ret; + result.i64 = thunkMemory[functionType->parameters.size()]; + } + }); + + // If there was no hardware trap, just return the result. + if(trapType == Platform::HardwareTrapType::none) { return result; } + else { handleHardwareTrap(trapType,std::move(trapCallStack),trapOperand); } + } + + const FunctionType* getFunctionType(FunctionInstance* function) + { + return function->type; + } + + GlobalInstance* createGlobal(GlobalType type,Value initialValue) + { + return new GlobalInstance(type,initialValue); + } + + Value getGlobalValue(GlobalInstance* global) + { + return Value(global->type.valueType,global->value); + } + + Value setGlobalValue(GlobalInstance* global,Value newValue) + { + assert(newValue.type == global->type.valueType); + assert(global->type.isMutable); + const Value previousValue = Value(global->type.valueType,global->value); + global->value = newValue; + return previousValue; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/RuntimePrivate.h b/libraries/wasm-jit/Source/Runtime/RuntimePrivate.h new file mode 100644 index 000000000..72a1ab540 --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/RuntimePrivate.h @@ -0,0 +1,156 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Platform/Platform.h" +#include "Runtime.h" + +#include +#include +#include + +#define HAS_64BIT_ADDRESS_SPACE (sizeof(Uptr) == 8 && !PRETEND_32BIT_ADDRESS_SPACE) + +namespace LLVMJIT +{ + using namespace Runtime; + + struct JITModuleBase + { + virtual ~JITModuleBase() {} + }; + + void init(); + void instantiateModule(const IR::Module& module,Runtime::ModuleInstance* moduleInstance); + bool describeInstructionPointer(Uptr ip,std::string& outDescription); + + typedef void (*InvokeFunctionPointer)(void*,U64*); + + // Generates an invoke thunk for a specific function type. + InvokeFunctionPointer getInvokeThunk(const IR::FunctionType* functionType); +} + +namespace Runtime +{ + using namespace IR; + + // A private root for all runtime objects that handles garbage collection. + struct GCObject : ObjectInstance + { + GCObject(ObjectKind inKind); + ~GCObject() override; + }; + + // An instance of a function: a function defined in an instantiated module, or an intrinsic function. + struct FunctionInstance : GCObject + { + ModuleInstance* moduleInstance; + const FunctionType* type; + void* nativeFunction; + std::string debugName; + + FunctionInstance(ModuleInstance* inModuleInstance,const FunctionType* inType,void* inNativeFunction = nullptr,const char* inDebugName = "") + : GCObject(ObjectKind::function), moduleInstance(inModuleInstance), type(inType), nativeFunction(inNativeFunction), debugName(inDebugName) {} + }; + + // An instance of a WebAssembly Table. + struct TableInstance : GCObject + { + struct FunctionElement + { + const FunctionType* type; + void* value; + }; + + TableType type; + + FunctionElement* baseAddress; + Uptr endOffset; + + U8* reservedBaseAddress; + Uptr reservedNumPlatformPages; + + // The Objects corresponding to the FunctionElements at baseAddress. + std::vector elements; + + TableInstance(const TableType& inType): GCObject(ObjectKind::table), type(inType), baseAddress(nullptr), endOffset(0), reservedBaseAddress(nullptr), reservedNumPlatformPages(0) {} + ~TableInstance() override; + }; + + // An instance of a WebAssembly Memory. + struct MemoryInstance : GCObject + { + MemoryType type; + + U8* baseAddress; + std::atomic numPages; + Uptr endOffset; + + U8* reservedBaseAddress; + Uptr reservedNumPlatformPages; + + MemoryInstance(const MemoryType& inType): GCObject(ObjectKind::memory), type(inType), baseAddress(nullptr), numPages(0), endOffset(0), reservedBaseAddress(nullptr), reservedNumPlatformPages(0) {} + ~MemoryInstance() override; + }; + + // An instance of a WebAssembly global. + struct GlobalInstance : GCObject + { + GlobalType type; + UntaggedValue value; + + GlobalInstance(GlobalType inType,UntaggedValue inValue): GCObject(ObjectKind::global), type(inType), value(inValue) {} + }; + + // An instance of a WebAssembly module. + struct ModuleInstance : GCObject + { + std::map exportMap; + + std::vector functionDefs; + + std::vector functions; + std::vector tables; + std::vector memories; + std::vector globals; + + MemoryInstance* defaultMemory; + TableInstance* defaultTable; + + LLVMJIT::JITModuleBase* jitModule; + + ModuleInstance( + std::vector&& inFunctionImports, + std::vector&& inTableImports, + std::vector&& inMemoryImports, + std::vector&& inGlobalImports + ) + : GCObject(ObjectKind::module) + , functions(inFunctionImports) + , tables(inTableImports) + , memories(inMemoryImports) + , globals(inGlobalImports) + , defaultMemory(nullptr) + , defaultTable(nullptr) + , jitModule(nullptr) + {} + + ~ModuleInstance() override; + }; + + // Initializes global state used by the WAVM intrinsics. + void initWAVMIntrinsics(); + + // Checks whether an address is owned by a table or memory. + bool isAddressOwnedByTable(U8* address); + bool isAddressOwnedByMemory(U8* address); + + // Allocates virtual pages with alignBytes of padding, and returns an aligned base address. + // The unaligned allocation address and size are written to outUnalignedBaseAddress and outUnalignedNumPlatformPages. + U8* allocateVirtualPagesAligned(Uptr numBytes,Uptr alignmentBytes,U8*& outUnalignedBaseAddress,Uptr& outUnalignedNumPlatformPages); + + // Turns a hardware trap that occurred in WASM code into a runtime exception or fatal error. + [[noreturn]] void handleHardwareTrap(Platform::HardwareTrapType trapType,Platform::CallStack&& trapCallStack,Uptr trapOperand); + + // Adds GC roots from WASM threads to the provided array. + void getThreadGCRoots(std::vector& outGCRoots); +} diff --git a/libraries/wasm-jit/Source/Runtime/Table.cpp b/libraries/wasm-jit/Source/Runtime/Table.cpp new file mode 100644 index 000000000..03761122d --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Table.cpp @@ -0,0 +1,138 @@ +#include "Inline/BasicTypes.h" +#include "Runtime.h" +#include "Platform/Platform.h" +#include "RuntimePrivate.h" + +namespace Runtime +{ + // Global lists of tables; used to query whether an address is reserved by one of them. + std::vector tables; + + static Uptr getNumPlatformPages(Uptr numBytes) + { + return (numBytes + (Uptr(1)<> Platform::getPageSizeLog2(); + } + + TableInstance* createTable(TableType type) + { + TableInstance* table = new TableInstance(type); + + // In 64-bit, allocate enough address-space to safely access 32-bit table indices without bounds checking, or 16MB (4M elements) if the host is 32-bit. + const Uptr tableMaxBytes = HAS_64BIT_ADDRESS_SPACE ? (sizeof(TableInstance::FunctionElement) << 32) : 16*1024*1024; + + // On a 64 bit runtime, align the table base to a 4GB boundary, so the lower 32-bits will all be zero. Maybe it will allow better code generation? + // Note that this reserves a full extra 4GB, but only uses (4GB-1 page) for alignment, so there will always be a guard page at the end to + // protect against unaligned loads/stores that straddle the end of the address-space. + const Uptr alignmentBytes = HAS_64BIT_ADDRESS_SPACE ? 4ull*1024*1024*1024 : (Uptr(1) << Platform::getPageSizeLog2()); + table->baseAddress = (TableInstance::FunctionElement*)allocateVirtualPagesAligned(tableMaxBytes,alignmentBytes,table->reservedBaseAddress,table->reservedNumPlatformPages); + table->endOffset = tableMaxBytes; + if(!table->baseAddress) { delete table; return nullptr; } + + // Grow the table to the type's minimum size. + if(growTable(table,type.size.min) == -1) { delete table; return nullptr; } + + // Add the table to the global array. + tables.push_back(table); + return table; + } + + TableInstance::~TableInstance() + { + // Decommit all pages. + if(elements.size() > 0) { Platform::decommitVirtualPages((U8*)baseAddress,getNumPlatformPages(elements.size() * sizeof(TableInstance::FunctionElement))); } + + // Free the virtual address space. + if(reservedNumPlatformPages > 0) { Platform::freeVirtualPages((U8*)reservedBaseAddress,reservedNumPlatformPages); } + reservedBaseAddress = nullptr; + reservedNumPlatformPages = 0; + baseAddress = nullptr; + + // Remove the table from the global array. + for(Uptr tableIndex = 0;tableIndex < tables.size();++tableIndex) + { + if(tables[tableIndex] == this) { tables.erase(tables.begin() + tableIndex); break; } + } + } + + bool isAddressOwnedByTable(U8* address) + { + // Iterate over all tables and check if the address is within the reserved address space for each. + for(auto table : tables) + { + U8* startAddress = (U8*)table->reservedBaseAddress; + U8* endAddress = ((U8*)table->reservedBaseAddress) + (table->reservedNumPlatformPages << Platform::getPageSizeLog2()); + if(address >= startAddress && address < endAddress) { return true; } + } + return false; + } + + ObjectInstance* setTableElement(TableInstance* table,Uptr index,ObjectInstance* newValue) + { + // Write the new table element to both the table's elements array and its indirect function call data. + assert(index < table->elements.size()); + FunctionInstance* functionInstance = asFunction(newValue); + assert(functionInstance->nativeFunction); + table->baseAddress[index].type = functionInstance->type; + table->baseAddress[index].value = functionInstance->nativeFunction; + auto oldValue = table->elements[index]; + table->elements[index] = newValue; + return oldValue; + } + + Uptr getTableNumElements(TableInstance* table) + { + return table->elements.size(); + } + + Iptr growTable(TableInstance* table,Uptr numNewElements) + { + const Uptr previousNumElements = table->elements.size(); + if(numNewElements > 0) + { + // If the number of elements to grow would cause the table's size to exceed its maximum, return -1. + if(numNewElements > table->type.size.max || table->elements.size() > table->type.size.max - numNewElements) { return -1; } + + // Try to commit pages for the new elements, and return -1 if the commit fails. + const Uptr previousNumPlatformPages = getNumPlatformPages(table->elements.size() * sizeof(TableInstance::FunctionElement)); + const Uptr newNumPlatformPages = getNumPlatformPages((table->elements.size()+numNewElements) * sizeof(TableInstance::FunctionElement)); + if(newNumPlatformPages != previousNumPlatformPages + && !Platform::commitVirtualPages( + (U8*)table->baseAddress + (previousNumPlatformPages << Platform::getPageSizeLog2()), + newNumPlatformPages - previousNumPlatformPages + )) + { + return -1; + } + + // Also grow the table's elements array. + table->elements.insert(table->elements.end(),numNewElements,nullptr); + } + return previousNumElements; + } + + Iptr shrinkTable(TableInstance* table,Uptr numElementsToShrink) + { + const Uptr previousNumElements = table->elements.size(); + if(numElementsToShrink > 0) + { + // If the number of elements to shrink would cause the tables's size to drop below its minimum, return -1. + if(numElementsToShrink > table->elements.size() + || table->elements.size() - numElementsToShrink < table->type.size.min) { return -1; } + + // Shrink the table's elements array. + table->elements.resize(table->elements.size() - numElementsToShrink); + + // Decommit the pages that were shrunk off the end of the table's indirect function call data. + const Uptr previousNumPlatformPages = getNumPlatformPages(previousNumElements * sizeof(TableInstance::FunctionElement)); + const Uptr newNumPlatformPages = getNumPlatformPages(table->elements.size() * sizeof(TableInstance::FunctionElement)); + if(newNumPlatformPages != previousNumPlatformPages) + { + Platform::decommitVirtualPages( + (U8*)table->baseAddress + (newNumPlatformPages << Platform::getPageSizeLog2()), + (previousNumPlatformPages - newNumPlatformPages) << Platform::getPageSizeLog2() + ); + } + } + return previousNumElements; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/Threads.cpp b/libraries/wasm-jit/Source/Runtime/Threads.cpp new file mode 100644 index 000000000..ac98b417b --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/Threads.cpp @@ -0,0 +1,374 @@ +#include "Inline/BasicTypes.h" +#include "Logging/Logging.h" +#include "Intrinsics.h" +#include "RuntimePrivate.h" + +#include +#include +#include +#include +#include + +#if ENABLE_THREADING_PROTOTYPE +// Keeps track of the entry and error functions used by a running WebAssembly-spawned thread. +// Used to find garbage collection roots. +struct Thread +{ + Runtime::FunctionInstance* entryFunction; + Runtime::FunctionInstance* errorFunction; +}; + +// Holds a list of threads (in the form of events that will wake them) that +// are waiting on a specific address. +struct WaitList +{ + Platform::Mutex* mutex; + std::vector wakeEvents; + std::atomic numReferences; + + WaitList(): mutex(Platform::createMutex()), numReferences(1) {} + ~WaitList() { destroyMutex(mutex); } +}; + +// An event that is reused within a thread when it waits on a WaitList. +THREAD_LOCAL Platform::Event* threadWakeEvent = nullptr; + +// A map from address to a list of threads waiting on that address. +static Platform::Mutex* addressToWaitListMapMutex = Platform::createMutex(); +static std::map addressToWaitListMap; + +// A global list of running threads created by WebAssembly code. +static Platform::Mutex* threadsMutex = Platform::createMutex(); +static std::vector threads; + +// Opens the wait list for a given address. +// Increases the wait list's reference count, and returns a pointer to it. +// Note that it does not lock the wait list mutex. +// A call to openWaitList should be followed by a call to closeWaitList to avoid leaks. +static WaitList* openWaitList(Uptr address) +{ + Platform::Lock mapLock(addressToWaitListMapMutex); + auto mapIt = addressToWaitListMap.find(address); + if(mapIt != addressToWaitListMap.end()) + { + ++mapIt->second->numReferences; + return mapIt->second; + } + else + { + WaitList* waitList = new WaitList(); + addressToWaitListMap.emplace(address,waitList); + return waitList; + } +} + +// Closes a wait list, deleting it and removing it from the global map if it was the last reference. +static void closeWaitList(Uptr address,WaitList* waitList) +{ + if(--waitList->numReferences == 0) + { + Platform::Lock mapLock(addressToWaitListMapMutex); + if(!waitList->numReferences) + { + assert(!waitList->wakeEvents.size()); + delete waitList; + addressToWaitListMap.erase(address); + } + } +} + +// Loads a value from memory with seq_cst memory order. +// The caller must ensure that the pointer is naturally aligned. +template +static Value atomicLoad(const Value* valuePointer) +{ + static_assert(sizeof(std::atomic) == sizeof(Value),"relying on non-standard behavior"); + std::atomic* valuePointerAtomic = (std::atomic*)valuePointer; + return valuePointerAtomic->load(); +} + +// Stores a value to memory with seq_cst memory order. +// The caller must ensure that the pointer is naturally aligned. +template +static void atomicStore(Value* valuePointer,Value newValue) +{ + static_assert(sizeof(std::atomic) == sizeof(Value),"relying on non-standard behavior"); + std::atomic* valuePointerAtomic = (std::atomic*)valuePointer; + valuePointerAtomic->store(newValue); +} + +// Decodes a floating-point timeout value relative to startTime. +U64 getEndTimeFromTimeout(U64 startTime,F64 timeout) +{ + const F64 timeoutMicroseconds = timeout * 1000.0; + U64 endTime = UINT64_MAX; + if(!std::isnan(timeoutMicroseconds) && std::isfinite(timeoutMicroseconds)) + { + if(timeoutMicroseconds <= 0.0) + { + endTime = startTime; + } + else if(timeoutMicroseconds <= F64(UINT64_MAX - 1)) + { + endTime = startTime + U64(timeoutMicroseconds); + errorUnless(endTime >= startTime); + } + } + return endTime; +} + +template +static U32 waitOnAddress(Value* valuePointer,Value expectedValue,F64 timeout) +{ + const U64 endTime = getEndTimeFromTimeout(Platform::getMonotonicClock(),timeout); + + // Open the wait list for this address. + const Uptr address = reinterpret_cast(valuePointer); + WaitList* waitList = openWaitList(address); + + // Lock the wait list, and check that *valuePointer is still what the caller expected it to be. + lockMutex(waitList->mutex); + if(atomicLoad(valuePointer) != expectedValue) + { + // If *valuePointer wasn't the expected value, unlock the wait list and return. + unlockMutex(waitList->mutex); + closeWaitList(address,waitList); + return 1; + } + else + { + // If the thread hasn't yet created a wake event, do so. + if(!threadWakeEvent) { threadWakeEvent = Platform::createEvent(); } + + // Add the wake event to the wait list, and unlock the wait list. + waitList->wakeEvents.push_back(threadWakeEvent); + unlockMutex(waitList->mutex); + } + + // Wait for the thread's wake event to be signaled. + bool timedOut = false; + if(!Platform::waitForEvent(threadWakeEvent,endTime)) + { + // If the wait timed out, lock the wait list and check if the thread's wake event is still in the wait list. + Platform::Lock waitListLock(waitList->mutex); + auto wakeEventIt = std::find(waitList->wakeEvents.begin(),waitList->wakeEvents.end(),threadWakeEvent); + if(wakeEventIt != waitList->wakeEvents.end()) + { + // If the event was still on the wait list, remove it, and return the "timed out" result. + waitList->wakeEvents.erase(wakeEventIt); + timedOut = true; + } + else + { + // In between the wait timing out and locking the wait list, some other thread tried to wake this thread. + // The event will now be signaled, so use an immediately expiring wait on it to reset it. + errorUnless(Platform::waitForEvent(threadWakeEvent,Platform::getMonotonicClock())); + } + } + + closeWaitList(address,waitList); + return timedOut ? 2 : 0; +} + +static U32 wakeAddress(Uptr address,U32 numToWake) +{ + if(numToWake == 0) { return 0; } + + // Open the wait list for this address. + WaitList* waitList = openWaitList(address); + { + Platform::Lock waitListLock(waitList->mutex); + + // Determine how many threads to wake. + // numToWake==UINT32_MAX means wake all waiting threads. + Uptr actualNumToWake = numToWake; + if(numToWake == UINT32_MAX || numToWake > waitList->wakeEvents.size()) + { + actualNumToWake = waitList->wakeEvents.size(); + } + + // Signal the events corresponding to the oldest waiting threads. + for(Uptr wakeIndex = 0;wakeIndex < actualNumToWake;++wakeIndex) + { + signalEvent(waitList->wakeEvents[wakeIndex]); + } + + // Remove the events from the wait list. + waitList->wakeEvents.erase(waitList->wakeEvents.begin(),waitList->wakeEvents.begin() + numToWake); + } + closeWaitList(address,waitList); + + return numToWake; +} + +namespace Runtime +{ + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,misalignedAtomicTrap,misalignedAtomicTrap,none,i32,address) + { + causeException(Exception::Cause::misalignedAtomicMemoryAccess); + } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,isLockFree,isLockFree,i32,i32,numBytes) + { + // Assume we're running on X86. + switch(numBytes) + { + case 1: case 2: case 4: case 8: return true; + default: return false; + }; + } + + DEFINE_INTRINSIC_FUNCTION3(wavmIntrinsics,wake,wake,i32,i32,addressOffset,i32,numToWake,i64,memoryInstanceBits) + { + MemoryInstance* memoryInstance = reinterpret_cast(memoryInstanceBits); + + // Validate that the address is within the memory's bounds and 4-byte aligned. + if(U32(addressOffset) > memoryInstance->endOffset) { causeException(Exception::Cause::accessViolation); } + if(addressOffset & 3) { causeException(Exception::Cause::misalignedAtomicMemoryAccess); } + + const Uptr address = reinterpret_cast(getMemoryBaseAddress(memoryInstance)) + addressOffset; + return wakeAddress(address,numToWake); + } + + DEFINE_INTRINSIC_FUNCTION4(wavmIntrinsics,wait,wait,i32,i32,addressOffset,i32,expectedValue,f64,timeout,i64,memoryInstanceBits) + { + MemoryInstance* memoryInstance = reinterpret_cast(memoryInstanceBits); + + // Validate that the address is within the memory's bounds and naturally aligned. + if(U32(addressOffset) > memoryInstance->endOffset) { causeException(Exception::Cause::accessViolation); } + if(addressOffset & 3) { causeException(Exception::Cause::misalignedAtomicMemoryAccess); } + + I32* valuePointer = reinterpret_cast(getMemoryBaseAddress(memoryInstance) + addressOffset); + return waitOnAddress(valuePointer,expectedValue,timeout); + } + DEFINE_INTRINSIC_FUNCTION4(wavmIntrinsics,wait,wait,i32,i32,addressOffset,i64,expectedValue,f64,timeout,i64,memoryInstanceBits) + { + MemoryInstance* memoryInstance = reinterpret_cast(memoryInstanceBits); + + // Validate that the address is within the memory's bounds and naturally aligned. + if(U32(addressOffset) > memoryInstance->endOffset) { causeException(Exception::Cause::accessViolation); } + if(addressOffset & 7) { causeException(Exception::Cause::misalignedAtomicMemoryAccess); } + + I64* valuePointer = reinterpret_cast(getMemoryBaseAddress(memoryInstance) + addressOffset); + return waitOnAddress(valuePointer,expectedValue,timeout); + } + + FunctionInstance* getFunctionFromTable(TableInstance* table,const FunctionType* expectedType,U32 elementIndex) + { + // Validate that the index is valid. + if(elementIndex * sizeof(TableInstance::FunctionElement) >= table->endOffset) + { + causeException(Runtime::Exception::Cause::undefinedTableElement); + } + // Validate that the indexed function's type matches the expected type. + const FunctionType* actualSignature = table->baseAddress[elementIndex].type; + if(actualSignature != expectedType) + { + causeException(Runtime::Exception::Cause::indirectCallSignatureMismatch); + } + return asFunction(table->elements[elementIndex]); + } + + void callAndTurnHardwareTrapsIntoRuntimeExceptions(void (*function)(I32),I32 argument) + { + Platform::CallStack trapCallStack; + Uptr trapOperand; + const Platform::HardwareTrapType trapType = Platform::catchHardwareTraps( + trapCallStack,trapOperand, + [function,argument]{(*function)(argument);} + ); + if(trapType != Platform::HardwareTrapType::none) + { + handleHardwareTrap(trapType,std::move(trapCallStack),trapOperand); + } + } + + static void threadFunc(Thread* thread,I32 argument) + { + try + { + // Call the thread entry function. + callAndTurnHardwareTrapsIntoRuntimeExceptions((void(*)(I32))thread->entryFunction->nativeFunction,argument); + } + catch(Runtime::Exception exception) + { + // Log that a runtime exception was handled by a thread error function. + Log::printf(Log::Category::error,"Runtime exception in thread: %s\n",describeExceptionCause(exception.cause)); + for(auto calledFunction : exception.callStack) { Log::printf(Log::Category::error," %s\n",calledFunction.c_str()); } + Log::printf(Log::Category::error,"Passing exception on to thread error handler\n"); + + try + { + // Call the thread error function. + callAndTurnHardwareTrapsIntoRuntimeExceptions((void(*)(I32))thread->errorFunction->nativeFunction,argument); + } + catch(Runtime::Exception secondException) + { + // Log that the thread error function caused a runtime exception, and exit with a fatal error. + Log::printf(Log::Category::error,"Runtime exception in thread error handler: %s\n",describeExceptionCause(secondException.cause)); + for(auto calledFunction : secondException.callStack) { Log::printf(Log::Category::error," %s\n",calledFunction.c_str()); } + Errors::fatalf("double fault"); + } + } + + // Destroy the thread wake event before exiting the thread. + if(threadWakeEvent) + { + Platform::destroyEvent(threadWakeEvent); + } + + // Remove the thread from the global list. + { + Platform::Lock threadsLock(threadsMutex); + auto threadIt = std::find(threads.begin(),threads.end(),thread); + threads.erase(threadIt); + } + + // Delete the thread object. + delete thread; + } + + DEFINE_INTRINSIC_FUNCTION4(wavmIntrinsics,launchThread,launchThread,none, + i32,entryFunctionIndex, + i32,argument, + i32,errorFunctionIndex, + i64,functionTablePointer) + { + TableInstance* defaultTable = reinterpret_cast(functionTablePointer); + const FunctionType* functionType = FunctionType::get(ResultType::none,{ValueType::i32}); + + // Create a thread object that will expose its entry and error functions to the garbage collector as roots. + Thread* thread = new Thread(); + thread->entryFunction = getFunctionFromTable(defaultTable,functionType,entryFunctionIndex); + thread->errorFunction = getFunctionFromTable(defaultTable,functionType,errorFunctionIndex); + { + Platform::Lock threadsLock(threadsMutex); + threads.push_back(thread); + } + + // Use a std::thread to spawn the thread. + std::thread stdThread([thread,argument]() + { + threadFunc(thread,argument); + }); + + // Detach the std::thread from the underlying thread. + stdThread.detach(); + } + + void getThreadGCRoots(std::vector& outGCRoots) + { + Platform::Lock threadsLock(threadsMutex); + for(auto thread : threads) + { + outGCRoots.push_back(thread->entryFunction); + outGCRoots.push_back(thread->errorFunction); + } + } +} +#else +namespace Runtime +{ + void getThreadGCRoots(std::vector& outGCRoots) {} +} +#endif \ No newline at end of file diff --git a/libraries/wasm-jit/Source/Runtime/WAVMIntrinsics.cpp b/libraries/wasm-jit/Source/Runtime/WAVMIntrinsics.cpp new file mode 100644 index 000000000..47fe8002a --- /dev/null +++ b/libraries/wasm-jit/Source/Runtime/WAVMIntrinsics.cpp @@ -0,0 +1,200 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Floats.h" +#include "Logging/Logging.h" +#include "Intrinsics.h" +#include "RuntimePrivate.h" + +#include + +namespace Runtime +{ + template + Float quietNaN(Float value) + { + Floats::FloatComponents components; + components.value = value; + components.bits.significand |= typename Floats::FloatComponents::Bits(1) << (Floats::FloatComponents::numSignificandBits - 1); + return components.value; + } + + template + Float floatMin(Float left,Float right) + { + // If either operand is a NaN, convert it to a quiet NaN and return it. + if(left != left) { return quietNaN(left); } + else if(right != right) { return quietNaN(right); } + // If either operand is less than the other, return it. + else if(left < right) { return left; } + else if(right < left) { return right; } + else + { + // Finally, if the operands are apparently equal, compare their integer values to distinguish -0.0 from +0.0 + Floats::FloatComponents leftComponents; + leftComponents.value = left; + Floats::FloatComponents rightComponents; + rightComponents.value = right; + return leftComponents.bitcastInt < rightComponents.bitcastInt ? right : left; + } + } + + template + Float floatMax(Float left,Float right) + { + // If either operand is a NaN, convert it to a quiet NaN and return it. + if(left != left) { return quietNaN(left); } + else if(right != right) { return quietNaN(right); } + // If either operand is less than the other, return it. + else if(left > right) { return left; } + else if(right > left) { return right; } + else + { + // Finally, if the operands are apparently equal, compare their integer values to distinguish -0.0 from +0.0 + Floats::FloatComponents leftComponents; + leftComponents.value = left; + Floats::FloatComponents rightComponents; + rightComponents.value = right; + return leftComponents.bitcastInt > rightComponents.bitcastInt ? right : left; + } + } + + template + Float floatCeil(Float value) + { + if(value != value) { return quietNaN(value); } + else { return ceil(value); } + } + + template + Float floatFloor(Float value) + { + if(value != value) { return quietNaN(value); } + else { return floor(value); } + } + + template + Float floatTrunc(Float value) + { + if(value != value) { return quietNaN(value); } + else { return trunc(value); } + } + + template + Float floatNearest(Float value) + { + if(value != value) { return quietNaN(value); } + else { return nearbyint(value); } + } + + DEFINE_INTRINSIC_FUNCTION2(wavmIntrinsics,floatMin,floatMin,f32,f32,left,f32,right) { return floatMin(left,right); } + DEFINE_INTRINSIC_FUNCTION2(wavmIntrinsics,floatMin,floatMin,f64,f64,left,f64,right) { return floatMin(left,right); } + DEFINE_INTRINSIC_FUNCTION2(wavmIntrinsics,floatMax,floatMax,f32,f32,left,f32,right) { return floatMax(left,right); } + DEFINE_INTRINSIC_FUNCTION2(wavmIntrinsics,floatMax,floatMax,f64,f64,left,f64,right) { return floatMax(left,right); } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatCeil,floatCeil,f32,f32,value) { return floatCeil(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatCeil,floatCeil,f64,f64,value) { return floatCeil(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatFloor,floatFloor,f32,f32,value) { return floatFloor(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatFloor,floatFloor,f64,f64,value) { return floatFloor(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatTrunc,floatTrunc,f32,f32,value) { return floatTrunc(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatTrunc,floatTrunc,f64,f64,value) { return floatTrunc(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatNearest,floatNearest,f32,f32,value) { return floatNearest(value); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatNearest,floatNearest,f64,f64,value) { return floatNearest(value); } + + template + Dest floatToInt(Source sourceValue,Source minValue,Source maxValue) + { + if(sourceValue != sourceValue) + { + causeException(Exception::Cause::invalidFloatOperation); + } + else if(sourceValue >= maxValue || (isMinInclusive ? sourceValue <= minValue : sourceValue < minValue)) + { + causeException(Exception::Cause::integerDivideByZeroOrIntegerOverflow); + } + return (Dest)sourceValue; + } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToSignedInt,floatToSignedInt,i32,f32,source) { return floatToInt(source,(F32)INT32_MIN,-(F32)INT32_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToSignedInt,floatToSignedInt,i32,f64,source) { return floatToInt(source,(F64)INT32_MIN,-(F64)INT32_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToSignedInt,floatToSignedInt,i64,f32,source) { return floatToInt(source,(F32)INT64_MIN,-(F32)INT64_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToSignedInt,floatToSignedInt,i64,f64,source) { return floatToInt(source,(F64)INT64_MIN,-(F64)INT64_MIN); } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToUnsignedInt,floatToUnsignedInt,i32,f32,source) { return floatToInt(source,-1.0f,-2.0f * INT32_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToUnsignedInt,floatToUnsignedInt,i32,f64,source) { return floatToInt(source,-1.0,-2.0 * INT32_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToUnsignedInt,floatToUnsignedInt,i64,f32,source) { return floatToInt(source,-1.0f,-2.0f * INT64_MIN); } + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,floatToUnsignedInt,floatToUnsignedInt,i64,f64,source) { return floatToInt(source,-1.0,-2.0 * INT64_MIN); } + + DEFINE_INTRINSIC_FUNCTION0(wavmIntrinsics,divideByZeroTrap,divideByZeroTrap,none) + { + causeException(Exception::Cause::integerDivideByZeroOrIntegerOverflow); + } + + DEFINE_INTRINSIC_FUNCTION0(wavmIntrinsics,unreachableTrap,unreachableTrap,none) + { + causeException(Exception::Cause::reachedUnreachable); + } + + DEFINE_INTRINSIC_FUNCTION3(wavmIntrinsics,indirectCallSignatureMismatch,indirectCallSignatureMismatch,none,i32,index,i64,expectedSignatureBits,i64,tableBits) + { + TableInstance* table = reinterpret_cast(tableBits); + void* elementValue = table->baseAddress[index].value; + const FunctionType* actualSignature = table->baseAddress[index].type; + const FunctionType* expectedSignature = reinterpret_cast((Uptr)expectedSignatureBits); + std::string ipDescription = ""; + LLVMJIT::describeInstructionPointer(reinterpret_cast(elementValue),ipDescription); + Log::printf(Log::Category::debug,"call_indirect signature mismatch: expected %s at index %u but got %s (%s)\n", + asString(expectedSignature).c_str(), + index, + actualSignature ? asString(actualSignature).c_str() : "nullptr", + ipDescription.c_str() + ); + causeException(elementValue == nullptr ? Exception::Cause::undefinedTableElement : Exception::Cause::indirectCallSignatureMismatch); + } + + DEFINE_INTRINSIC_FUNCTION0(wavmIntrinsics,indirectCallIndexOutOfBounds,indirectCallIndexOutOfBounds,none) + { + causeException(Exception::Cause::undefinedTableElement); + } + + DEFINE_INTRINSIC_FUNCTION2(wavmIntrinsics,_growMemory,growMemory,i32,i32,deltaPages,i64,memoryBits) + { + MemoryInstance* memory = reinterpret_cast(memoryBits); + assert(memory); + const Iptr numPreviousMemoryPages = growMemory(memory,(Uptr)deltaPages); + if(numPreviousMemoryPages + (Uptr)deltaPages > IR::maxMemoryPages) { return -1; } + else { return (I32)numPreviousMemoryPages; } + } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,_currentMemory,currentMemory,i32,i64,memoryBits) + { + MemoryInstance* memory = reinterpret_cast(memoryBits); + assert(memory); + Uptr numMemoryPages = getMemoryNumPages(memory); + if(numMemoryPages > UINT32_MAX) { numMemoryPages = UINT32_MAX; } + return (U32)numMemoryPages; + } + + THREAD_LOCAL Uptr indentLevel = 0; + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,debugEnterFunction,debugEnterFunction,none,i64,functionInstanceBits) + { + FunctionInstance* function = reinterpret_cast(functionInstanceBits); + Log::printf(Log::Category::debug,"ENTER: %s\n",function->debugName.c_str()); + ++indentLevel; + } + + DEFINE_INTRINSIC_FUNCTION1(wavmIntrinsics,debugExitFunction,debugExitFunction,none,i64,functionInstanceBits) + { + FunctionInstance* function = reinterpret_cast(functionInstanceBits); + --indentLevel; + Log::printf(Log::Category::debug,"EXIT: %s\n",function->debugName.c_str()); + } + + DEFINE_INTRINSIC_FUNCTION0(wavmIntrinsics,debugBreak,debugBreak,none) + { + Log::printf(Log::Category::debug,"================== wavmIntrinsics.debugBreak\n"); + } + + void initWAVMIntrinsics() + { + } +} diff --git a/libraries/wasm-jit/Source/ThirdParty/dtoa.c b/libraries/wasm-jit/Source/ThirdParty/dtoa.c new file mode 100644 index 000000000..9a6aae4e7 --- /dev/null +++ b/libraries/wasm-jit/Source/ThirdParty/dtoa.c @@ -0,0 +1,4370 @@ +/**************************************************************** + * + * The author of this software is David M. Gay. + * + * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + * + ***************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* On a machine with IEEE extended-precision registers, it is + * necessary to specify double-precision (53-bit) rounding precision + * before invoking strtod or dtoa. If the machine uses (the equivalent + * of) Intel 80x87 arithmetic, the call + * _control87(PC_53, MCW_PC); + * does this with many compilers. Whether this or another call is + * appropriate depends on the compiler; for this to work, it may be + * necessary to #include "float.h" or another system-dependent header + * file. + */ + +/* strtod for IEEE-, VAX-, and IBM-arithmetic machines. + * (Note that IEEE arithmetic is disabled by gcc's -ffast-math flag.) + * + * This strtod returns a nearest machine number to the input decimal + * string (or sets errno to ERANGE). With IEEE arithmetic, ties are + * broken by the IEEE round-even rule. Otherwise ties are broken by + * biased rounding (add half and chop). + * + * Inspired loosely by William D. Clinger's paper "How to Read Floating + * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. + * + * Modifications: + * + * 1. We only require IEEE, IBM, or VAX double-precision + * arithmetic (not IEEE double-extended). + * 2. We get by with floating-point arithmetic in a case that + * Clinger missed -- when we're computing d * 10^n + * for a small integer d and the integer n is not too + * much larger than 22 (the maximum integer k for which + * we can represent 10^k exactly), we may be able to + * compute (d*10^k) * 10^(e-k) with just one roundoff. + * 3. Rather than a bit-at-a-time adjustment of the binary + * result in the hard case, we use floating-point + * arithmetic to determine the adjustment to within + * one bit; only in really hard cases do we need to + * compute a second residual. + * 4. Because of 3., we don't need a large table of powers of 10 + * for ten-to-e (just some small tables, e.g. of 10^k + * for 0 <= k <= 22). + */ + +/* + * #define IEEE_8087 for IEEE-arithmetic machines where the least + * significant byte has the lowest address. + * #define IEEE_MC68k for IEEE-arithmetic machines where the most + * significant byte has the lowest address. + * #define Long int on machines with 32-bit ints and 64-bit longs. + * #define IBM for IBM mainframe-style floating-point arithmetic. + * #define VAX for VAX-style floating-point arithmetic (D_floating). + * #define No_leftright to omit left-right logic in fast floating-point + * computation of dtoa. This will cause dtoa modes 4 and 5 to be + * treated the same as modes 2 and 3 for some inputs. + * #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + * and strtod and dtoa should round accordingly. Unless Trust_FLT_ROUNDS + * is also #defined, fegetround() will be queried for the rounding mode. + * Note that both FLT_ROUNDS and fegetround() are specified by the C99 + * standard (and are specified to be consistent, with fesetround() + * affecting the value of FLT_ROUNDS), but that some (Linux) systems + * do not work correctly in this regard, so using fegetround() is more + * portable than using FLT_ROUNDS directly. + * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3 + * and Honor_FLT_ROUNDS is not #defined. + * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines + * that use extended-precision instructions to compute rounded + * products and quotients) with IBM. + * #define ROUND_BIASED for IEEE-format with biased rounding and arithmetic + * that rounds toward +Infinity. + * #define ROUND_BIASED_without_Round_Up for IEEE-format with biased + * rounding when the underlying floating-point arithmetic uses + * unbiased rounding. This prevent using ordinary floating-point + * arithmetic when the result could be computed with one rounding error. + * #define Inaccurate_Divide for IEEE-format with correctly rounded + * products but inaccurate quotients, e.g., for Intel i860. + * #define NO_LONG_LONG on machines that do not have a "long long" + * integer type (of >= 64 bits). On such machines, you can + * #define Just_16 to store 16 bits per 32-bit Long when doing + * high-precision integer arithmetic. Whether this speeds things + * up or slows things down depends on the machine and the number + * being converted. If long long is available and the name is + * something other than "long long", #define Llong to be the name, + * and if "unsigned Llong" does not work as an unsigned version of + * Llong, #define #ULLong to be the corresponding unsigned type. + * #define KR_headers for old-style C function headers. + * #define Bad_float_h if your system lacks a float.h or if it does not + * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, + * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. + * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) + * if memory is available and otherwise does something you deem + * appropriate. If MALLOC is undefined, malloc will be invoked + * directly -- and assumed always to succeed. Similarly, if you + * want something other than the system's free() to be called to + * recycle memory acquired from MALLOC, #define FREE to be the + * name of the alternate routine. (FREE or free is only called in + * pathological cases, e.g., in a dtoa call after a dtoa return in + * mode 3 with thousands of digits requested.) + * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making + * memory allocations from a private pool of memory when possible. + * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes, + * unless #defined to be a different length. This default length + * suffices to get rid of MALLOC calls except for unusual cases, + * such as decimal-to-binary conversion of a very long string of + * digits. The longest string dtoa can return is about 751 bytes + * long. For conversions by strtod of strings of 800 digits and + * all dtoa conversions in single-threaded executions with 8-byte + * pointers, PRIVATE_MEM >= 7400 appears to suffice; with 4-byte + * pointers, PRIVATE_MEM >= 7112 appears adequate. + * #define NO_INFNAN_CHECK if you do not wish to have INFNAN_CHECK + * #defined automatically on IEEE systems. On such systems, + * when INFNAN_CHECK is #defined, strtod checks + * for Infinity and NaN (case insensitively). On some systems + * (e.g., some HP systems), it may be necessary to #define NAN_WORD0 + * appropriately -- to the most significant word of a quiet NaN. + * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.) + * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined, + * strtod also accepts (case insensitively) strings of the form + * NaN(x), where x is a string of hexadecimal digits and spaces; + * if there is only one string of hexadecimal digits, it is taken + * for the 52 fraction bits of the resulting NaN; if there are two + * or more strings of hex digits, the first is for the high 20 bits, + * the second and subsequent for the low 32 bits, with intervening + * white space ignored; but if this results in none of the 52 + * fraction bits being on (an IEEE Infinity symbol), then NAN_WORD0 + * and NAN_WORD1 are used instead. + * #define MULTIPLE_THREADS if the system offers preemptively scheduled + * multiple threads. In this case, you must provide (or suitably + * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed + * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed + * in pow5mult, ensures lazy evaluation of only one copy of high + * powers of 5; omitting this lock would introduce a small + * probability of wasting memory, but would otherwise be harmless.) + * You must also invoke freedtoa(s) to free the value s returned by + * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined. + * #define NO_IEEE_Scale to disable new (Feb. 1997) logic in strtod that + * avoids underflows on inputs whose result does not underflow. + * If you #define NO_IEEE_Scale on a machine that uses IEEE-format + * floating-point numbers and flushes underflows to zero rather + * than implementing gradual underflow, then you must also #define + * Sudden_Underflow. + * #define USE_LOCALE to use the current locale's decimal_point value. + * #define SET_INEXACT if IEEE arithmetic is being used and extra + * computation should be done to set the inexact flag when the + * result is inexact and avoid setting inexact when the result + * is exact. In this case, dtoa.c must be compiled in + * an environment, perhaps provided by #include "dtoa.c" in a + * suitable wrapper, that defines two functions, + * int get_inexact(void); + * void clear_inexact(void); + * such that get_inexact() returns a nonzero value if the + * inexact bit is already set, and clear_inexact() sets the + * inexact bit to 0. When SET_INEXACT is #defined, strtod + * also does extra computations to set the underflow and overflow + * flags when appropriate (i.e., when the result is tiny and + * inexact or when it is a numeric value rounded to +-infinity). + * #define NO_ERRNO if strtod should not assign errno = ERANGE when + * the result overflows to +-Infinity or underflows to 0. + * #define NO_HEX_FP to omit recognition of hexadecimal floating-point + * values by strtod. + * #define NO_STRTOD_BIGCOMP (on IEEE-arithmetic systems only for now) + * to disable logic for "fast" testing of very long input strings + * to strtod. This testing proceeds by initially truncating the + * input string, then if necessary comparing the whole string with + * a decimal expansion to decide close cases. This logic is only + * used for input more than STRTOD_DIGLIM digits long (default 40). + */ + +#ifndef Long +#define Long long +#endif +#ifndef ULong +typedef unsigned Long ULong; +#endif + +#ifdef DEBUG +#include "stdio.h" +#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} +#endif + +#include "stdlib.h" +#include "string.h" + +#ifdef USE_LOCALE +#include "locale.h" +#endif + +#ifdef Honor_FLT_ROUNDS +#ifndef Trust_FLT_ROUNDS +#include +#endif +#endif + +#ifdef MALLOC +#ifdef KR_headers +extern char *MALLOC(); +#else +extern void *MALLOC(size_t); +#endif +#else +#define MALLOC malloc +#endif + +#ifndef Omit_Private_Memory +#ifndef PRIVATE_MEM +#define PRIVATE_MEM 2304 +#endif +#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) +static double private_mem[PRIVATE_mem], *pmem_next = private_mem; +#endif + +#undef IEEE_Arith +#undef Avoid_Underflow +#ifdef IEEE_MC68k +#define IEEE_Arith +#endif +#ifdef IEEE_8087 +#define IEEE_Arith +#endif + +#ifdef IEEE_Arith +#ifndef NO_INFNAN_CHECK +#undef INFNAN_CHECK +#define INFNAN_CHECK +#endif +#else +#undef INFNAN_CHECK +#define NO_STRTOD_BIGCOMP +#endif + +#include "errno.h" + +#ifdef Bad_float_h + +#ifdef IEEE_Arith +#define DBL_DIG 15 +#define DBL_MAX_10_EXP 308 +#define DBL_MAX_EXP 1024 +#define FLT_RADIX 2 +#endif /*IEEE_Arith*/ + +#ifdef IBM +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 75 +#define DBL_MAX_EXP 63 +#define FLT_RADIX 16 +#define DBL_MAX 7.2370055773322621e+75 +#endif + +#ifdef VAX +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 38 +#define DBL_MAX_EXP 127 +#define FLT_RADIX 2 +#define DBL_MAX 1.7014118346046923e+38 +#endif + +#ifndef LONG_MAX +#define LONG_MAX 2147483647 +#endif + +#else /* ifndef Bad_float_h */ +#include "float.h" +#endif /* Bad_float_h */ + +#ifndef __MATH_H__ +#include "math.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef CONST +#ifdef KR_headers +#define CONST /* blank */ +#else +#define CONST const +#endif +#endif + +#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1 +Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined. +#endif + +typedef union { double d; ULong L[2]; } U; + +#ifdef IEEE_8087 +#define word0(x) (x)->L[1] +#define word1(x) (x)->L[0] +#else +#define word0(x) (x)->L[0] +#define word1(x) (x)->L[1] +#endif +#define dval(x) (x)->d + +#ifndef STRTOD_DIGLIM +#define STRTOD_DIGLIM 40 +#endif + +#ifdef DIGLIM_DEBUG +extern int strtod_diglim; +#else +#define strtod_diglim STRTOD_DIGLIM +#endif + +/* The following definition of Storeinc is appropriate for MIPS processors. + * An alternative that might be better on some machines is + * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) + */ +#if defined(IEEE_8087) + defined(VAX) +#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ +((unsigned short *)a)[0] = (unsigned short)c, a++) +#else +#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ +((unsigned short *)a)[1] = (unsigned short)c, a++) +#endif + +/* #define P DBL_MANT_DIG */ +/* Ten_pmax = floor(P*log(2)/log(5)) */ +/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ +/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ +/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ + +#ifdef IEEE_Arith +#define Exp_shift 20 +#define Exp_shift1 20 +#define Exp_msk1 0x100000 +#define Exp_msk11 0x100000 +#define Exp_mask 0x7ff00000 +#define P 53 +#define Nbits 53 +#define Bias 1023 +#define Emax 1023 +#define Emin (-1022) +#define Exp_1 0x3ff00000 +#define Exp_11 0x3ff00000 +#define Ebits 11 +#define Frac_mask 0xfffff +#define Frac_mask1 0xfffff +#define Ten_pmax 22 +#define Bletch 0x10 +#define Bndry_mask 0xfffff +#define Bndry_mask1 0xfffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 1 +#define Tiny0 0 +#define Tiny1 1 +#define Quick_max 14 +#define Int_max 14 +#ifndef NO_IEEE_Scale +#define Avoid_Underflow +#ifdef Flush_Denorm /* debugging option */ +#undef Sudden_Underflow +#endif +#endif + +#ifndef Flt_Rounds +#ifdef FLT_ROUNDS +#define Flt_Rounds FLT_ROUNDS +#else +#define Flt_Rounds 1 +#endif +#endif /*Flt_Rounds*/ + +#ifdef Honor_FLT_ROUNDS +#undef Check_FLT_ROUNDS +#define Check_FLT_ROUNDS +#else +#define Rounding Flt_Rounds +#endif + +#else /* ifndef IEEE_Arith */ +#undef Check_FLT_ROUNDS +#undef Honor_FLT_ROUNDS +#undef SET_INEXACT +#undef Sudden_Underflow +#define Sudden_Underflow +#ifdef IBM +#undef Flt_Rounds +#define Flt_Rounds 0 +#define Exp_shift 24 +#define Exp_shift1 24 +#define Exp_msk1 0x1000000 +#define Exp_msk11 0x1000000 +#define Exp_mask 0x7f000000 +#define P 14 +#define Nbits 56 +#define Bias 65 +#define Emax 248 +#define Emin (-260) +#define Exp_1 0x41000000 +#define Exp_11 0x41000000 +#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ +#define Frac_mask 0xffffff +#define Frac_mask1 0xffffff +#define Bletch 4 +#define Ten_pmax 22 +#define Bndry_mask 0xefffff +#define Bndry_mask1 0xffffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 4 +#define Tiny0 0x100000 +#define Tiny1 0 +#define Quick_max 14 +#define Int_max 15 +#else /* VAX */ +#undef Flt_Rounds +#define Flt_Rounds 1 +#define Exp_shift 23 +#define Exp_shift1 7 +#define Exp_msk1 0x80 +#define Exp_msk11 0x800000 +#define Exp_mask 0x7f80 +#define P 56 +#define Nbits 56 +#define Bias 129 +#define Emax 126 +#define Emin (-129) +#define Exp_1 0x40800000 +#define Exp_11 0x4080 +#define Ebits 8 +#define Frac_mask 0x7fffff +#define Frac_mask1 0xffff007f +#define Ten_pmax 24 +#define Bletch 2 +#define Bndry_mask 0xffff007f +#define Bndry_mask1 0xffff007f +#define LSB 0x10000 +#define Sign_bit 0x8000 +#define Log2P 1 +#define Tiny0 0x80 +#define Tiny1 0 +#define Quick_max 15 +#define Int_max 15 +#endif /* IBM, VAX */ +#endif /* IEEE_Arith */ + +#ifndef IEEE_Arith +#define ROUND_BIASED +#else +#ifdef ROUND_BIASED_without_Round_Up +#undef ROUND_BIASED +#define ROUND_BIASED +#endif +#endif + +#ifdef RND_PRODQUOT +#define rounded_product(a,b) a = rnd_prod(a, b) +#define rounded_quotient(a,b) a = rnd_quot(a, b) +#ifdef KR_headers +extern double rnd_prod(), rnd_quot(); +#else +extern double rnd_prod(double, double), rnd_quot(double, double); +#endif +#else +#define rounded_product(a,b) a *= b +#define rounded_quotient(a,b) a /= b +#endif + +#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) +#define Big1 0xffffffff + +#ifndef Pack_32 +#define Pack_32 +#endif + +typedef struct BCinfo BCinfo; + struct +BCinfo { int dp0, dp1, dplen, dsign, e0, inexact, nd, nd0, rounding, scale, uflchk; }; + +#ifdef KR_headers +#define FFFFFFFF ((((unsigned long)0xffff)<<16)|(unsigned long)0xffff) +#else +#define FFFFFFFF 0xffffffffUL +#endif + +#ifdef NO_LONG_LONG +#undef ULLong +#ifdef Just_16 +#undef Pack_32 +/* When Pack_32 is not defined, we store 16 bits per 32-bit Long. + * This makes some inner loops simpler and sometimes saves work + * during multiplications, but it often seems to make things slightly + * slower. Hence the default is now to store 32 bits per Long. + */ +#endif +#else /* long long available */ +#ifndef Llong +#define Llong long long +#endif +#ifndef ULLong +#define ULLong unsigned Llong +#endif +#endif /* NO_LONG_LONG */ + +#ifndef MULTIPLE_THREADS +#define ACQUIRE_DTOA_LOCK(n) /*nothing*/ +#define FREE_DTOA_LOCK(n) /*nothing*/ +#endif + +#define Kmax 7 + +#ifdef __cplusplus +extern "C" double strtod(const char *s00, char **se); +extern "C" char *dtoa(double d, int mode, int ndigits, + int *decpt, int *sign, char **rve); +#endif + + struct +Bigint { + struct Bigint *next; + int k, maxwds, sign, wds; + ULong x[1]; + }; + + typedef struct Bigint Bigint; + + static Bigint *freelist[Kmax+1]; + + static Bigint * +Balloc +#ifdef KR_headers + (k) int k; +#else + (int k) +#endif +{ + int x; + Bigint *rv; +#ifndef Omit_Private_Memory + unsigned int len; +#endif + + ACQUIRE_DTOA_LOCK(0); + /* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */ + /* but this case seems very unlikely. */ + if (k <= Kmax && (rv = freelist[k])) + freelist[k] = rv->next; + else { + x = 1 << k; +#ifdef Omit_Private_Memory + rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong)); +#else + len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1) + /sizeof(double); + if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) { + rv = (Bigint*)pmem_next; + pmem_next += len; + } + else + rv = (Bigint*)MALLOC(len*sizeof(double)); +#endif + rv->k = k; + rv->maxwds = x; + } + FREE_DTOA_LOCK(0); + rv->sign = rv->wds = 0; + return rv; + } + + static void +Bfree +#ifdef KR_headers + (v) Bigint *v; +#else + (Bigint *v) +#endif +{ + if (v) { + if (v->k > Kmax) +#ifdef FREE + FREE((void*)v); +#else + free((void*)v); +#endif + else { + ACQUIRE_DTOA_LOCK(0); + v->next = freelist[v->k]; + freelist[v->k] = v; + FREE_DTOA_LOCK(0); + } + } + } + +#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ +y->wds*sizeof(Long) + 2*sizeof(int)) + + static Bigint * +multadd +#ifdef KR_headers + (b, m, a) Bigint *b; int m, a; +#else + (Bigint *b, int m, int a) /* multiply by m and add a */ +#endif +{ + int i, wds; +#ifdef ULLong + ULong *x; + ULLong carry, y; +#else + ULong carry, *x, y; +#ifdef Pack_32 + ULong xi, z; +#endif +#endif + Bigint *b1; + + wds = b->wds; + x = b->x; + i = 0; + carry = a; + do { +#ifdef ULLong + y = *x * (ULLong)m + carry; + carry = y >> 32; + *x++ = y & FFFFFFFF; +#else +#ifdef Pack_32 + xi = *x; + y = (xi & 0xffff) * m + carry; + z = (xi >> 16) * m + (y >> 16); + carry = z >> 16; + *x++ = (z << 16) + (y & 0xffff); +#else + y = *x * m + carry; + carry = y >> 16; + *x++ = y & 0xffff; +#endif +#endif + } + while(++i < wds); + if (carry) { + if (wds >= b->maxwds) { + b1 = Balloc(b->k+1); + Bcopy(b1, b); + Bfree(b); + b = b1; + } + b->x[wds++] = carry; + b->wds = wds; + } + return b; + } + + static Bigint * +s2b +#ifdef KR_headers + (s, nd0, nd, y9, dplen) CONST char *s; int nd0, nd, dplen; ULong y9; +#else + (const char *s, int nd0, int nd, ULong y9, int dplen) +#endif +{ + Bigint *b; + int i, k; + Long x, y; + + x = (nd + 8) / 9; + for(k = 0, y = 1; x > y; y <<= 1, k++) ; +#ifdef Pack_32 + b = Balloc(k); + b->x[0] = y9; + b->wds = 1; +#else + b = Balloc(k+1); + b->x[0] = y9 & 0xffff; + b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; +#endif + + i = 9; + if (9 < nd0) { + s += 9; + do b = multadd(b, 10, *s++ - '0'); + while(++i < nd0); + s += dplen; + } + else + s += dplen + 9; + for(; i < nd; i++) + b = multadd(b, 10, *s++ - '0'); + return b; + } + + static int +hi0bits +#ifdef KR_headers + (x) ULong x; +#else + (ULong x) +#endif +{ + int k = 0; + + if (!(x & 0xffff0000)) { + k = 16; + x <<= 16; + } + if (!(x & 0xff000000)) { + k += 8; + x <<= 8; + } + if (!(x & 0xf0000000)) { + k += 4; + x <<= 4; + } + if (!(x & 0xc0000000)) { + k += 2; + x <<= 2; + } + if (!(x & 0x80000000)) { + k++; + if (!(x & 0x40000000)) + return 32; + } + return k; + } + + static int +lo0bits +#ifdef KR_headers + (y) ULong *y; +#else + (ULong *y) +#endif +{ + int k; + ULong x = *y; + + if (x & 7) { + if (x & 1) + return 0; + if (x & 2) { + *y = x >> 1; + return 1; + } + *y = x >> 2; + return 2; + } + k = 0; + if (!(x & 0xffff)) { + k = 16; + x >>= 16; + } + if (!(x & 0xff)) { + k += 8; + x >>= 8; + } + if (!(x & 0xf)) { + k += 4; + x >>= 4; + } + if (!(x & 0x3)) { + k += 2; + x >>= 2; + } + if (!(x & 1)) { + k++; + x >>= 1; + if (!x) + return 32; + } + *y = x; + return k; + } + + static Bigint * +i2b +#ifdef KR_headers + (i) int i; +#else + (int i) +#endif +{ + Bigint *b; + + b = Balloc(1); + b->x[0] = i; + b->wds = 1; + return b; + } + + static Bigint * +mult +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + Bigint *c; + int k, wa, wb, wc; + ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; + ULong y; +#ifdef ULLong + ULLong carry, z; +#else + ULong carry, z; +#ifdef Pack_32 + ULong z2; +#endif +#endif + + if (a->wds < b->wds) { + c = a; + a = b; + b = c; + } + k = a->k; + wa = a->wds; + wb = b->wds; + wc = wa + wb; + if (wc > a->maxwds) + k++; + c = Balloc(k); + for(x = c->x, xa = x + wc; x < xa; x++) + *x = 0; + xa = a->x; + xae = xa + wa; + xb = b->x; + xbe = xb + wb; + xc0 = c->x; +#ifdef ULLong + for(; xb < xbe; xc0++) { + if ((y = *xb++)) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * (ULLong)y + *xc + carry; + carry = z >> 32; + *xc++ = z & FFFFFFFF; + } + while(x < xae); + *xc = carry; + } + } +#else +#ifdef Pack_32 + for(; xb < xbe; xb++, xc0++) { + if (y = *xb & 0xffff) { + x = xa; + xc = xc0; + carry = 0; + do { + z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; + carry = z >> 16; + z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; + carry = z2 >> 16; + Storeinc(xc, z2, z); + } + while(x < xae); + *xc = carry; + } + if (y = *xb >> 16) { + x = xa; + xc = xc0; + carry = 0; + z2 = *xc; + do { + z = (*x & 0xffff) * y + (*xc >> 16) + carry; + carry = z >> 16; + Storeinc(xc, z, z2); + z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; + carry = z2 >> 16; + } + while(x < xae); + *xc = z2; + } + } +#else + for(; xb < xbe; xc0++) { + if (y = *xb++) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * y + *xc + carry; + carry = z >> 16; + *xc++ = z & 0xffff; + } + while(x < xae); + *xc = carry; + } + } +#endif +#endif + for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; + c->wds = wc; + return c; + } + + static Bigint *p5s; + + static Bigint * +pow5mult +#ifdef KR_headers + (b, k) Bigint *b; int k; +#else + (Bigint *b, int k) +#endif +{ + Bigint *b1, *p5, *p51; + int i; + static int p05[3] = { 5, 25, 125 }; + + if ((i = k & 3)) + b = multadd(b, p05[i-1], 0); + + if (!(k >>= 2)) + return b; + if (!(p5 = p5s)) { + /* first time */ +#ifdef MULTIPLE_THREADS + ACQUIRE_DTOA_LOCK(1); + if (!(p5 = p5s)) { + p5 = p5s = i2b(625); + p5->next = 0; + } + FREE_DTOA_LOCK(1); +#else + p5 = p5s = i2b(625); + p5->next = 0; +#endif + } + for(;;) { + if (k & 1) { + b1 = mult(b, p5); + Bfree(b); + b = b1; + } + if (!(k >>= 1)) + break; + if (!(p51 = p5->next)) { +#ifdef MULTIPLE_THREADS + ACQUIRE_DTOA_LOCK(1); + if (!(p51 = p5->next)) { + p51 = p5->next = mult(p5,p5); + p51->next = 0; + } + FREE_DTOA_LOCK(1); +#else + p51 = p5->next = mult(p5,p5); + p51->next = 0; +#endif + } + p5 = p51; + } + return b; + } + + static Bigint * +lshift +#ifdef KR_headers + (b, k) Bigint *b; int k; +#else + (Bigint *b, int k) +#endif +{ + int i, k1, n, n1; + Bigint *b1; + ULong *x, *x1, *xe, z; + +#ifdef Pack_32 + n = k >> 5; +#else + n = k >> 4; +#endif + k1 = b->k; + n1 = n + b->wds + 1; + for(i = b->maxwds; n1 > i; i <<= 1) + k1++; + b1 = Balloc(k1); + x1 = b1->x; + for(i = 0; i < n; i++) + *x1++ = 0; + x = b->x; + xe = x + b->wds; +#ifdef Pack_32 + if (k &= 0x1f) { + k1 = 32 - k; + z = 0; + do { + *x1++ = *x << k | z; + z = *x++ >> k1; + } + while(x < xe); + if ((*x1 = z)) + ++n1; + } +#else + if (k &= 0xf) { + k1 = 16 - k; + z = 0; + do { + *x1++ = *x << k & 0xffff | z; + z = *x++ >> k1; + } + while(x < xe); + if (*x1 = z) + ++n1; + } +#endif + else do + *x1++ = *x++; + while(x < xe); + b1->wds = n1 - 1; + Bfree(b); + return b1; + } + + static int +cmp +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + ULong *xa, *xa0, *xb, *xb0; + int i, j; + + i = a->wds; + j = b->wds; +#ifdef DEBUG + if (i > 1 && !a->x[i-1]) + Bug("cmp called with a->x[a->wds-1] == 0"); + if (j > 1 && !b->x[j-1]) + Bug("cmp called with b->x[b->wds-1] == 0"); +#endif + if (i -= j) + return i; + xa0 = a->x; + xa = xa0 + j; + xb0 = b->x; + xb = xb0 + j; + for(;;) { + if (*--xa != *--xb) + return *xa < *xb ? -1 : 1; + if (xa <= xa0) + break; + } + return 0; + } + + static Bigint * +diff +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + Bigint *c; + int i, wa, wb; + ULong *xa, *xae, *xb, *xbe, *xc; +#ifdef ULLong + ULLong borrow, y; +#else + ULong borrow, y; +#ifdef Pack_32 + ULong z; +#endif +#endif + + i = cmp(a,b); + if (!i) { + c = Balloc(0); + c->wds = 1; + c->x[0] = 0; + return c; + } + if (i < 0) { + c = a; + a = b; + b = c; + i = 1; + } + else + i = 0; + c = Balloc(a->k); + c->sign = i; + wa = a->wds; + xa = a->x; + xae = xa + wa; + wb = b->wds; + xb = b->x; + xbe = xb + wb; + xc = c->x; + borrow = 0; +#ifdef ULLong + do { + y = (ULLong)*xa++ - *xb++ - borrow; + borrow = y >> 32 & (ULong)1; + *xc++ = y & FFFFFFFF; + } + while(xb < xbe); + while(xa < xae) { + y = *xa++ - borrow; + borrow = y >> 32 & (ULong)1; + *xc++ = y & FFFFFFFF; + } +#else +#ifdef Pack_32 + do { + y = (*xa & 0xffff) - (*xb & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - (*xb++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } + while(xb < xbe); + while(xa < xae) { + y = (*xa & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } +#else + do { + y = *xa++ - *xb++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } + while(xb < xbe); + while(xa < xae) { + y = *xa++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } +#endif +#endif + while(!*--xc) + wa--; + c->wds = wa; + return c; + } + + static double +ulp +#ifdef KR_headers + (x) U *x; +#else + (U *x) +#endif +{ + Long L; + U u; + + L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; +#ifndef Avoid_Underflow +#ifndef Sudden_Underflow + if (L > 0) { +#endif +#endif +#ifdef IBM + L |= Exp_msk1 >> 4; +#endif + word0(&u) = L; + word1(&u) = 0; +#ifndef Avoid_Underflow +#ifndef Sudden_Underflow + } + else { + L = -L >> Exp_shift; + if (L < Exp_shift) { + word0(&u) = 0x80000 >> L; + word1(&u) = 0; + } + else { + word0(&u) = 0; + L -= Exp_shift; + word1(&u) = L >= 31 ? 1 : 1 << 31 - L; + } + } +#endif +#endif + return dval(&u); + } + + static double +b2d +#ifdef KR_headers + (a, e) Bigint *a; int *e; +#else + (Bigint *a, int *e) +#endif +{ + ULong *xa, *xa0, w, y, z; + int k; + U d; +#ifdef VAX + ULong d0, d1; +#else +#define d0 word0(&d) +#define d1 word1(&d) +#endif + + xa0 = a->x; + xa = xa0 + a->wds; + y = *--xa; +#ifdef DEBUG + if (!y) Bug("zero y in b2d"); +#endif + k = hi0bits(y); + *e = 32 - k; +#ifdef Pack_32 + if (k < Ebits) { + d0 = Exp_1 | y >> (Ebits - k); + w = xa > xa0 ? *--xa : 0; + d1 = y << ((32-Ebits) + k) | w >> (Ebits - k); + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + if (k -= Ebits) { + d0 = Exp_1 | y << k | z >> (32 - k); + y = xa > xa0 ? *--xa : 0; + d1 = z << k | y >> (32 - k); + } + else { + d0 = Exp_1 | y; + d1 = z; + } +#else + if (k < Ebits + 16) { + z = xa > xa0 ? *--xa : 0; + d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k; + w = xa > xa0 ? *--xa : 0; + y = xa > xa0 ? *--xa : 0; + d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + w = xa > xa0 ? *--xa : 0; + k -= Ebits + 16; + d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k; + y = xa > xa0 ? *--xa : 0; + d1 = w << k + 16 | y << k; +#endif + ret_d: +#ifdef VAX + word0(&d) = d0 >> 16 | d0 << 16; + word1(&d) = d1 >> 16 | d1 << 16; +#else +#undef d0 +#undef d1 +#endif + return dval(&d); + } + + static Bigint * +d2b +#ifdef KR_headers + (d, e, bits) U *d; int *e, *bits; +#else + (U *d, int *e, int *bits) +#endif +{ + Bigint *b; + int de, k; + ULong *x, y, z; +#ifndef Sudden_Underflow + int i; +#endif +#ifdef VAX + ULong d0, d1; + d0 = word0(d) >> 16 | word0(d) << 16; + d1 = word1(d) >> 16 | word1(d) << 16; +#else +#define d0 word0(d) +#define d1 word1(d) +#endif + +#ifdef Pack_32 + b = Balloc(1); +#else + b = Balloc(2); +#endif + x = b->x; + + z = d0 & Frac_mask; + d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ +#ifdef Sudden_Underflow + de = (int)(d0 >> Exp_shift); +#ifndef IBM + z |= Exp_msk11; +#endif +#else + if ((de = (int)(d0 >> Exp_shift))) + z |= Exp_msk1; +#endif +#ifdef Pack_32 + if ((y = d1)) { + if ((k = lo0bits(&y))) { + x[0] = y | z << (32 - k); + z >>= k; + } + else + x[0] = y; +#ifndef Sudden_Underflow + i = +#endif + b->wds = (x[1] = z) ? 2 : 1; + } + else { + k = lo0bits(&z); + x[0] = z; +#ifndef Sudden_Underflow + i = +#endif + b->wds = 1; + k += 32; + } +#else + if (y = d1) { + if (k = lo0bits(&y)) + if (k >= 16) { + x[0] = y | z << 32 - k & 0xffff; + x[1] = z >> k - 16 & 0xffff; + x[2] = z >> k; + i = 2; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16 | z << 16 - k & 0xffff; + x[2] = z >> k & 0xffff; + x[3] = z >> k+16; + i = 3; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16; + x[2] = z & 0xffff; + x[3] = z >> 16; + i = 3; + } + } + else { +#ifdef DEBUG + if (!z) + Bug("Zero passed to d2b"); +#endif + k = lo0bits(&z); + if (k >= 16) { + x[0] = z; + i = 0; + } + else { + x[0] = z & 0xffff; + x[1] = z >> 16; + i = 1; + } + k += 32; + } + while(!x[i]) + --i; + b->wds = i + 1; +#endif +#ifndef Sudden_Underflow + if (de) { +#endif +#ifdef IBM + *e = (de - Bias - (P-1) << 2) + k; + *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask); +#else + *e = de - Bias - (P-1) + k; + *bits = P - k; +#endif +#ifndef Sudden_Underflow + } + else { + *e = de - Bias - (P-1) + 1 + k; +#ifdef Pack_32 + *bits = 32*i - hi0bits(x[i-1]); +#else + *bits = (i+2)*16 - hi0bits(x[i]); +#endif + } +#endif + return b; + } +#undef d0 +#undef d1 + + static double +ratio +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + U da, db; + int k, ka, kb; + + dval(&da) = b2d(a, &ka); + dval(&db) = b2d(b, &kb); +#ifdef Pack_32 + k = ka - kb + 32*(a->wds - b->wds); +#else + k = ka - kb + 16*(a->wds - b->wds); +#endif +#ifdef IBM + if (k > 0) { + word0(&da) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(&da) *= 1 << k; + } + else { + k = -k; + word0(&db) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(&db) *= 1 << k; + } +#else + if (k > 0) + word0(&da) += k*Exp_msk1; + else { + k = -k; + word0(&db) += k*Exp_msk1; + } +#endif + return dval(&da) / dval(&db); + } + + static CONST double +tens[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, + 1e20, 1e21, 1e22 +#ifdef VAX + , 1e23, 1e24 +#endif + }; + + static CONST double +#ifdef IEEE_Arith +bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; +static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, +#ifdef Avoid_Underflow + 9007199254740992.*9007199254740992.e-256 + /* = 2^106 * 1e-256 */ +#else + 1e-256 +#endif + }; +/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */ +/* flag unnecessarily. It leads to a song and dance at the end of strtod. */ +#define Scale_Bit 0x10 +#define n_bigtens 5 +#else +#ifdef IBM +bigtens[] = { 1e16, 1e32, 1e64 }; +static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 }; +#define n_bigtens 3 +#else +bigtens[] = { 1e16, 1e32 }; +static CONST double tinytens[] = { 1e-16, 1e-32 }; +#define n_bigtens 2 +#endif +#endif + +#undef Need_Hexdig +#ifdef INFNAN_CHECK +#ifndef No_Hex_NaN +#define Need_Hexdig +#endif +#endif + +#ifndef Need_Hexdig +#ifndef NO_HEX_FP +#define Need_Hexdig +#endif +#endif + +#ifdef Need_Hexdig /*{*/ +#if 0 +static unsigned char hexdig[256]; + + static void +htinit(unsigned char *h, unsigned char *s, int inc) +{ + int i, j; + for(i = 0; (j = s[i]) !=0; i++) + h[j] = i + inc; + } + + static void +hexdig_init(void) /* Use of hexdig_init omitted 20121220 to avoid a */ + /* race condition when multiple threads are used. */ +{ +#define USC (unsigned char *) + htinit(hexdig, USC "0123456789", 0x10); + htinit(hexdig, USC "abcdef", 0x10 + 10); + htinit(hexdig, USC "ABCDEF", 0x10 + 10); + } +#else +static unsigned char hexdig[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0, + 0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }; +#endif +#endif /* } Need_Hexdig */ + +#ifdef INFNAN_CHECK + +#ifndef NAN_WORD0 +#define NAN_WORD0 0x7ff80000 +#endif + +#ifndef NAN_WORD1 +#define NAN_WORD1 0 +#endif + + static int +match +#ifdef KR_headers + (sp, t) char **sp, *t; +#else + (const char **sp, const char *t) +#endif +{ + int c, d; + CONST char *s = *sp; + + while((d = *t++)) { + if ((c = *++s) >= 'A' && c <= 'Z') + c += 'a' - 'A'; + if (c != d) + return 0; + } + *sp = s + 1; + return 1; + } + +#ifndef No_Hex_NaN + static void +hexnan +#ifdef KR_headers + (rvp, sp) U *rvp; CONST char **sp; +#else + (U *rvp, const char **sp) +#endif +{ + ULong c, x[2]; + CONST char *s; + int c1, havedig, udx0, xshift; + + /**** if (!hexdig['0']) hexdig_init(); ****/ + x[0] = x[1] = 0; + havedig = xshift = 0; + udx0 = 1; + s = *sp; + /* allow optional initial 0x or 0X */ + while((c = *(CONST unsigned char*)(s+1)) && c <= ' ') + ++s; + if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X')) + s += 2; + while((c = *(CONST unsigned char*)++s)) { + if ((c1 = hexdig[c])) + c = c1 & 0xf; + else if (c <= ' ') { + if (udx0 && havedig) { + udx0 = 0; + xshift = 1; + } + continue; + } +#ifdef GDTOA_NON_PEDANTIC_NANCHECK + else if (/*(*/ c == ')' && havedig) { + *sp = s + 1; + break; + } + else + return; /* invalid form: don't change *sp */ +#else + else { + do { + if (/*(*/ c == ')') { + *sp = s + 1; + break; + } + } while((c = *++s)); + break; + } +#endif + havedig = 1; + if (xshift) { + xshift = 0; + x[0] = x[1]; + x[1] = 0; + } + if (udx0) + x[0] = (x[0] << 4) | (x[1] >> 28); + x[1] = (x[1] << 4) | c; + } + if ((x[0] &= 0xfffff) || x[1]) { + word0(rvp) = Exp_mask | x[0]; + word1(rvp) = x[1]; + } + } +#endif /*No_Hex_NaN*/ +#endif /* INFNAN_CHECK */ + +#ifdef Pack_32 +#define ULbits 32 +#define kshift 5 +#define kmask 31 +#else +#define ULbits 16 +#define kshift 4 +#define kmask 15 +#endif + +#if !defined(NO_HEX_FP) || defined(Honor_FLT_ROUNDS) /*{*/ + static Bigint * +#ifdef KR_headers +increment(b) Bigint *b; +#else +increment(Bigint *b) +#endif +{ + ULong *x, *xe; + Bigint *b1; + + x = b->x; + xe = x + b->wds; + do { + if (*x < (ULong)0xffffffffL) { + ++*x; + return b; + } + *x++ = 0; + } while(x < xe); + { + if (b->wds >= b->maxwds) { + b1 = Balloc(b->k+1); + Bcopy(b1,b); + Bfree(b); + b = b1; + } + b->x[b->wds++] = 1; + } + return b; + } + +#endif /*}*/ + +#ifndef NO_HEX_FP /*{*/ + + static void +#ifdef KR_headers +rshift(b, k) Bigint *b; int k; +#else +rshift(Bigint *b, int k) +#endif +{ + ULong *x, *x1, *xe, y; + int n; + + x = x1 = b->x; + n = k >> kshift; + if (n < b->wds) { + xe = x + b->wds; + x += n; + if (k &= kmask) { + n = 32 - k; + y = *x++ >> k; + while(x < xe) { + *x1++ = (y | (*x << n)) & 0xffffffff; + y = *x++ >> k; + } + if ((*x1 = y) !=0) + x1++; + } + else + while(x < xe) + *x1++ = *x++; + } + if ((b->wds = x1 - b->x) == 0) + b->x[0] = 0; + } + + static ULong +#ifdef KR_headers +any_on(b, k) Bigint *b; int k; +#else +any_on(Bigint *b, int k) +#endif +{ + int n, nwds; + ULong *x, *x0, x1, x2; + + x = b->x; + nwds = b->wds; + n = k >> kshift; + if (n > nwds) + n = nwds; + else if (n < nwds && (k &= kmask)) { + x1 = x2 = x[n]; + x1 >>= k; + x1 <<= k; + if (x1 != x2) + return 1; + } + x0 = x; + x += n; + while(x > x0) + if (*--x) + return 1; + return 0; + } + +enum { /* rounding values: same as FLT_ROUNDS */ + Round_zero = 0, + Round_near = 1, + Round_up = 2, + Round_down = 3 + }; + + void +#ifdef KR_headers +gethex(sp, rvp, rounding, sign) + CONST char **sp; U *rvp; int rounding, sign; +#else +gethex( CONST char **sp, U *rvp, int rounding, int sign) +#endif +{ + Bigint *b; + CONST unsigned char *decpt, *s0, *s, *s1; + Long e, e1; + ULong L, lostbits, *x; + int big, denorm, esign, havedig, k, n, nbits, up, zret; +#ifdef IBM + int j; +#endif + enum { +#ifdef IEEE_Arith /*{{*/ + emax = 0x7fe - Bias - P + 1, + emin = Emin - P + 1 +#else /*}{*/ + emin = Emin - P, +#ifdef VAX + emax = 0x7ff - Bias - P + 1 +#endif +#ifdef IBM + emax = 0x7f - Bias - P +#endif +#endif /*}}*/ + }; +#ifdef USE_LOCALE + int i; +#ifdef NO_LOCALE_CACHE + const unsigned char *decimalpoint = (unsigned char*) + localeconv()->decimal_point; +#else + const unsigned char *decimalpoint; + static unsigned char *decimalpoint_cache; + if (!(s0 = decimalpoint_cache)) { + s0 = (unsigned char*)localeconv()->decimal_point; + if ((decimalpoint_cache = (unsigned char*) + MALLOC(strlen((CONST char*)s0) + 1))) { + strcpy((char*)decimalpoint_cache, (CONST char*)s0); + s0 = decimalpoint_cache; + } + } + decimalpoint = s0; +#endif +#endif + + /**** if (!hexdig['0']) hexdig_init(); ****/ + havedig = 0; + s0 = *(CONST unsigned char **)sp + 2; + while(s0[havedig] == '0') + havedig++; + s0 += havedig; + s = s0; + decpt = 0; + zret = 0; + e = 0; + if (hexdig[*s]) + havedig++; + else { + zret = 1; +#ifdef USE_LOCALE + for(i = 0; decimalpoint[i]; ++i) { + if (s[i] != decimalpoint[i]) + goto pcheck; + } + decpt = s += i; +#else + if (*s != '.') + goto pcheck; + decpt = ++s; +#endif + if (!hexdig[*s]) + goto pcheck; + while(*s == '0') + s++; + if (hexdig[*s]) + zret = 0; + havedig = 1; + s0 = s; + } + while(hexdig[*s]) + s++; +#ifdef USE_LOCALE + if (*s == *decimalpoint && !decpt) { + for(i = 1; decimalpoint[i]; ++i) { + if (s[i] != decimalpoint[i]) + goto pcheck; + } + decpt = s += i; +#else + if (*s == '.' && !decpt) { + decpt = ++s; +#endif + while(hexdig[*s]) + s++; + }/*}*/ + if (decpt) + e = -(((Long)(s-decpt)) << 2); + pcheck: + s1 = s; + big = esign = 0; + switch(*s) { + case 'p': + case 'P': + switch(*++s) { + case '-': + esign = 1; + /* no break */ + case '+': + s++; + } + if ((n = hexdig[*s]) == 0 || n > 0x19) { + s = s1; + break; + } + e1 = n - 0x10; + while((n = hexdig[*++s]) !=0 && n <= 0x19) { + if (e1 & 0xf8000000) + big = 1; + e1 = 10*e1 + n - 0x10; + } + if (esign) + e1 = -e1; + e += e1; + } + *sp = (char*)s; + if (!havedig) + *sp = (char*)s0 - 1; + if (zret) + goto retz1; + if (big) { + if (esign) { +#ifdef IEEE_Arith + switch(rounding) { + case Round_up: + if (sign) + break; + goto ret_tiny; + case Round_down: + if (!sign) + break; + goto ret_tiny; + } +#endif + goto retz; +#ifdef IEEE_Arith + ret_tinyf: + Bfree(b); + ret_tiny: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + word0(rvp) = 0; + word1(rvp) = 1; + return; +#endif /* IEEE_Arith */ + } + switch(rounding) { + case Round_near: + goto ovfl1; + case Round_up: + if (!sign) + goto ovfl1; + goto ret_big; + case Round_down: + if (sign) + goto ovfl1; + goto ret_big; + } + ret_big: + word0(rvp) = Big0; + word1(rvp) = Big1; + return; + } + n = s1 - s0 - 1; + for(k = 0; n > (1 << (kshift-2)) - 1; n >>= 1) + k++; + b = Balloc(k); + x = b->x; + n = 0; + L = 0; +#ifdef USE_LOCALE + for(i = 0; decimalpoint[i+1]; ++i); +#endif + while(s1 > s0) { +#ifdef USE_LOCALE + if (*--s1 == decimalpoint[i]) { + s1 -= i; + continue; + } +#else + if (*--s1 == '.') + continue; +#endif + if (n == ULbits) { + *x++ = L; + L = 0; + n = 0; + } + L |= (hexdig[*s1] & 0x0f) << n; + n += 4; + } + *x++ = L; + b->wds = n = x - b->x; + n = ULbits*n - hi0bits(L); + nbits = Nbits; + lostbits = 0; + x = b->x; + if (n > nbits) { + n -= nbits; + if (any_on(b,n)) { + lostbits = 1; + k = n - 1; + if (x[k>>kshift] & 1 << (k & kmask)) { + lostbits = 2; + if (k > 0 && any_on(b,k)) + lostbits = 3; + } + } + rshift(b, n); + e += n; + } + else if (n < nbits) { + n = nbits - n; + b = lshift(b, n); + e -= n; + x = b->x; + } + if (e > Emax) { + ovfl: + Bfree(b); + ovfl1: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + word0(rvp) = Exp_mask; + word1(rvp) = 0; + return; + } + denorm = 0; + if (e < emin) { + denorm = 1; + n = emin - e; + if (n >= nbits) { +#ifdef IEEE_Arith /*{*/ + switch (rounding) { + case Round_near: + if (n == nbits && (n < 2 || any_on(b,n-1))) + goto ret_tinyf; + break; + case Round_up: + if (!sign) + goto ret_tinyf; + break; + case Round_down: + if (sign) + goto ret_tinyf; + } +#endif /* } IEEE_Arith */ + Bfree(b); + retz: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + retz1: + rvp->d = 0.; + return; + } + k = n - 1; + if (lostbits) + lostbits = 1; + else if (k > 0) + lostbits = any_on(b,k); + if (x[k>>kshift] & 1 << (k & kmask)) + lostbits |= 2; + nbits -= n; + rshift(b,n); + e = emin; + } + if (lostbits) { + up = 0; + switch(rounding) { + case Round_zero: + break; + case Round_near: + if (lostbits & 2 + && (lostbits & 1) | (x[0] & 1)) + up = 1; + break; + case Round_up: + up = 1 - sign; + break; + case Round_down: + up = sign; + } + if (up) { + k = b->wds; + b = increment(b); + x = b->x; + if (denorm) { +#if 0 + if (nbits == Nbits - 1 + && x[nbits >> kshift] & 1 << (nbits & kmask)) + denorm = 0; /* not currently used */ +#endif + } + else if (b->wds > k + || ((n = nbits & kmask) !=0 + && hi0bits(x[k-1]) < 32-n)) { + rshift(b,1); + if (++e > Emax) + goto ovfl; + } + } + } +#ifdef IEEE_Arith + if (denorm) + word0(rvp) = b->wds > 1 ? b->x[1] & ~0x100000 : 0; + else + word0(rvp) = (b->x[1] & ~0x100000) | ((e + 0x3ff + 52) << 20); + word1(rvp) = b->x[0]; +#endif +#ifdef IBM + if ((j = e & 3)) { + k = b->x[0] & ((1 << j) - 1); + rshift(b,j); + if (k) { + switch(rounding) { + case Round_up: + if (!sign) + increment(b); + break; + case Round_down: + if (sign) + increment(b); + break; + case Round_near: + j = 1 << (j-1); + if (k & j && ((k & (j-1)) | lostbits)) + increment(b); + } + } + } + e >>= 2; + word0(rvp) = b->x[1] | ((e + 65 + 13) << 24); + word1(rvp) = b->x[0]; +#endif +#ifdef VAX + /* The next two lines ignore swap of low- and high-order 2 bytes. */ + /* word0(rvp) = (b->x[1] & ~0x800000) | ((e + 129 + 55) << 23); */ + /* word1(rvp) = b->x[0]; */ + word0(rvp) = ((b->x[1] & ~0x800000) >> 16) | ((e + 129 + 55) << 7) | (b->x[1] << 16); + word1(rvp) = (b->x[0] >> 16) | (b->x[0] << 16); +#endif + Bfree(b); + } +#endif /*!NO_HEX_FP}*/ + + static int +#ifdef KR_headers +dshift(b, p2) Bigint *b; int p2; +#else +dshift(Bigint *b, int p2) +#endif +{ + int rv = hi0bits(b->x[b->wds-1]) - 4; + if (p2 > 0) + rv -= p2; + return rv & kmask; + } + + static int +quorem +#ifdef KR_headers + (b, S) Bigint *b, *S; +#else + (Bigint *b, Bigint *S) +#endif +{ + int n; + ULong *bx, *bxe, q, *sx, *sxe; +#ifdef ULLong + ULLong borrow, carry, y, ys; +#else + ULong borrow, carry, y, ys; +#ifdef Pack_32 + ULong si, z, zs; +#endif +#endif + + n = S->wds; +#ifdef DEBUG + /*debug*/ if (b->wds > n) + /*debug*/ Bug("oversize b in quorem"); +#endif + if (b->wds < n) + return 0; + sx = S->x; + sxe = sx + --n; + bx = b->x; + bxe = bx + n; + q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ +#ifdef DEBUG +#ifdef NO_STRTOD_BIGCOMP + /*debug*/ if (q > 9) +#else + /* An oversized q is possible when quorem is called from bigcomp and */ + /* the input is near, e.g., twice the smallest denormalized number. */ + /*debug*/ if (q > 15) +#endif + /*debug*/ Bug("oversized quotient in quorem"); +#endif + if (q) { + borrow = 0; + carry = 0; + do { +#ifdef ULLong + ys = *sx++ * (ULLong)q + carry; + carry = ys >> 32; + y = *bx - (ys & FFFFFFFF) - borrow; + borrow = y >> 32 & (ULong)1; + *bx++ = y & FFFFFFFF; +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) * q + carry; + zs = (si >> 16) * q + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ * q + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } + while(sx <= sxe); + if (!*bxe) { + bx = b->x; + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + if (cmp(b, S) >= 0) { + q++; + borrow = 0; + carry = 0; + bx = b->x; + sx = S->x; + do { +#ifdef ULLong + ys = *sx++ + carry; + carry = ys >> 32; + y = *bx - (ys & FFFFFFFF) - borrow; + borrow = y >> 32 & (ULong)1; + *bx++ = y & FFFFFFFF; +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) + carry; + zs = (si >> 16) + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } + while(sx <= sxe); + bx = b->x; + bxe = bx + n; + if (!*bxe) { + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + return q; + } + +#if defined(Avoid_Underflow) || !defined(NO_STRTOD_BIGCOMP) /*{*/ + static double +sulp +#ifdef KR_headers + (x, bc) U *x; BCinfo *bc; +#else + (U *x, BCinfo *bc) +#endif +{ + U u; + double rv; + int i; + + rv = ulp(x); + if (!bc->scale || (i = 2*P + 1 - ((word0(x) & Exp_mask) >> Exp_shift)) <= 0) + return rv; /* Is there an example where i <= 0 ? */ + word0(&u) = Exp_1 + (i << Exp_shift); + word1(&u) = 0; + return rv * u.d; + } +#endif /*}*/ + +#ifndef NO_STRTOD_BIGCOMP + static void +bigcomp +#ifdef KR_headers + (rv, s0, bc) + U *rv; CONST char *s0; BCinfo *bc; +#else + (U *rv, const char *s0, BCinfo *bc) +#endif +{ + Bigint *b, *d; + int b2, bbits, d2, dd, dig, dsign, i, j, nd, nd0, p2, p5, speccase; + + dsign = bc->dsign; + nd = bc->nd; + nd0 = bc->nd0; + p5 = nd + bc->e0 - 1; + speccase = 0; +#ifndef Sudden_Underflow + if (rv->d == 0.) { /* special case: value near underflow-to-zero */ + /* threshold was rounded to zero */ + b = i2b(1); + p2 = Emin - P + 1; + bbits = 1; +#ifdef Avoid_Underflow + word0(rv) = (P+2) << Exp_shift; +#else + word1(rv) = 1; +#endif + i = 0; +#ifdef Honor_FLT_ROUNDS + if (bc->rounding == 1) +#endif + { + speccase = 1; + --p2; + dsign = 0; + goto have_i; + } + } + else +#endif + b = d2b(rv, &p2, &bbits); +#ifdef Avoid_Underflow + p2 -= bc->scale; +#endif + /* floor(log2(rv)) == bbits - 1 + p2 */ + /* Check for denormal case. */ + i = P - bbits; + if (i > (j = P - Emin - 1 + p2)) { +#ifdef Sudden_Underflow + Bfree(b); + b = i2b(1); + p2 = Emin; + i = P - 1; +#ifdef Avoid_Underflow + word0(rv) = (1 + bc->scale) << Exp_shift; +#else + word0(rv) = Exp_msk1; +#endif + word1(rv) = 0; +#else + i = j; +#endif + } +#ifdef Honor_FLT_ROUNDS + if (bc->rounding != 1) { + if (i > 0) + b = lshift(b, i); + if (dsign) + b = increment(b); + } + else +#endif + { + b = lshift(b, ++i); + b->x[0] |= 1; + } +#ifndef Sudden_Underflow + have_i: +#endif + p2 -= p5 + i; + d = i2b(1); + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + */ + if (p5 > 0) + d = pow5mult(d, p5); + else if (p5 < 0) + b = pow5mult(b, -p5); + if (p2 > 0) { + b2 = p2; + d2 = 0; + } + else { + b2 = 0; + d2 = -p2; + } + i = dshift(d, d2); + if ((b2 += i) > 0) + b = lshift(b, b2); + if ((d2 += i) > 0) + d = lshift(d, d2); + + /* Now b/d = exactly half-way between the two floating-point values */ + /* on either side of the input string. Compute first digit of b/d. */ + + if (!(dig = quorem(b,d))) { + b = multadd(b, 10, 0); /* very unlikely */ + dig = quorem(b,d); + } + + /* Compare b/d with s0 */ + + for(i = 0; i < nd0; ) { + if ((dd = s0[i++] - '0' - dig)) + goto ret; + if (!b->x[0] && b->wds == 1) { + if (i < nd) + dd = 1; + goto ret; + } + b = multadd(b, 10, 0); + dig = quorem(b,d); + } + for(j = bc->dp1; i++ < nd;) { + if ((dd = s0[j++] - '0' - dig)) + goto ret; + if (!b->x[0] && b->wds == 1) { + if (i < nd) + dd = 1; + goto ret; + } + b = multadd(b, 10, 0); + dig = quorem(b,d); + } + if (dig > 0 || b->x[0] || b->wds > 1) + dd = -1; + ret: + Bfree(b); + Bfree(d); +#ifdef Honor_FLT_ROUNDS + if (bc->rounding != 1) { + if (dd < 0) { + if (bc->rounding == 0) { + if (!dsign) + goto retlow1; + } + else if (dsign) + goto rethi1; + } + else if (dd > 0) { + if (bc->rounding == 0) { + if (dsign) + goto rethi1; + goto ret1; + } + if (!dsign) + goto rethi1; + dval(rv) += 2.*sulp(rv,bc); + } + else { + bc->inexact = 0; + if (dsign) + goto rethi1; + } + } + else +#endif + if (speccase) { + if (dd <= 0) + rv->d = 0.; + } + else if (dd < 0) { + if (!dsign) /* does not happen for round-near */ +retlow1: + dval(rv) -= sulp(rv,bc); + } + else if (dd > 0) { + if (dsign) { + rethi1: + dval(rv) += sulp(rv,bc); + } + } + else { + /* Exact half-way case: apply round-even rule. */ + if ((j = ((word0(rv) & Exp_mask) >> Exp_shift) - bc->scale) <= 0) { + i = 1 - j; + if (i <= 31) { + if (word1(rv) & (0x1 << i)) + goto odd; + } + else if (word0(rv) & (0x1 << (i-32))) + goto odd; + } + else if (word1(rv) & 1) { + odd: + if (dsign) + goto rethi1; + goto retlow1; + } + } + +#ifdef Honor_FLT_ROUNDS + ret1: +#endif + return; + } +#endif /* NO_STRTOD_BIGCOMP */ + + double +strtod +#ifdef KR_headers + (s00, se) CONST char *s00; char **se; +#else + (const char *s00, char **se) +#endif +{ + int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, e, e1; + int esign, i, j, k, nd, nd0, nf, nz, nz0, nz1, sign; + CONST char *s, *s0, *s1; + double aadj, aadj1; + Long L; + U aadj2, adj, rv, rv0; + ULong y, z; + BCinfo bc; + Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; +#ifdef Avoid_Underflow + ULong Lsb, Lsb1; +#endif +#ifdef SET_INEXACT + int oldinexact; +#endif +#ifndef NO_STRTOD_BIGCOMP + int req_bigcomp = 0; +#endif +#ifdef Honor_FLT_ROUNDS /*{*/ +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + bc.rounding = Flt_Rounds; +#else /*}{*/ + bc.rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: bc.rounding = 0; break; + case FE_UPWARD: bc.rounding = 2; break; + case FE_DOWNWARD: bc.rounding = 3; + } +#endif /*}}*/ +#endif /*}*/ +#ifdef USE_LOCALE + CONST char *s2; +#endif + + sign = nz0 = nz1 = nz = bc.dplen = bc.uflchk = 0; + dval(&rv) = 0.; + for(s = s00;;s++) switch(*s) { + case '-': + sign = 1; + /* no break */ + case '+': + if (*++s) + goto break2; + /* no break */ + case 0: + goto ret0; + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case ' ': + continue; + default: + goto break2; + } + break2: + if (*s == '0') { +#ifndef NO_HEX_FP /*{*/ + switch(s[1]) { + case 'x': + case 'X': +#ifdef Honor_FLT_ROUNDS + gethex(&s, &rv, bc.rounding, sign); +#else + gethex(&s, &rv, 1, sign); +#endif + goto ret; + } +#endif /*}*/ + nz0 = 1; + while(*++s == '0') ; + if (!*s) + goto ret; + } + s0 = s; + y = z = 0; + for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) + if (nd < 9) + y = 10*y + c - '0'; + else if (nd < DBL_DIG + 2) + z = 10*z + c - '0'; + nd0 = nd; + bc.dp0 = bc.dp1 = s - s0; + for(s1 = s; s1 > s0 && *--s1 == '0'; ) + ++nz1; +#ifdef USE_LOCALE + s1 = localeconv()->decimal_point; + if (c == *s1) { + c = '.'; + if (*++s1) { + s2 = s; + for(;;) { + if (*++s2 != *s1) { + c = 0; + break; + } + if (!*++s1) { + s = s2; + break; + } + } + } + } +#endif + if (c == '.') { + c = *++s; + bc.dp1 = s - s0; + bc.dplen = bc.dp1 - bc.dp0; + if (!nd) { + for(; c == '0'; c = *++s) + nz++; + if (c > '0' && c <= '9') { + bc.dp0 = s0 - s; + bc.dp1 = bc.dp0 + bc.dplen; + s0 = s; + nf += nz; + nz = 0; + goto have_dig; + } + goto dig_done; + } + for(; c >= '0' && c <= '9'; c = *++s) { + have_dig: + nz++; + if (c -= '0') { + nf += nz; + for(i = 1; i < nz; i++) + if (nd++ < 9) + y *= 10; + else if (nd <= DBL_DIG + 2) + z *= 10; + if (nd++ < 9) + y = 10*y + c; + else if (nd <= DBL_DIG + 2) + z = 10*z + c; + nz = nz1 = 0; + } + } + } + dig_done: + e = 0; + if (c == 'e' || c == 'E') { + if (!nd && !nz && !nz0) { + goto ret0; + } + s00 = s; + esign = 0; + switch(c = *++s) { + case '-': + esign = 1; + case '+': + c = *++s; + } + if (c >= '0' && c <= '9') { + while(c == '0') + c = *++s; + if (c > '0' && c <= '9') { + L = c - '0'; + s1 = s; + while((c = *++s) >= '0' && c <= '9') + L = 10*L + c - '0'; + if (s - s1 > 8 || L > 19999) + /* Avoid confusion from exponents + * so large that e might overflow. + */ + e = 19999; /* safe for 16 bit ints */ + else + e = (int)L; + if (esign) + e = -e; + } + else + e = 0; + } + else + s = s00; + } + if (!nd) { + if (!nz && !nz0) { +#ifdef INFNAN_CHECK + /* Check for Nan and Infinity */ + if (!bc.dplen) + switch(c) { + case 'i': + case 'I': + if (match(&s,"nf")) { + --s; + if (!match(&s,"inity")) + ++s; + word0(&rv) = 0x7ff00000; + word1(&rv) = 0; + goto ret; + } + break; + case 'n': + case 'N': + if (match(&s, "an")) { + word0(&rv) = NAN_WORD0; + word1(&rv) = NAN_WORD1; +#ifndef No_Hex_NaN + if (*s == '(') /*)*/ + hexnan(&rv, &s); +#endif + goto ret; + } + } +#endif /* INFNAN_CHECK */ + ret0: + s = s00; + sign = 0; + } + goto ret; + } + bc.e0 = e1 = e -= nf; + + /* Now we have nd0 digits, starting at s0, followed by a + * decimal point, followed by nd-nd0 digits. The number we're + * after is the integer represented by those digits times + * 10**e */ + + if (!nd0) + nd0 = nd; + k = nd < DBL_DIG + 2 ? nd : DBL_DIG + 2; + dval(&rv) = y; + if (k > 9) { +#ifdef SET_INEXACT + if (k > DBL_DIG) + oldinexact = get_inexact(); +#endif + dval(&rv) = tens[k - 9] * dval(&rv) + z; + } + bd0 = 0; + if (nd <= DBL_DIG +#ifndef RND_PRODQUOT +#ifndef Honor_FLT_ROUNDS + && Flt_Rounds == 1 +#endif +#endif + ) { + if (!e) + goto ret; +#ifndef ROUND_BIASED_without_Round_Up + if (e > 0) { + if (e <= Ten_pmax) { +#ifdef VAX + goto vax_ovfl_check; +#else +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + /* rv = */ rounded_product(dval(&rv), tens[e]); + goto ret; +#endif + } + i = DBL_DIG - nd; + if (e <= Ten_pmax + i) { + /* A fancier test would sometimes let us do + * this for larger i values. + */ +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + e -= i; + dval(&rv) *= tens[i]; +#ifdef VAX + /* VAX exponent range is so narrow we must + * worry about overflow here... + */ + vax_ovfl_check: + word0(&rv) -= P*Exp_msk1; + /* rv = */ rounded_product(dval(&rv), tens[e]); + if ((word0(&rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) + goto ovfl; + word0(&rv) += P*Exp_msk1; +#else + /* rv = */ rounded_product(dval(&rv), tens[e]); +#endif + goto ret; + } + } +#ifndef Inaccurate_Divide + else if (e >= -Ten_pmax) { +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + /* rv = */ rounded_quotient(dval(&rv), tens[-e]); + goto ret; + } +#endif +#endif /* ROUND_BIASED_without_Round_Up */ + } + e1 += nd - k; + +#ifdef IEEE_Arith +#ifdef SET_INEXACT + bc.inexact = 1; + if (k <= DBL_DIG) + oldinexact = get_inexact(); +#endif +#ifdef Avoid_Underflow + bc.scale = 0; +#endif +#ifdef Honor_FLT_ROUNDS + if (bc.rounding >= 2) { + if (sign) + bc.rounding = bc.rounding == 2 ? 0 : 2; + else + if (bc.rounding != 2) + bc.rounding = 0; + } +#endif +#endif /*IEEE_Arith*/ + + /* Get starting approximation = rv * 10**e1 */ + + if (e1 > 0) { + if ((i = e1 & 15)) + dval(&rv) *= tens[i]; + if (e1 &= ~15) { + if (e1 > DBL_MAX_10_EXP) { + ovfl: + /* Can't trust HUGE_VAL */ +#ifdef IEEE_Arith +#ifdef Honor_FLT_ROUNDS + switch(bc.rounding) { + case 0: /* toward 0 */ + case 3: /* toward -infinity */ + word0(&rv) = Big0; + word1(&rv) = Big1; + break; + default: + word0(&rv) = Exp_mask; + word1(&rv) = 0; + } +#else /*Honor_FLT_ROUNDS*/ + word0(&rv) = Exp_mask; + word1(&rv) = 0; +#endif /*Honor_FLT_ROUNDS*/ +#ifdef SET_INEXACT + /* set overflow bit */ + dval(&rv0) = 1e300; + dval(&rv0) *= dval(&rv0); +#endif +#else /*IEEE_Arith*/ + word0(&rv) = Big0; + word1(&rv) = Big1; +#endif /*IEEE_Arith*/ + range_err: + if (bd0) { + Bfree(bb); + Bfree(bd); + Bfree(bs); + Bfree(bd0); + Bfree(delta); + } +#ifndef NO_ERRNO + errno = ERANGE; +#endif + goto ret; + } + e1 >>= 4; + for(j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= bigtens[j]; + /* The last multiplication could overflow. */ + word0(&rv) -= P*Exp_msk1; + dval(&rv) *= bigtens[j]; + if ((z = word0(&rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-P)) + goto ovfl; + if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { + /* set to largest number */ + /* (Can't trust DBL_MAX) */ + word0(&rv) = Big0; + word1(&rv) = Big1; + } + else + word0(&rv) += P*Exp_msk1; + } + } + else if (e1 < 0) { + e1 = -e1; + if ((i = e1 & 15)) + dval(&rv) /= tens[i]; + if (e1 >>= 4) { + if (e1 >= 1 << n_bigtens) + goto undfl; +#ifdef Avoid_Underflow + if (e1 & Scale_Bit) + bc.scale = 2*P; + for(j = 0; e1 > 0; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= tinytens[j]; + if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask) + >> Exp_shift)) > 0) { + /* scaled rv is denormal; clear j low bits */ + if (j >= 32) { + if (j > 54) + goto undfl; + word1(&rv) = 0; + if (j >= 53) + word0(&rv) = (P+2)*Exp_msk1; + else + word0(&rv) &= 0xffffffff << (j-32); + } + else + word1(&rv) &= 0xffffffff << j; + } +#else + for(j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= tinytens[j]; + /* The last multiplication could underflow. */ + dval(&rv0) = dval(&rv); + dval(&rv) *= tinytens[j]; + if (!dval(&rv)) { + dval(&rv) = 2.*dval(&rv0); + dval(&rv) *= tinytens[j]; +#endif + if (!dval(&rv)) { + undfl: + dval(&rv) = 0.; + goto range_err; + } +#ifndef Avoid_Underflow + word0(&rv) = Tiny0; + word1(&rv) = Tiny1; + /* The refinement below will clean + * this approximation up. + */ + } +#endif + } + } + + /* Now the hard part -- adjusting rv to the correct value.*/ + + /* Put digits into bd: true value = bd * 10^e */ + + bc.nd = nd - nz1; +#ifndef NO_STRTOD_BIGCOMP + bc.nd0 = nd0; /* Only needed if nd > strtod_diglim, but done here */ + /* to silence an erroneous warning about bc.nd0 */ + /* possibly not being initialized. */ + if (nd > strtod_diglim) { + /* ASSERT(strtod_diglim >= 18); 18 == one more than the */ + /* minimum number of decimal digits to distinguish double values */ + /* in IEEE arithmetic. */ + i = j = 18; + if (i > nd0) + j += bc.dplen; + for(;;) { + if (--j < bc.dp1 && j >= bc.dp0) + j = bc.dp0 - 1; + if (s0[j] != '0') + break; + --i; + } + e += nd - i; + nd = i; + if (nd0 > nd) + nd0 = nd; + if (nd < 9) { /* must recompute y */ + y = 0; + for(i = 0; i < nd0; ++i) + y = 10*y + s0[i] - '0'; + for(j = bc.dp1; i < nd; ++i) + y = 10*y + s0[j++] - '0'; + } + } +#endif + bd0 = s2b(s0, nd0, nd, y, bc.dplen); + + for(;;) { + bd = Balloc(bd0->k); + Bcopy(bd, bd0); + bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */ + bs = i2b(1); + + if (e >= 0) { + bb2 = bb5 = 0; + bd2 = bd5 = e; + } + else { + bb2 = bb5 = -e; + bd2 = bd5 = 0; + } + if (bbe >= 0) + bb2 += bbe; + else + bd2 -= bbe; + bs2 = bb2; +#ifdef Honor_FLT_ROUNDS + if (bc.rounding != 1) + bs2++; +#endif +#ifdef Avoid_Underflow + Lsb = LSB; + Lsb1 = 0; + j = bbe - bc.scale; + i = j + bbbits - 1; /* logb(rv) */ + j = P + 1 - bbbits; + if (i < Emin) { /* denormal */ + i = Emin - i; + j -= i; + if (i < 32) + Lsb <<= i; + else if (i < 52) + Lsb1 = Lsb << (i-32); + else + Lsb1 = Exp_mask; + } +#else /*Avoid_Underflow*/ +#ifdef Sudden_Underflow +#ifdef IBM + j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); +#else + j = P + 1 - bbbits; +#endif +#else /*Sudden_Underflow*/ + j = bbe; + i = j + bbbits - 1; /* logb(rv) */ + if (i < Emin) /* denormal */ + j += P - Emin; + else + j = P + 1 - bbbits; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + bb2 += j; + bd2 += j; +#ifdef Avoid_Underflow + bd2 += bc.scale; +#endif + i = bb2 < bd2 ? bb2 : bd2; + if (i > bs2) + i = bs2; + if (i > 0) { + bb2 -= i; + bd2 -= i; + bs2 -= i; + } + if (bb5 > 0) { + bs = pow5mult(bs, bb5); + bb1 = mult(bs, bb); + Bfree(bb); + bb = bb1; + } + if (bb2 > 0) + bb = lshift(bb, bb2); + if (bd5 > 0) + bd = pow5mult(bd, bd5); + if (bd2 > 0) + bd = lshift(bd, bd2); + if (bs2 > 0) + bs = lshift(bs, bs2); + delta = diff(bb, bd); + bc.dsign = delta->sign; + delta->sign = 0; + i = cmp(delta, bs); +#ifndef NO_STRTOD_BIGCOMP /*{*/ + if (bc.nd > nd && i <= 0) { + if (bc.dsign) { + /* Must use bigcomp(). */ + req_bigcomp = 1; + break; + } +#ifdef Honor_FLT_ROUNDS + if (bc.rounding != 1) { + if (i < 0) { + req_bigcomp = 1; + break; + } + } + else +#endif + i = -1; /* Discarded digits make delta smaller. */ + } +#endif /*}*/ +#ifdef Honor_FLT_ROUNDS /*{*/ + if (bc.rounding != 1) { + if (i < 0) { + /* Error is less than an ulp */ + if (!delta->x[0] && delta->wds <= 1) { + /* exact */ +#ifdef SET_INEXACT + bc.inexact = 0; +#endif + break; + } + if (bc.rounding) { + if (bc.dsign) { + adj.d = 1.; + goto apply_adj; + } + } + else if (!bc.dsign) { + adj.d = -1.; + if (!word1(&rv) + && !(word0(&rv) & Frac_mask)) { + y = word0(&rv) & Exp_mask; +#ifdef Avoid_Underflow + if (!bc.scale || y > 2*P*Exp_msk1) +#else + if (y) +#endif + { + delta = lshift(delta,Log2P); + if (cmp(delta, bs) <= 0) + adj.d = -0.5; + } + } + apply_adj: +#ifdef Avoid_Underflow /*{*/ + if (bc.scale && (y = word0(&rv) & Exp_mask) + <= 2*P*Exp_msk1) + word0(&adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= + P*Exp_msk1) { + word0(&rv) += P*Exp_msk1; + dval(&rv) += adj.d*ulp(dval(&rv)); + word0(&rv) -= P*Exp_msk1; + } + else +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow}*/ + dval(&rv) += adj.d*ulp(&rv); + } + break; + } + adj.d = ratio(delta, bs); + if (adj.d < 1.) + adj.d = 1.; + if (adj.d <= 0x7ffffffe) { + /* adj = rounding ? ceil(adj) : floor(adj); */ + y = adj.d; + if (y != adj.d) { + if (!((bc.rounding>>1) ^ bc.dsign)) + y++; + adj.d = y; + } + } +#ifdef Avoid_Underflow /*{*/ + if (bc.scale && (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) + word0(&adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) { + word0(&rv) += P*Exp_msk1; + adj.d *= ulp(dval(&rv)); + if (bc.dsign) + dval(&rv) += adj.d; + else + dval(&rv) -= adj.d; + word0(&rv) -= P*Exp_msk1; + goto cont; + } +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow}*/ + adj.d *= ulp(&rv); + if (bc.dsign) { + if (word0(&rv) == Big0 && word1(&rv) == Big1) + goto ovfl; + dval(&rv) += adj.d; + } + else + dval(&rv) -= adj.d; + goto cont; + } +#endif /*}Honor_FLT_ROUNDS*/ + + if (i < 0) { + /* Error is less than half an ulp -- check for + * special case of mantissa a power of two. + */ + if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask +#ifdef IEEE_Arith /*{*/ +#ifdef Avoid_Underflow + || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1 +#else + || (word0(&rv) & Exp_mask) <= Exp_msk1 +#endif +#endif /*}*/ + ) { +#ifdef SET_INEXACT + if (!delta->x[0] && delta->wds <= 1) + bc.inexact = 0; +#endif + break; + } + if (!delta->x[0] && delta->wds <= 1) { + /* exact result */ +#ifdef SET_INEXACT + bc.inexact = 0; +#endif + break; + } + delta = lshift(delta,Log2P); + if (cmp(delta, bs) > 0) + goto drop_down; + break; + } + if (i == 0) { + /* exactly half-way between */ + if (bc.dsign) { + if ((word0(&rv) & Bndry_mask1) == Bndry_mask1 + && word1(&rv) == ( +#ifdef Avoid_Underflow + (bc.scale && (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) + ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : +#endif + 0xffffffff)) { + /*boundary case -- increment exponent*/ + if (word0(&rv) == Big0 && word1(&rv) == Big1) + goto ovfl; + word0(&rv) = (word0(&rv) & Exp_mask) + + Exp_msk1 +#ifdef IBM + | Exp_msk1 >> 4 +#endif + ; + word1(&rv) = 0; +#ifdef Avoid_Underflow + bc.dsign = 0; +#endif + break; + } + } + else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) { + drop_down: + /* boundary case -- decrement exponent */ +#ifdef Sudden_Underflow /*{{*/ + L = word0(&rv) & Exp_mask; +#ifdef IBM + if (L < Exp_msk1) +#else +#ifdef Avoid_Underflow + if (L <= (bc.scale ? (2*P+1)*Exp_msk1 : Exp_msk1)) +#else + if (L <= Exp_msk1) +#endif /*Avoid_Underflow*/ +#endif /*IBM*/ + { + if (bc.nd >nd) { + bc.uflchk = 1; + break; + } + goto undfl; + } + L -= Exp_msk1; +#else /*Sudden_Underflow}{*/ +#ifdef Avoid_Underflow + if (bc.scale) { + L = word0(&rv) & Exp_mask; + if (L <= (2*P+1)*Exp_msk1) { + if (L > (P+2)*Exp_msk1) + /* round even ==> */ + /* accept rv */ + break; + /* rv = smallest denormal */ + if (bc.nd >nd) { + bc.uflchk = 1; + break; + } + goto undfl; + } + } +#endif /*Avoid_Underflow*/ + L = (word0(&rv) & Exp_mask) - Exp_msk1; +#endif /*Sudden_Underflow}}*/ + word0(&rv) = L | Bndry_mask1; + word1(&rv) = 0xffffffff; +#ifdef IBM + goto cont; +#else +#ifndef NO_STRTOD_BIGCOMP + if (bc.nd > nd) + goto cont; +#endif + break; +#endif + } +#ifndef ROUND_BIASED +#ifdef Avoid_Underflow + if (Lsb1) { + if (!(word0(&rv) & Lsb1)) + break; + } + else if (!(word1(&rv) & Lsb)) + break; +#else + if (!(word1(&rv) & LSB)) + break; +#endif +#endif + if (bc.dsign) +#ifdef Avoid_Underflow + dval(&rv) += sulp(&rv, &bc); +#else + dval(&rv) += ulp(&rv); +#endif +#ifndef ROUND_BIASED + else { +#ifdef Avoid_Underflow + dval(&rv) -= sulp(&rv, &bc); +#else + dval(&rv) -= ulp(&rv); +#endif +#ifndef Sudden_Underflow + if (!dval(&rv)) { + if (bc.nd >nd) { + bc.uflchk = 1; + break; + } + goto undfl; + } +#endif + } +#ifdef Avoid_Underflow + bc.dsign = 1 - bc.dsign; +#endif +#endif + break; + } + if ((aadj = ratio(delta, bs)) <= 2.) { + if (bc.dsign) + aadj = aadj1 = 1.; + else if (word1(&rv) || word0(&rv) & Bndry_mask) { +#ifndef Sudden_Underflow + if (word1(&rv) == Tiny1 && !word0(&rv)) { + if (bc.nd >nd) { + bc.uflchk = 1; + break; + } + goto undfl; + } +#endif + aadj = 1.; + aadj1 = -1.; + } + else { + /* special case -- power of FLT_RADIX to be */ + /* rounded down... */ + + if (aadj < 2./FLT_RADIX) + aadj = 1./FLT_RADIX; + else + aadj *= 0.5; + aadj1 = -aadj; + } + } + else { + aadj *= 0.5; + aadj1 = bc.dsign ? aadj : -aadj; +#ifdef Check_FLT_ROUNDS + switch(bc.rounding) { + case 2: /* towards +infinity */ + aadj1 -= 0.5; + break; + case 0: /* towards 0 */ + case 3: /* towards -infinity */ + aadj1 += 0.5; + } +#else + if (Flt_Rounds == 0) + aadj1 += 0.5; +#endif /*Check_FLT_ROUNDS*/ + } + y = word0(&rv) & Exp_mask; + + /* Check for overflow */ + + if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { + dval(&rv0) = dval(&rv); + word0(&rv) -= P*Exp_msk1; + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; + if ((word0(&rv) & Exp_mask) >= + Exp_msk1*(DBL_MAX_EXP+Bias-P)) { + if (word0(&rv0) == Big0 && word1(&rv0) == Big1) + goto ovfl; + word0(&rv) = Big0; + word1(&rv) = Big1; + goto cont; + } + else + word0(&rv) += P*Exp_msk1; + } + else { +#ifdef Avoid_Underflow + if (bc.scale && y <= 2*P*Exp_msk1) { + if (aadj <= 0x7fffffff) { + if ((z = aadj) <= 0) + z = 1; + aadj = z; + aadj1 = bc.dsign ? aadj : -aadj; + } + dval(&aadj2) = aadj1; + word0(&aadj2) += (2*P+1)*Exp_msk1 - y; + aadj1 = dval(&aadj2); + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; + if (rv.d == 0.) +#ifdef NO_STRTOD_BIGCOMP + goto undfl; +#else + { + req_bigcomp = 1; + break; + } +#endif + } + else { + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; + } +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) { + dval(&rv0) = dval(&rv); + word0(&rv) += P*Exp_msk1; + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; +#ifdef IBM + if ((word0(&rv) & Exp_mask) < P*Exp_msk1) +#else + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) +#endif + { + if (word0(&rv0) == Tiny0 + && word1(&rv0) == Tiny1) { + if (bc.nd >nd) { + bc.uflchk = 1; + break; + } + goto undfl; + } + word0(&rv) = Tiny0; + word1(&rv) = Tiny1; + goto cont; + } + else + word0(&rv) -= P*Exp_msk1; + } + else { + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; + } +#else /*Sudden_Underflow*/ + /* Compute adj so that the IEEE rounding rules will + * correctly round rv + adj in some half-way cases. + * If rv * ulp(rv) is denormalized (i.e., + * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid + * trouble from bits lost to denormalization; + * example: 1.2e-307 . + */ + if (y <= (P-1)*Exp_msk1 && aadj > 1.) { + aadj1 = (double)(int)(aadj + 0.5); + if (!bc.dsign) + aadj1 = -aadj1; + } + adj.d = aadj1 * ulp(&rv); + dval(&rv) += adj.d; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + } + z = word0(&rv) & Exp_mask; +#ifndef SET_INEXACT + if (bc.nd == nd) { +#ifdef Avoid_Underflow + if (!bc.scale) +#endif + if (y == z) { + /* Can we stop now? */ + L = (Long)aadj; + aadj -= L; + /* The tolerances below are conservative. */ + if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask) { + if (aadj < .4999999 || aadj > .5000001) + break; + } + else if (aadj < .4999999/FLT_RADIX) + break; + } + } +#endif + cont: + Bfree(bb); + Bfree(bd); + Bfree(bs); + Bfree(delta); + } + Bfree(bb); + Bfree(bd); + Bfree(bs); + Bfree(bd0); + Bfree(delta); +#ifndef NO_STRTOD_BIGCOMP + if (req_bigcomp) { + bd0 = 0; + bc.e0 += nz1; + bigcomp(&rv, s0, &bc); + y = word0(&rv) & Exp_mask; + if (y == Exp_mask) + goto ovfl; + if (y == 0 && rv.d == 0.) + goto undfl; + } +#endif +#ifdef SET_INEXACT + if (bc.inexact) { + if (!oldinexact) { + word0(&rv0) = Exp_1 + (70 << Exp_shift); + word1(&rv0) = 0; + dval(&rv0) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif +#ifdef Avoid_Underflow + if (bc.scale) { + word0(&rv0) = Exp_1 - 2*P*Exp_msk1; + word1(&rv0) = 0; + dval(&rv) *= dval(&rv0); +#ifndef NO_ERRNO + /* try to avoid the bug of testing an 8087 register value */ +#ifdef IEEE_Arith + if (!(word0(&rv) & Exp_mask)) +#else + if (word0(&rv) == 0 && word1(&rv) == 0) +#endif + errno = ERANGE; +#endif + } +#endif /* Avoid_Underflow */ +#ifdef SET_INEXACT + if (bc.inexact && !(word0(&rv) & Exp_mask)) { + /* set underflow bit */ + dval(&rv0) = 1e-300; + dval(&rv0) *= dval(&rv0); + } +#endif + ret: + if (se) + *se = (char *)s; + return sign ? -dval(&rv) : dval(&rv); + } + +#ifndef MULTIPLE_THREADS + static char *dtoa_result; +#endif + + static char * +#ifdef KR_headers +rv_alloc(i) int i; +#else +rv_alloc(int i) +#endif +{ + int j, k, *r; + + j = sizeof(ULong); + for(k = 0; + sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i; + j <<= 1) + k++; + r = (int*)Balloc(k); + *r = k; + return +#ifndef MULTIPLE_THREADS + dtoa_result = +#endif + (char *)(r+1); + } + + static char * +#ifdef KR_headers +nrv_alloc(s, rve, n) char *s, **rve; int n; +#else +nrv_alloc(const char *s, char **rve, int n) +#endif +{ + char *rv, *t; + + t = rv = rv_alloc(n); + while((*t = *s++)) t++; + if (rve) + *rve = t; + return rv; + } + +/* freedtoa(s) must be used to free values s returned by dtoa + * when MULTIPLE_THREADS is #defined. It should be used in all cases, + * but for consistency with earlier versions of dtoa, it is optional + * when MULTIPLE_THREADS is not defined. + */ + + void +#ifdef KR_headers +freedtoa(s) char *s; +#else +freedtoa(char *s) +#endif +{ + Bigint *b = (Bigint *)((int *)s - 1); + b->maxwds = 1 << (b->k = *(int*)b); + Bfree(b); +#ifndef MULTIPLE_THREADS + if (s == dtoa_result) + dtoa_result = 0; +#endif + } + +/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + * + * Inspired by "How to Print Floating-Point Numbers Accurately" by + * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. + * + * Modifications: + * 1. Rather than iterating, we use a simple numeric overestimate + * to determine k = floor(log10(d)). We scale relevant + * quantities using O(log2(k)) rather than O(k) multiplications. + * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + * try to generate digits strictly left to right. Instead, we + * compute with fewer bits and propagate the carry if necessary + * when rounding the final digit up. This is often faster. + * 3. Under the assumption that input will be rounded nearest, + * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + * That is, we allow equality in stopping tests when the + * round-nearest rule will give the same floating-point value + * as would satisfaction of the stopping test with strict + * inequality. + * 4. We remove common factors of powers of 2 from relevant + * quantities. + * 5. When converting floating-point integers less than 1e16, + * we use floating-point arithmetic rather than resorting + * to multiple-precision integers. + * 6. When asked to produce fewer than 15 digits, we first try + * to get by with floating-point arithmetic; we resort to + * multiple-precision integer arithmetic only if we cannot + * guarantee that the floating-point calculation has given + * the correctly rounded result. For k requested digits and + * "uniformly" distributed input, the probability is + * something like 10^(k-15) that we must resort to the Long + * calculation. + */ + + char * +dtoa +#ifdef KR_headers + (dd, mode, ndigits, decpt, sign, rve) + double dd; int mode, ndigits, *decpt, *sign; char **rve; +#else + (double dd, int mode, int ndigits, int *decpt, int *sign, char **rve) +#endif +{ + /* Arguments ndigits, decpt, sign are similar to those + of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to 9999. + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4,5 ==> similar to 2 and 3, respectively, but (in + round-nearest mode) with the tests of mode 0 to + possibly return a shorter string that rounds to d. + With IEEE arithmetic and compilation with + -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same + as modes 2 and 3 when FLT_ROUNDS != 1. + 6-9 ==> Debugging modes similar to mode - 4: don't try + fast floating-point estimate (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + + int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1, + j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, + spec_case, try_quick; + Long L; +#ifndef Sudden_Underflow + int denorm; + ULong x; +#endif + Bigint *b, *b1, *delta, *mlo, *mhi, *S; + U d2, eps, u; + double ds; + char *s, *s0; +#ifndef No_leftright +#ifdef IEEE_Arith + U eps1; +#endif +#endif +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif +#ifdef Honor_FLT_ROUNDS /*{*/ + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ +#endif /*}*/ + +#ifndef MULTIPLE_THREADS + if (dtoa_result) { + freedtoa(dtoa_result); + dtoa_result = 0; + } +#endif + + u.d = dd; + if (word0(&u) & Sign_bit) { + /* set sign for everything, including 0's and NaNs */ + *sign = 1; + word0(&u) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign = 0; + +#if defined(IEEE_Arith) + defined(VAX) +#ifdef IEEE_Arith + if ((word0(&u) & Exp_mask) == Exp_mask) +#else + if (word0(&u) == 0x8000) +#endif + { + /* Infinity or NaN */ + *decpt = 9999; +#ifdef IEEE_Arith + if (!word1(&u) && !(word0(&u) & 0xfffff)) + return nrv_alloc("Infinity", rve, 8); +#endif + return nrv_alloc("NaN", rve, 3); + } +#endif +#ifdef IBM + dval(&u) += 0; /* normalize */ +#endif + if (!dval(&u)) { + *decpt = 1; + return nrv_alloc("0", rve, 1); + } + +#ifdef SET_INEXACT + try_quick = oldinexact = get_inexact(); + inexact = 1; +#endif +#ifdef Honor_FLT_ROUNDS + if (Rounding >= 2) { + if (*sign) + Rounding = Rounding == 2 ? 0 : 2; + else + if (Rounding != 2) + Rounding = 0; + } +#endif + + b = d2b(&u, &be, &bbits); +#ifdef Sudden_Underflow + i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); +#else + if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { +#endif + dval(&d2) = dval(&u); + word0(&d2) &= Frac_mask1; + word0(&d2) |= Exp_11; +#ifdef IBM + if (j = 11 - hi0bits(word0(&d2) & Frac_mask)) + dval(&d2) /= 1 << j; +#endif + + /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 + * log10(x) = log(x) / log(10) + * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) + * + * This suggests computing an approximation k to log10(d) by + * + * k = (i - Bias)*0.301029995663981 + * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + * + * We want k to be too large rather than too small. + * The error in the first-order Taylor series approximation + * is in our favor, so we just round up the constant enough + * to compensate for any error in the multiplication of + * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + * adding 1e-13 to the constant term more than suffices. + * Hence we adjust the constant term to 0.1760912590558. + * (We could get a more accurate k by invoking log10, + * but this is probably not worthwhile.) + */ + + i -= Bias; +#ifdef IBM + i <<= 2; + i += j; +#endif +#ifndef Sudden_Underflow + denorm = 0; + } + else { + /* d is denormalized */ + + i = bbits + be + (Bias + (P-1) - 1); + x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32) + : word1(&u) << (32 - i); + dval(&d2) = x; + word0(&d2) -= 31*Exp_msk1; /* adjust exponent */ + i -= (Bias + (P-1) - 1) + 1; + denorm = 1; + } +#endif + ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + k = (int)ds; + if (ds < 0. && ds != k) + k--; /* want k = floor(ds) */ + k_check = 1; + if (k >= 0 && k <= Ten_pmax) { + if (dval(&u) < tens[k]) + k--; + k_check = 0; + } + j = bbits - i - 1; + if (j >= 0) { + b2 = 0; + s2 = j; + } + else { + b2 = -j; + s2 = 0; + } + if (k >= 0) { + b5 = 0; + s5 = k; + s2 += k; + } + else { + b2 -= k; + b5 = -k; + s5 = 0; + } + if (mode < 0 || mode > 9) + mode = 0; + +#ifndef SET_INEXACT +#ifdef Check_FLT_ROUNDS + try_quick = Rounding == 1; +#else + try_quick = 1; +#endif +#endif /*SET_INEXACT*/ + + if (mode > 5) { + mode -= 4; + try_quick = 0; + } + leftright = 1; + ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */ + /* silence erroneous "gcc -Wall" warning. */ + switch(mode) { + case 0: + case 1: + i = 18; + ndigits = 0; + break; + case 2: + leftright = 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits = 1; + ilim = ilim1 = i = ndigits; + break; + case 3: + leftright = 0; + /* no break */ + case 5: + i = ndigits + k + 1; + ilim = i; + ilim1 = i - 1; + if (i <= 0) + i = 1; + } + s = s0 = rv_alloc(i); + +#ifdef Honor_FLT_ROUNDS + if (mode > 1 && Rounding != 1) + leftright = 0; +#endif + + if (ilim >= 0 && ilim <= Quick_max && try_quick) { + + /* Try to get by with floating-point arithmetic. */ + + i = 0; + dval(&d2) = dval(&u); + k0 = k; + ilim0 = ilim; + ieps = 2; /* conservative */ + if (k > 0) { + ds = tens[k&0xf]; + j = k >> 4; + if (j & Bletch) { + /* prevent overflows */ + j &= Bletch - 1; + dval(&u) /= bigtens[n_bigtens-1]; + ieps++; + } + for(; j; j >>= 1, i++) + if (j & 1) { + ieps++; + ds *= bigtens[i]; + } + dval(&u) /= ds; + } + else if ((j1 = -k)) { + dval(&u) *= tens[j1 & 0xf]; + for(j = j1 >> 4; j; j >>= 1, i++) + if (j & 1) { + ieps++; + dval(&u) *= bigtens[i]; + } + } + if (k_check && dval(&u) < 1. && ilim > 0) { + if (ilim1 <= 0) + goto fast_failed; + ilim = ilim1; + k--; + dval(&u) *= 10.; + ieps++; + } + dval(&eps) = ieps*dval(&u) + 7.; + word0(&eps) -= (P-1)*Exp_msk1; + if (ilim == 0) { + S = mhi = 0; + dval(&u) -= 5.; + if (dval(&u) > dval(&eps)) + goto one_digit; + if (dval(&u) < -dval(&eps)) + goto no_digits; + goto fast_failed; + } +#ifndef No_leftright + if (leftright) { + /* Use Steele & White method of only + * generating digits needed. + */ + dval(&eps) = 0.5/tens[ilim-1] - dval(&eps); +#ifdef IEEE_Arith + if (k0 < 0 && j1 >= 307) { + eps1.d = 1.01e256; /* 1.01 allows roundoff in the next few lines */ + word0(&eps1) -= Exp_msk1 * (Bias+P-1); + dval(&eps1) *= tens[j1 & 0xf]; + for(i = 0, j = (j1-256) >> 4; j; j >>= 1, i++) + if (j & 1) + dval(&eps1) *= bigtens[i]; + if (eps.d < eps1.d) + eps.d = eps1.d; + } +#endif + for(i = 0;;) { + L = dval(&u); + dval(&u) -= L; + *s++ = '0' + (int)L; + if (1. - dval(&u) < dval(&eps)) + goto bump_up; + if (dval(&u) < dval(&eps)) + goto ret1; + if (++i >= ilim) + break; + dval(&eps) *= 10.; + dval(&u) *= 10.; + } + } + else { +#endif + /* Generate ilim digits, then fix them up. */ + dval(&eps) *= tens[ilim-1]; + for(i = 1;; i++, dval(&u) *= 10.) { + L = (Long)(dval(&u)); + if (!(dval(&u) -= L)) + ilim = i; + *s++ = '0' + (int)L; + if (i == ilim) { + if (dval(&u) > 0.5 + dval(&eps)) + goto bump_up; + else if (dval(&u) < 0.5 - dval(&eps)) { + while(*--s == '0'); + s++; + goto ret1; + } + break; + } + } +#ifndef No_leftright + } +#endif + fast_failed: + s = s0; + dval(&u) = dval(&d2); + k = k0; + ilim = ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= Int_max) { + /* Yes. */ + ds = tens[k]; + if (ndigits < 0 && ilim <= 0) { + S = mhi = 0; + if (ilim < 0 || dval(&u) <= 5*ds) + goto no_digits; + goto one_digit; + } + for(i = 1;; i++, dval(&u) *= 10.) { + L = (Long)(dval(&u) / ds); + dval(&u) -= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (dval(&u) < 0) { + L--; + dval(&u) += ds; + } +#endif + *s++ = '0' + (int)L; + if (!dval(&u)) { +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + if (i == ilim) { +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch(Rounding) { + case 0: goto ret1; + case 2: goto bump_up; + } +#endif + dval(&u) += dval(&u); +#ifdef ROUND_BIASED + if (dval(&u) >= ds) +#else + if (dval(&u) > ds || (dval(&u) == ds && L & 1)) +#endif + { + bump_up: + while(*--s == '9') + if (s == s0) { + k++; + *s = '0'; + break; + } + ++*s++; + } + break; + } + } + goto ret1; + } + + m2 = b2; + m5 = b5; + mhi = mlo = 0; + if (leftright) { + i = +#ifndef Sudden_Underflow + denorm ? be + (Bias + (P-1) - 1 + 1) : +#endif +#ifdef IBM + 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); +#else + 1 + P - bbits; +#endif + b2 += i; + s2 += i; + mhi = i2b(1); + } + if (m2 > 0 && s2 > 0) { + i = m2 < s2 ? m2 : s2; + b2 -= i; + m2 -= i; + s2 -= i; + } + if (b5 > 0) { + if (leftright) { + if (m5 > 0) { + mhi = pow5mult(mhi, m5); + b1 = mult(mhi, b); + Bfree(b); + b = b1; + } + if ((j = b5 - m5)) + b = pow5mult(b, j); + } + else + b = pow5mult(b, b5); + } + S = i2b(1); + if (s5 > 0) + S = pow5mult(S, s5); + + /* Check for special case that d is a normalized power of 2. */ + + spec_case = 0; + if ((mode < 2 || leftright) +#ifdef Honor_FLT_ROUNDS + && Rounding == 1 +#endif + ) { + if (!word1(&u) && !(word0(&u) & Bndry_mask) +#ifndef Sudden_Underflow + && word0(&u) & (Exp_mask & ~Exp_msk1) +#endif + ) { + /* The special case */ + b2 += Log2P; + s2 += Log2P; + spec_case = 1; + } + } + + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + * + * Perhaps we should just compute leading 28 bits of S once + * and for all and pass them and a shift to quorem, so it + * can do shifts and ors to compute the numerator for q. + */ + i = dshift(S, s2); + b2 += i; + m2 += i; + s2 += i; + if (b2 > 0) + b = lshift(b, b2); + if (s2 > 0) + S = lshift(S, s2); + if (k_check) { + if (cmp(b,S) < 0) { + k--; + b = multadd(b, 10, 0); /* we botched the k estimate */ + if (leftright) + mhi = multadd(mhi, 10, 0); + ilim = ilim1; + } + } + if (ilim <= 0 && (mode == 3 || mode == 5)) { + if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { + /* no digits, fcvt style */ + no_digits: + k = -1 - ndigits; + goto ret; + } + one_digit: + *s++ = '1'; + k++; + goto ret; + } + if (leftright) { + if (m2 > 0) + mhi = lshift(mhi, m2); + + /* Compute mlo -- check for special case + * that d is a normalized power of 2. + */ + + mlo = mhi; + if (spec_case) { + mhi = Balloc(mhi->k); + Bcopy(mhi, mlo); + mhi = lshift(mhi, Log2P); + } + + for(i = 1;;i++) { + dig = quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string + * that will round to d? + */ + j = cmp(b, mlo); + delta = diff(S, mhi); + j1 = delta->sign ? 1 : cmp(b, delta); + Bfree(delta); +#ifndef ROUND_BIASED + if (j1 == 0 && mode != 1 && !(word1(&u) & 1) +#ifdef Honor_FLT_ROUNDS + && Rounding >= 1 +#endif + ) { + if (dig == '9') + goto round_9_up; + if (j > 0) + dig++; +#ifdef SET_INEXACT + else if (!b->x[0] && b->wds <= 1) + inexact = 0; +#endif + *s++ = dig; + goto ret; + } +#endif + if (j < 0 || (j == 0 && mode != 1 +#ifndef ROUND_BIASED + && !(word1(&u) & 1) +#endif + )) { + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto accept_dig; + } +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch(Rounding) { + case 0: goto accept_dig; + case 2: goto keep_dig; + } +#endif /*Honor_FLT_ROUNDS*/ + if (j1 > 0) { + b = lshift(b, 1); + j1 = cmp(b, S); +#ifdef ROUND_BIASED + if (j1 >= 0 /*)*/ +#else + if ((j1 > 0 || (j1 == 0 && dig & 1)) +#endif + && dig++ == '9') + goto round_9_up; + } + accept_dig: + *s++ = dig; + goto ret; + } + if (j1 > 0) { +#ifdef Honor_FLT_ROUNDS + if (!Rounding) + goto accept_dig; +#endif + if (dig == '9') { /* possible if i == 1 */ + round_9_up: + *s++ = '9'; + goto roundoff; + } + *s++ = dig + 1; + goto ret; + } +#ifdef Honor_FLT_ROUNDS + keep_dig: +#endif + *s++ = dig; + if (i == ilim) + break; + b = multadd(b, 10, 0); + if (mlo == mhi) + mlo = mhi = multadd(mhi, 10, 0); + else { + mlo = multadd(mlo, 10, 0); + mhi = multadd(mhi, 10, 0); + } + } + } + else + for(i = 1;; i++) { + *s++ = dig = quorem(b,S) + '0'; + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto ret; + } + if (i >= ilim) + break; + b = multadd(b, 10, 0); + } + + /* Round off last digit */ + +#ifdef Honor_FLT_ROUNDS + switch(Rounding) { + case 0: goto trimzeros; + case 2: goto roundoff; + } +#endif + b = lshift(b, 1); + j = cmp(b, S); +#ifdef ROUND_BIASED + if (j >= 0) +#else + if (j > 0 || (j == 0 && dig & 1)) +#endif + { + roundoff: + while(*--s == '9') + if (s == s0) { + k++; + *s++ = '1'; + goto ret; + } + ++*s++; + } + else { +#ifdef Honor_FLT_ROUNDS + trimzeros: +#endif + while(*--s == '0'); + s++; + } + ret: + Bfree(S); + if (mhi) { + if (mlo && mlo != mhi) + Bfree(mlo); + Bfree(mhi); + } + ret1: +#ifdef SET_INEXACT + if (inexact) { + if (!oldinexact) { + word0(&u) = Exp_1 + (70 << Exp_shift); + word1(&u) = 0; + dval(&u) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif + Bfree(b); + *s = 0; + *decpt = k + 1; + if (rve) + *rve = s; + return s0; + } +#ifdef __cplusplus +} +#endif diff --git a/libraries/wasm-jit/Source/ThirdParty/xxhash/LICENSE b/libraries/wasm-jit/Source/ThirdParty/xxhash/LICENSE new file mode 100644 index 000000000..7de801ed1 --- /dev/null +++ b/libraries/wasm-jit/Source/ThirdParty/xxhash/LICENSE @@ -0,0 +1,24 @@ +xxHash Library +Copyright (c) 2012-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.c b/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.c new file mode 100644 index 000000000..833b99f3b --- /dev/null +++ b/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.c @@ -0,0 +1,888 @@ +/* +* xxHash - Fast Hash algorithm +* Copyright (C) 2012-2016, Yann Collet +* +* BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following disclaimer +* in the documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* You can contact the author at : +* - xxHash homepage: http://www.xxhash.com +* - xxHash source repository : https://github.com/Cyan4973/xxHash +*/ + + +/* ************************************* +* Tuning parameters +***************************************/ +/*!XXH_FORCE_MEMORY_ACCESS : + * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable. + * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. + * The below switch allow to select different access method for improved performance. + * Method 0 (default) : use `memcpy()`. Safe and portable. + * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable). + * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`. + * Method 2 : direct access. This method doesn't depend on compiler but violate C standard. + * It can generate buggy code on targets which do not support unaligned memory accesses. + * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6) + * See http://stackoverflow.com/a/32095106/646947 for details. + * Prefer these methods in priority order (0 > 1 > 2) + */ +#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ +# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) +# define XXH_FORCE_MEMORY_ACCESS 2 +# elif defined(__INTEL_COMPILER) || \ + (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) +# define XXH_FORCE_MEMORY_ACCESS 1 +# endif +#endif + +/*!XXH_ACCEPT_NULL_INPUT_POINTER : + * If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer. + * When this option is enabled, xxHash output for null input pointers will be the same as a null-length input. + * By default, this option is disabled. To enable it, uncomment below define : + */ +/* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */ + +/*!XXH_FORCE_NATIVE_FORMAT : + * By default, xxHash library provides endian-independent Hash values, based on little-endian convention. + * Results are therefore identical for little-endian and big-endian CPU. + * This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format. + * Should endian-independence be of no importance for your application, you may set the #define below to 1, + * to improve speed for Big-endian CPU. + * This option has no impact on Little_Endian CPU. + */ +#ifndef XXH_FORCE_NATIVE_FORMAT /* can be defined externally */ +# define XXH_FORCE_NATIVE_FORMAT 0 +#endif + +/*!XXH_FORCE_ALIGN_CHECK : + * This is a minor performance trick, only useful with lots of very small keys. + * It means : check for aligned/unaligned input. + * The check costs one initial branch per hash; + * set it to 0 when the input is guaranteed to be aligned, + * or when alignment doesn't matter for performance. + */ +#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ +# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) +# define XXH_FORCE_ALIGN_CHECK 0 +# else +# define XXH_FORCE_ALIGN_CHECK 1 +# endif +#endif + + +/* ************************************* +* Includes & Memory related functions +***************************************/ +/*! Modify the local functions below should you wish to use some other memory routines +* for malloc(), free() */ +#include +static void* XXH_malloc(size_t s) { return malloc(s); } +static void XXH_free (void* p) { free(p); } +/*! and for memcpy() */ +#include +static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); } + +#define XXH_STATIC_LINKING_ONLY +#include "xxhash.h" + + +/* ************************************* +* Compiler Specific Options +***************************************/ +#ifdef _MSC_VER /* Visual Studio */ +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +# define FORCE_INLINE static __forceinline +#else +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif +# else +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +#endif + + +/* ************************************* +* Basic Types +***************************************/ +#ifndef MEM_MODULE +# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# include + typedef uint8_t BYTE; + typedef uint16_t U16; + typedef uint32_t U32; +# else + typedef unsigned char BYTE; + typedef unsigned short U16; + typedef unsigned int U32; +# endif +#endif + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) + +/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ +static U32 XXH_read32(const void* memPtr) { return *(const U32*) memPtr; } + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) + +/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ +/* currently only defined for gcc and icc */ +typedef union { U32 u32; } __attribute__((packed)) unalign; +static U32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } + +#else + +/* portable and safe solution. Generally efficient. + * see : http://stackoverflow.com/a/32095106/646947 + */ +static U32 XXH_read32(const void* memPtr) +{ + U32 val; + memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + + +/* **************************************** +* Compiler-specific Functions and Macros +******************************************/ +#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */ +#if defined(_MSC_VER) +# define XXH_rotl32(x,r) _rotl(x,r) +# define XXH_rotl64(x,r) _rotl64(x,r) +#else +# define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r))) +# define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r))) +#endif + +#if defined(_MSC_VER) /* Visual Studio */ +# define XXH_swap32 _byteswap_ulong +#elif XXH_GCC_VERSION >= 403 +# define XXH_swap32 __builtin_bswap32 +#else +static U32 XXH_swap32 (U32 x) +{ + return ((x << 24) & 0xff000000 ) | + ((x << 8) & 0x00ff0000 ) | + ((x >> 8) & 0x0000ff00 ) | + ((x >> 24) & 0x000000ff ); +} +#endif + + +/* ************************************* +* Architecture Macros +***************************************/ +typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess; + +/* XXH_CPU_LITTLE_ENDIAN can be defined externally, for example on the compiler command line */ +#ifndef XXH_CPU_LITTLE_ENDIAN + static const int g_one = 1; +# define XXH_CPU_LITTLE_ENDIAN (*(const char*)(&g_one)) +#endif + + +/* *************************** +* Memory reads +*****************************/ +typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment; + +FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align) +{ + if (align==XXH_unaligned) + return endian==XXH_littleEndian ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); + else + return endian==XXH_littleEndian ? *(const U32*)ptr : XXH_swap32(*(const U32*)ptr); +} + +FORCE_INLINE U32 XXH_readLE32(const void* ptr, XXH_endianess endian) +{ + return XXH_readLE32_align(ptr, endian, XXH_unaligned); +} + +static U32 XXH_readBE32(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); +} + + +/* ************************************* +* Macros +***************************************/ +#define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(int)(!!(c)) }; } /* use only *after* variable declarations */ +XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } + + +/* ******************************************************************* +* 32-bits hash functions +*********************************************************************/ +static const U32 PRIME32_1 = 2654435761U; +static const U32 PRIME32_2 = 2246822519U; +static const U32 PRIME32_3 = 3266489917U; +static const U32 PRIME32_4 = 668265263U; +static const U32 PRIME32_5 = 374761393U; + +static U32 XXH32_round(U32 seed, U32 input) +{ + seed += input * PRIME32_2; + seed = XXH_rotl32(seed, 13); + seed *= PRIME32_1; + return seed; +} + +FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align) +{ + const BYTE* p = (const BYTE*)input; + const BYTE* bEnd = p + len; + U32 h32; +#define XXH_get32bits(p) XXH_readLE32_align(p, endian, align) + +#ifdef XXH_ACCEPT_NULL_INPUT_POINTER + if (p==NULL) { + len=0; + bEnd=p=(const BYTE*)(size_t)16; + } +#endif + + if (len>=16) { + const BYTE* const limit = bEnd - 16; + U32 v1 = seed + PRIME32_1 + PRIME32_2; + U32 v2 = seed + PRIME32_2; + U32 v3 = seed + 0; + U32 v4 = seed - PRIME32_1; + + do { + v1 = XXH32_round(v1, XXH_get32bits(p)); p+=4; + v2 = XXH32_round(v2, XXH_get32bits(p)); p+=4; + v3 = XXH32_round(v3, XXH_get32bits(p)); p+=4; + v4 = XXH32_round(v4, XXH_get32bits(p)); p+=4; + } while (p<=limit); + + h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18); + } else { + h32 = seed + PRIME32_5; + } + + h32 += (U32) len; + + while (p+4<=bEnd) { + h32 += XXH_get32bits(p) * PRIME32_3; + h32 = XXH_rotl32(h32, 17) * PRIME32_4 ; + p+=4; + } + + while (p> 15; + h32 *= PRIME32_2; + h32 ^= h32 >> 13; + h32 *= PRIME32_3; + h32 ^= h32 >> 16; + + return h32; +} + + +XXH_PUBLIC_API unsigned int XXH32 (const void* input, size_t len, unsigned int seed) +{ +#if 0 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH32_state_t state; + XXH32_reset(&state, seed); + XXH32_update(&state, input, len); + return XXH32_digest(&state); +#else + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned); + else + return XXH32_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned); + } } + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned); + else + return XXH32_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned); +#endif +} + + + +/*====== Hash streaming ======*/ + +XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) +{ + return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); +} +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) +{ + XXH_free(statePtr); + return XXH_OK; +} + +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) +{ + memcpy(dstState, srcState, sizeof(*dstState)); +} + +XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed) +{ + XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ + memset(&state, 0, sizeof(state)-4); /* do not write into reserved, for future removal */ + state.v1 = seed + PRIME32_1 + PRIME32_2; + state.v2 = seed + PRIME32_2; + state.v3 = seed + 0; + state.v4 = seed - PRIME32_1; + memcpy(statePtr, &state, sizeof(state)); + return XXH_OK; +} + + +FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian) +{ + const BYTE* p = (const BYTE*)input; + const BYTE* const bEnd = p + len; + +#ifdef XXH_ACCEPT_NULL_INPUT_POINTER + if (input==NULL) return XXH_ERROR; +#endif + + state->total_len_32 += (unsigned)len; + state->large_len |= (len>=16) | (state->total_len_32>=16); + + if (state->memsize + len < 16) { /* fill in tmp buffer */ + XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len); + state->memsize += (unsigned)len; + return XXH_OK; + } + + if (state->memsize) { /* some data left from previous update */ + XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize); + { const U32* p32 = state->mem32; + state->v1 = XXH32_round(state->v1, XXH_readLE32(p32, endian)); p32++; + state->v2 = XXH32_round(state->v2, XXH_readLE32(p32, endian)); p32++; + state->v3 = XXH32_round(state->v3, XXH_readLE32(p32, endian)); p32++; + state->v4 = XXH32_round(state->v4, XXH_readLE32(p32, endian)); + } + p += 16-state->memsize; + state->memsize = 0; + } + + if (p <= bEnd-16) { + const BYTE* const limit = bEnd - 16; + U32 v1 = state->v1; + U32 v2 = state->v2; + U32 v3 = state->v3; + U32 v4 = state->v4; + + do { + v1 = XXH32_round(v1, XXH_readLE32(p, endian)); p+=4; + v2 = XXH32_round(v2, XXH_readLE32(p, endian)); p+=4; + v3 = XXH32_round(v3, XXH_readLE32(p, endian)); p+=4; + v4 = XXH32_round(v4, XXH_readLE32(p, endian)); p+=4; + } while (p<=limit); + + state->v1 = v1; + state->v2 = v2; + state->v3 = v3; + state->v4 = v4; + } + + if (p < bEnd) { + XXH_memcpy(state->mem32, p, (size_t)(bEnd-p)); + state->memsize = (unsigned)(bEnd-p); + } + + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void* input, size_t len) +{ + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH32_update_endian(state_in, input, len, XXH_littleEndian); + else + return XXH32_update_endian(state_in, input, len, XXH_bigEndian); +} + + + +FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess endian) +{ + const BYTE * p = (const BYTE*)state->mem32; + const BYTE* const bEnd = (const BYTE*)(state->mem32) + state->memsize; + U32 h32; + + if (state->large_len) { + h32 = XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18); + } else { + h32 = state->v3 /* == seed */ + PRIME32_5; + } + + h32 += state->total_len_32; + + while (p+4<=bEnd) { + h32 += XXH_readLE32(p, endian) * PRIME32_3; + h32 = XXH_rotl32(h32, 17) * PRIME32_4; + p+=4; + } + + while (p> 15; + h32 *= PRIME32_2; + h32 ^= h32 >> 13; + h32 *= PRIME32_3; + h32 ^= h32 >> 16; + + return h32; +} + + +XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in) +{ + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH32_digest_endian(state_in, XXH_littleEndian); + else + return XXH32_digest_endian(state_in, XXH_bigEndian); +} + + +/*====== Canonical representation ======*/ + +/*! Default XXH result types are basic unsigned 32 and 64 bits. +* The canonical representation follows human-readable write convention, aka big-endian (large digits first). +* These functions allow transformation of hash result into and from its canonical format. +* This way, hash values can be written into a file or buffer, and remain comparable across different systems and programs. +*/ + +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) +{ + XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); + memcpy(dst, &hash, sizeof(*dst)); +} + +XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) +{ + return XXH_readBE32(src); +} + + +#ifndef XXH_NO_LONG_LONG + +/* ******************************************************************* +* 64-bits hash functions +*********************************************************************/ + +/*====== Memory access ======*/ + +#ifndef MEM_MODULE +# define MEM_MODULE +# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) +# include + typedef uint64_t U64; +# else + typedef unsigned long long U64; /* if your compiler doesn't support unsigned long long, replace by another 64-bit type here. Note that xxhash.h will also need to be updated. */ +# endif +#endif + + +#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) + +/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ +static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; } + +#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) + +/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ +/* currently only defined for gcc and icc */ +typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign64; +static U64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)->u64; } + +#else + +/* portable and safe solution. Generally efficient. + * see : http://stackoverflow.com/a/32095106/646947 + */ + +static U64 XXH_read64(const void* memPtr) +{ + U64 val; + memcpy(&val, memPtr, sizeof(val)); + return val; +} + +#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ + +#if defined(_MSC_VER) /* Visual Studio */ +# define XXH_swap64 _byteswap_uint64 +#elif XXH_GCC_VERSION >= 403 +# define XXH_swap64 __builtin_bswap64 +#else +static U64 XXH_swap64 (U64 x) +{ + return ((x << 56) & 0xff00000000000000ULL) | + ((x << 40) & 0x00ff000000000000ULL) | + ((x << 24) & 0x0000ff0000000000ULL) | + ((x << 8) & 0x000000ff00000000ULL) | + ((x >> 8) & 0x00000000ff000000ULL) | + ((x >> 24) & 0x0000000000ff0000ULL) | + ((x >> 40) & 0x000000000000ff00ULL) | + ((x >> 56) & 0x00000000000000ffULL); +} +#endif + +FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align) +{ + if (align==XXH_unaligned) + return endian==XXH_littleEndian ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); + else + return endian==XXH_littleEndian ? *(const U64*)ptr : XXH_swap64(*(const U64*)ptr); +} + +FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian) +{ + return XXH_readLE64_align(ptr, endian, XXH_unaligned); +} + +static U64 XXH_readBE64(const void* ptr) +{ + return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); +} + + +/*====== xxh64 ======*/ + +static const U64 PRIME64_1 = 11400714785074694791ULL; +static const U64 PRIME64_2 = 14029467366897019727ULL; +static const U64 PRIME64_3 = 1609587929392839161ULL; +static const U64 PRIME64_4 = 9650029242287828579ULL; +static const U64 PRIME64_5 = 2870177450012600261ULL; + +static U64 XXH64_round(U64 acc, U64 input) +{ + acc += input * PRIME64_2; + acc = XXH_rotl64(acc, 31); + acc *= PRIME64_1; + return acc; +} + +static U64 XXH64_mergeRound(U64 acc, U64 val) +{ + val = XXH64_round(0, val); + acc ^= val; + acc = acc * PRIME64_1 + PRIME64_4; + return acc; +} + +FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align) +{ + const BYTE* p = (const BYTE*)input; + const BYTE* bEnd = p + len; + U64 h64; +#define XXH_get64bits(p) XXH_readLE64_align(p, endian, align) + +#ifdef XXH_ACCEPT_NULL_INPUT_POINTER + if (p==NULL) { + len=0; + bEnd=p=(const BYTE*)(size_t)32; + } +#endif + + if (len>=32) { + const BYTE* const limit = bEnd - 32; + U64 v1 = seed + PRIME64_1 + PRIME64_2; + U64 v2 = seed + PRIME64_2; + U64 v3 = seed + 0; + U64 v4 = seed - PRIME64_1; + + do { + v1 = XXH64_round(v1, XXH_get64bits(p)); p+=8; + v2 = XXH64_round(v2, XXH_get64bits(p)); p+=8; + v3 = XXH64_round(v3, XXH_get64bits(p)); p+=8; + v4 = XXH64_round(v4, XXH_get64bits(p)); p+=8; + } while (p<=limit); + + h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); + h64 = XXH64_mergeRound(h64, v1); + h64 = XXH64_mergeRound(h64, v2); + h64 = XXH64_mergeRound(h64, v3); + h64 = XXH64_mergeRound(h64, v4); + + } else { + h64 = seed + PRIME64_5; + } + + h64 += (U64) len; + + while (p+8<=bEnd) { + U64 const k1 = XXH64_round(0, XXH_get64bits(p)); + h64 ^= k1; + h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; + p+=8; + } + + if (p+4<=bEnd) { + h64 ^= (U64)(XXH_get32bits(p)) * PRIME64_1; + h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3; + p+=4; + } + + while (p> 33; + h64 *= PRIME64_2; + h64 ^= h64 >> 29; + h64 *= PRIME64_3; + h64 ^= h64 >> 32; + + return h64; +} + + +XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed) +{ +#if 0 + /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ + XXH64_state_t state; + XXH64_reset(&state, seed); + XXH64_update(&state, input, len); + return XXH64_digest(&state); +#else + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if (XXH_FORCE_ALIGN_CHECK) { + if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */ + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned); + else + return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned); + } } + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned); + else + return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned); +#endif +} + +/*====== Hash Streaming ======*/ + +XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void) +{ + return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); +} +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) +{ + XXH_free(statePtr); + return XXH_OK; +} + +XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState) +{ + memcpy(dstState, srcState, sizeof(*dstState)); +} + +XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long long seed) +{ + XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ + memset(&state, 0, sizeof(state)-8); /* do not write into reserved, for future removal */ + state.v1 = seed + PRIME64_1 + PRIME64_2; + state.v2 = seed + PRIME64_2; + state.v3 = seed + 0; + state.v4 = seed - PRIME64_1; + memcpy(statePtr, &state, sizeof(state)); + return XXH_OK; +} + +FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian) +{ + const BYTE* p = (const BYTE*)input; + const BYTE* const bEnd = p + len; + +#ifdef XXH_ACCEPT_NULL_INPUT_POINTER + if (input==NULL) return XXH_ERROR; +#endif + + state->total_len += len; + + if (state->memsize + len < 32) { /* fill in tmp buffer */ + XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len); + state->memsize += (U32)len; + return XXH_OK; + } + + if (state->memsize) { /* tmp buffer is full */ + XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, 32-state->memsize); + state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0, endian)); + state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1, endian)); + state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2, endian)); + state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3, endian)); + p += 32-state->memsize; + state->memsize = 0; + } + + if (p+32 <= bEnd) { + const BYTE* const limit = bEnd - 32; + U64 v1 = state->v1; + U64 v2 = state->v2; + U64 v3 = state->v3; + U64 v4 = state->v4; + + do { + v1 = XXH64_round(v1, XXH_readLE64(p, endian)); p+=8; + v2 = XXH64_round(v2, XXH_readLE64(p, endian)); p+=8; + v3 = XXH64_round(v3, XXH_readLE64(p, endian)); p+=8; + v4 = XXH64_round(v4, XXH_readLE64(p, endian)); p+=8; + } while (p<=limit); + + state->v1 = v1; + state->v2 = v2; + state->v3 = v3; + state->v4 = v4; + } + + if (p < bEnd) { + XXH_memcpy(state->mem64, p, (size_t)(bEnd-p)); + state->memsize = (unsigned)(bEnd-p); + } + + return XXH_OK; +} + +XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void* input, size_t len) +{ + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH64_update_endian(state_in, input, len, XXH_littleEndian); + else + return XXH64_update_endian(state_in, input, len, XXH_bigEndian); +} + +FORCE_INLINE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_endianess endian) +{ + const BYTE * p = (const BYTE*)state->mem64; + const BYTE* const bEnd = (const BYTE*)state->mem64 + state->memsize; + U64 h64; + + if (state->total_len >= 32) { + U64 const v1 = state->v1; + U64 const v2 = state->v2; + U64 const v3 = state->v3; + U64 const v4 = state->v4; + + h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); + h64 = XXH64_mergeRound(h64, v1); + h64 = XXH64_mergeRound(h64, v2); + h64 = XXH64_mergeRound(h64, v3); + h64 = XXH64_mergeRound(h64, v4); + } else { + h64 = state->v3 + PRIME64_5; + } + + h64 += (U64) state->total_len; + + while (p+8<=bEnd) { + U64 const k1 = XXH64_round(0, XXH_readLE64(p, endian)); + h64 ^= k1; + h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; + p+=8; + } + + if (p+4<=bEnd) { + h64 ^= (U64)(XXH_readLE32(p, endian)) * PRIME64_1; + h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3; + p+=4; + } + + while (p> 33; + h64 *= PRIME64_2; + h64 ^= h64 >> 29; + h64 *= PRIME64_3; + h64 ^= h64 >> 32; + + return h64; +} + +XXH_PUBLIC_API unsigned long long XXH64_digest (const XXH64_state_t* state_in) +{ + XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN; + + if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT) + return XXH64_digest_endian(state_in, XXH_littleEndian); + else + return XXH64_digest_endian(state_in, XXH_bigEndian); +} + + +/*====== Canonical representation ======*/ + +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash) +{ + XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); + if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); + memcpy(dst, &hash, sizeof(*dst)); +} + +XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src) +{ + return XXH_readBE64(src); +} + +#endif /* XXH_NO_LONG_LONG */ diff --git a/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.h b/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.h new file mode 100644 index 000000000..9d831e03b --- /dev/null +++ b/libraries/wasm-jit/Source/ThirdParty/xxhash/xxhash.h @@ -0,0 +1,293 @@ +/* + xxHash - Extremely Fast Hash algorithm + Header File + Copyright (C) 2012-2016, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - xxHash source repository : https://github.com/Cyan4973/xxHash +*/ + +/* Notice extracted from xxHash homepage : + +xxHash is an extremely fast Hash algorithm, running at RAM speed limits. +It also successfully passes all tests from the SMHasher suite. + +Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) + +Name Speed Q.Score Author +xxHash 5.4 GB/s 10 +CrapWow 3.2 GB/s 2 Andrew +MumurHash 3a 2.7 GB/s 10 Austin Appleby +SpookyHash 2.0 GB/s 10 Bob Jenkins +SBox 1.4 GB/s 9 Bret Mulvey +Lookup3 1.2 GB/s 9 Bob Jenkins +SuperFastHash 1.2 GB/s 1 Paul Hsieh +CityHash64 1.05 GB/s 10 Pike & Alakuijala +FNV 0.55 GB/s 5 Fowler, Noll, Vo +CRC32 0.43 GB/s 9 +MD5-32 0.33 GB/s 10 Ronald L. Rivest +SHA1-32 0.28 GB/s 10 + +Q.Score is a measure of quality of the hash function. +It depends on successfully passing SMHasher test set. +10 is a perfect score. + +A 64-bits version, named XXH64, is available since r35. +It offers much better speed, but for 64-bits applications only. +Name Speed on 64 bits Speed on 32 bits +XXH64 13.8 GB/s 1.9 GB/s +XXH32 6.8 GB/s 6.0 GB/s +*/ + +#ifndef XXHASH_H_5627135585666179 +#define XXHASH_H_5627135585666179 1 + +#if defined (__cplusplus) +extern "C" { +#endif + + +/* **************************** +* Definitions +******************************/ +#include /* size_t */ +typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; + + +/* **************************** +* API modifier +******************************/ +/** XXH_PRIVATE_API +* This is useful to include xxhash functions in `static` mode +* in order to inline them, and remove their symbol from the public list. +* Methodology : +* #define XXH_PRIVATE_API +* #include "xxhash.h" +* `xxhash.c` is automatically included. +* It's not useful to compile and link it as a separate module. +*/ +#ifdef XXH_PRIVATE_API +# ifndef XXH_STATIC_LINKING_ONLY +# define XXH_STATIC_LINKING_ONLY +# endif +# if defined(__GNUC__) +# define XXH_PUBLIC_API static __inline __attribute__((unused)) +# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +# define XXH_PUBLIC_API static inline +# elif defined(_MSC_VER) +# define XXH_PUBLIC_API static __inline +# else +# define XXH_PUBLIC_API static /* this version may generate warnings for unused static functions; disable the relevant warning */ +# endif +#else +# define XXH_PUBLIC_API /* do nothing */ +#endif /* XXH_PRIVATE_API */ + +/*!XXH_NAMESPACE, aka Namespace Emulation : + +If you want to include _and expose_ xxHash functions from within your own library, +but also want to avoid symbol collisions with other libraries which may also include xxHash, + +you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library +with the value of XXH_NAMESPACE (therefore, avoid NULL and numeric values). + +Note that no change is required within the calling program as long as it includes `xxhash.h` : +regular symbol name will be automatically translated by this header. +*/ +#ifdef XXH_NAMESPACE +# define XXH_CAT(A,B) A##B +# define XXH_NAME2(A,B) XXH_CAT(A,B) +# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) +# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) +# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) +# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) +# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) +# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) +# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) +# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) +# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) +# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) +# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) +# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) +# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) +# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) +# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) +# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) +# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) +# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) +# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) +#endif + + +/* ************************************* +* Version +***************************************/ +#define XXH_VERSION_MAJOR 0 +#define XXH_VERSION_MINOR 6 +#define XXH_VERSION_RELEASE 2 +#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) +XXH_PUBLIC_API unsigned XXH_versionNumber (void); + + +/*-********************************************************************** +* 32-bits hash +************************************************************************/ +typedef unsigned int XXH32_hash_t; + +/*! XXH32() : + Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input". + The memory between input & input+length must be valid (allocated and read-accessible). + "seed" can be used to alter the result predictably. + Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s */ +XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, unsigned int seed); + +/*====== Streaming ======*/ +typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */ +XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); +XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); + +XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned int seed); +XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); + +/* +These functions generate the xxHash of an input provided in multiple segments. +Note that, for small input, they are slower than single-call functions, due to state management. +For small input, prefer `XXH32()` and `XXH64()` . + +XXH state must first be allocated, using XXH*_createState() . + +Start a new hash by initializing state with a seed, using XXH*_reset(). + +Then, feed the hash state by calling XXH*_update() as many times as necessary. +Obviously, input must be allocated and read accessible. +The function returns an error code, with 0 meaning OK, and any other value meaning there is an error. + +Finally, a hash value can be produced anytime, by using XXH*_digest(). +This function returns the nn-bits hash as an int or long long. + +It's still possible to continue inserting input into the hash state after a digest, +and generate some new hashes later on, by calling again XXH*_digest(). + +When done, free XXH state space if it was allocated dynamically. +*/ + +/*====== Canonical representation ======*/ + +typedef struct { unsigned char digest[4]; } XXH32_canonical_t; +XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); +XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); + +/* Default result type for XXH functions are primitive unsigned 32 and 64 bits. +* The canonical representation uses human-readable write convention, aka big-endian (large digits first). +* These functions allow transformation of hash result into and from its canonical format. +* This way, hash values can be written into a file / memory, and remain comparable on different systems and programs. +*/ + + +#ifndef XXH_NO_LONG_LONG +/*-********************************************************************** +* 64-bits hash +************************************************************************/ +typedef unsigned long long XXH64_hash_t; + +/*! XXH64() : + Calculate the 64-bits hash of sequence of length "len" stored at memory address "input". + "seed" can be used to alter the result predictably. + This function runs faster on 64-bits systems, but slower on 32-bits systems (see benchmark). +*/ +XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, unsigned long long seed); + +/*====== Streaming ======*/ +typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ +XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); +XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); +XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); + +XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, unsigned long long seed); +XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length); +XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr); + +/*====== Canonical representation ======*/ +typedef struct { unsigned char digest[8]; } XXH64_canonical_t; +XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); +XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); +#endif /* XXH_NO_LONG_LONG */ + + +#ifdef XXH_STATIC_LINKING_ONLY + +/* ================================================================================================ + This section contains definitions which are not guaranteed to remain stable. + They may change in future versions, becoming incompatible with a different version of the library. + They shall only be used with static linking. + Never use these definitions in association with dynamic linking ! +=================================================================================================== */ + +/* These definitions are only meant to make possible + static allocation of XXH state, on stack or in a struct for example. + Never use members directly. */ + +struct XXH32_state_s { + unsigned total_len_32; + unsigned large_len; + unsigned v1; + unsigned v2; + unsigned v3; + unsigned v4; + unsigned mem32[4]; /* buffer defined as U32 for alignment */ + unsigned memsize; + unsigned reserved; /* never read nor write, will be removed in a future version */ +}; /* typedef'd to XXH32_state_t */ + +#ifndef XXH_NO_LONG_LONG /* remove 64-bits support */ +struct XXH64_state_s { + unsigned long long total_len; + unsigned long long v1; + unsigned long long v2; + unsigned long long v3; + unsigned long long v4; + unsigned long long mem64[4]; /* buffer defined as U64 for alignment */ + unsigned memsize; + unsigned reserved[2]; /* never read nor write, will be removed in a future version */ +}; /* typedef'd to XXH64_state_t */ +#endif + +#ifdef XXH_PRIVATE_API +# include "xxhash.c" /* include xxhash function bodies as `static`, for inlining */ +#endif + +#endif /* XXH_STATIC_LINKING_ONLY */ + + +#if defined (__cplusplus) +} +#endif + +#endif /* XXHASH_H_5627135585666179 */ diff --git a/libraries/wasm-jit/Source/WASM/WASMSerialization.cpp b/libraries/wasm-jit/Source/WASM/WASMSerialization.cpp new file mode 100644 index 000000000..8eafcc891 --- /dev/null +++ b/libraries/wasm-jit/Source/WASM/WASMSerialization.cpp @@ -0,0 +1,825 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Serialization.h" +#include "Inline/UTF8.h" +#include "WASM.h" +#include "IR/Module.h" +#include "IR/Operators.h" +#include "IR/Types.h" +#include "IR/Validate.h" + +using namespace Serialization; + +static void throwIfNotValidUTF8(const std::string& string) +{ + const U8* endChar = (const U8*)string.data() + string.size(); + if(UTF8::validateString((const U8*)string.data(),endChar) != endChar) + { + throw FatalSerializationException("invalid UTF-8 encoding"); + } +} + +// These serialization functions need to be declared in the IR namespace for the array serializer in the Serialization namespace to find them. +namespace IR +{ + template + void serialize(Stream& stream,ValueType& type) + { + I8 encodedValueType = -(I8)type; + serializeVarInt7(stream,encodedValueType); + if(Stream::isInput) { type = (ValueType)-encodedValueType; } + } + + FORCEINLINE static void serialize(InputStream& stream,ResultType& resultType) + { + Uptr arity; + serializeVarUInt1(stream,arity); + if(arity == 0) { resultType = ResultType::none; } + else + { + I8 encodedValueType = 0; + serializeVarInt7(stream,encodedValueType); + resultType = (ResultType)-encodedValueType; + } + } + static void serialize(OutputStream& stream,ResultType& returnType) + { + Uptr arity = returnType == ResultType::none ? 0 : 1; + serializeVarUInt1(stream,arity); + if(arity) + { + I8 encodedValueType = -(I8)returnType; + serializeVarInt7(stream,encodedValueType); + } + } + + template + void serialize(Stream& stream,SizeConstraints& sizeConstraints,bool hasMax) + { + serializeVarUInt32(stream,sizeConstraints.min); + if(hasMax) { serializeVarUInt32(stream,sizeConstraints.max); } + else if(Stream::isInput) { sizeConstraints.max = UINT64_MAX; } + } + + template + void serialize(Stream& stream,TableElementType& elementType) + { + serializeNativeValue(stream,elementType); + } + + template + void serialize(Stream& stream,TableType& tableType) + { + serialize(stream,tableType.elementType); + + Uptr flags = 0; + if(!Stream::isInput && tableType.size.max != UINT64_MAX) { flags |= 1; } + #if ENABLE_THREADING_PROTOTYPE + if(!Stream::isInput && tableType.isShared) { flags |= 2; } + serializeVarUInt32(stream,flags); + if(Stream::isInput) { tableType.isShared = (flags & 2) != 0; } + #else + serializeVarUInt32(stream,flags); + #endif + serialize(stream,tableType.size,flags & 1); + } + + template + void serialize(Stream& stream,MemoryType& memoryType) + { + Uptr flags = 0; + if(!Stream::isInput && memoryType.size.max != UINT64_MAX) { flags |= 1; } + #if ENABLE_THREADING_PROTOTYPE + if(!Stream::isInput && memoryType.isShared) { flags |= 2; } + serializeVarUInt32(stream,flags); + if(Stream::isInput) { memoryType.isShared = (flags & 2) != 0; } + #else + serializeVarUInt32(stream,flags); + #endif + serialize(stream,memoryType.size,flags & 1); + } + + template + void serialize(Stream& stream,GlobalType& globalType) + { + serialize(stream,globalType.valueType); + U8 isMutable = globalType.isMutable ? 1 : 0; + serializeVarUInt1(stream,isMutable); + if(Stream::isInput) { globalType.isMutable = isMutable != 0; } + } + + template + void serialize(Stream& stream,ObjectKind& kind) + { + serializeNativeValue(stream,*(U8*)&kind); + } + + template + void serialize(Stream& stream,Export& e) + { + serialize(stream,e.name); + throwIfNotValidUTF8(e.name); + serialize(stream,e.kind); + serializeVarUInt32(stream,e.index); + } + + template + void serialize(Stream& stream,InitializerExpression& initializer) + { + serializeNativeValue(stream,*(U8*)&initializer.type); + switch(initializer.type) + { + case InitializerExpression::Type::i32_const: serializeVarInt32(stream,initializer.i32); break; + case InitializerExpression::Type::i64_const: serializeVarInt64(stream,initializer.i64); break; + case InitializerExpression::Type::f32_const: serialize(stream,initializer.f32); break; + case InitializerExpression::Type::f64_const: serialize(stream,initializer.f64); break; + case InitializerExpression::Type::get_global: serializeVarUInt32(stream,initializer.globalIndex); break; + default: throw FatalSerializationException("invalid initializer expression opcode"); + } + serializeConstant(stream,"expected end opcode",(U8)Opcode::end); + } + + template + void serialize(Stream& stream,TableDef& tableDef) + { + serialize(stream,tableDef.type); + } + + template + void serialize(Stream& stream,MemoryDef& memoryDef) + { + serialize(stream,memoryDef.type); + } + + template + void serialize(Stream& stream,GlobalDef& globalDef) + { + serialize(stream,globalDef.type); + serialize(stream,globalDef.initializer); + } + + template + void serialize(Stream& stream,DataSegment& dataSegment) + { + serializeVarUInt32(stream,dataSegment.memoryIndex); + serialize(stream,dataSegment.baseOffset); + serialize(stream,dataSegment.data); + } + + template + void serialize(Stream& stream,TableSegment& tableSegment) + { + serializeVarUInt32(stream,tableSegment.tableIndex); + serialize(stream,tableSegment.baseOffset); + serializeArray(stream,tableSegment.indices,[](Stream& stream,Uptr& functionIndex){serializeVarUInt32(stream,functionIndex);}); + } +} + +namespace WASM +{ + using namespace IR; + using namespace Serialization; + + enum + { + magicNumber=0x6d736100, // "\0asm" + currentVersion=1 + }; + + enum class SectionType : U8 + { + unknown = 0, + user = 0, + type = 1, + import = 2, + functionDeclarations = 3, + table = 4, + memory = 5, + global = 6, + export_ = 7, + start = 8, + elem = 9, + functionDefinitions = 10, + data = 11 + }; + + FORCEINLINE void serialize(InputStream& stream,Opcode& opcode) + { + opcode = (Opcode)0; + Serialization::serializeNativeValue(stream,*(U8*)&opcode); + if(opcode > Opcode::maxSingleByteOpcode) + { + opcode = (Opcode)(U16(opcode) << 8); + Serialization::serializeNativeValue(stream,*(U8*)&opcode); + } + } + FORCEINLINE void serialize(OutputStream& stream,Opcode opcode) + { + if(opcode <= Opcode::maxSingleByteOpcode) { Serialization::serializeNativeValue(stream,*(U8*)&opcode); } + else + { + serializeNativeValue(stream,*(((U8*)&opcode) + 1)); + serializeNativeValue(stream,*(((U8*)&opcode) + 0)); + } + } + + template + void serialize(Stream& stream,NoImm&,const FunctionDef&) {} + + template + void serialize(Stream& stream,ControlStructureImm& imm,const FunctionDef&) + { + I8 encodedResultType = imm.resultType == ResultType::none ? -64 : -(I8)imm.resultType; + serializeVarInt7(stream,encodedResultType); + if(Stream::isInput) { imm.resultType = encodedResultType == -64 ? ResultType::none : (ResultType)-encodedResultType; } + } + + template + void serialize(Stream& stream,BranchImm& imm,const FunctionDef&) + { + serializeVarUInt32(stream,imm.targetDepth); + } + + void serialize(InputStream& stream,BranchTableImm& imm,FunctionDef& functionDef) + { + std::vector branchTable; + serializeArray(stream,branchTable,[](InputStream& stream,U32& targetDepth){serializeVarUInt32(stream,targetDepth);}); + imm.branchTableIndex = functionDef.branchTables.size(); + functionDef.branchTables.push_back(std::move(branchTable)); + serializeVarUInt32(stream,imm.defaultTargetDepth); + } + void serialize(OutputStream& stream,BranchTableImm& imm,FunctionDef& functionDef) + { + assert(imm.branchTableIndex < functionDef.branchTables.size()); + std::vector& branchTable = functionDef.branchTables[imm.branchTableIndex]; + serializeArray(stream,branchTable,[](OutputStream& stream,U32& targetDepth){serializeVarUInt32(stream,targetDepth);}); + serializeVarUInt32(stream,imm.defaultTargetDepth); + } + + template + void serialize(Stream& stream,LiteralImm& imm,const FunctionDef&) + { serializeVarInt32(stream,imm.value); } + + template + void serialize(Stream& stream,LiteralImm& imm,const FunctionDef&) + { serializeVarInt64(stream,imm.value); } + + template + void serialize(Stream& stream,GetOrSetVariableImm& imm,const FunctionDef&) + { serializeVarUInt32(stream,imm.variableIndex); } + + template + void serialize(Stream& stream,CallImm& imm,const FunctionDef&) + { + serializeVarUInt32(stream,imm.functionIndex); + } + + template + void serialize(Stream& stream,CallIndirectImm& imm,const FunctionDef&) + { + serializeVarUInt32(stream,imm.type.index); + + U8 reserved = 0; + serializeVarUInt1(stream,reserved); + } + + template + void serialize(Stream& stream,LoadOrStoreImm& imm,const FunctionDef&) + { + serializeVarUInt7(stream,imm.alignmentLog2); + serializeVarUInt32(stream,imm.offset); + } + template + void serialize(Stream& stream,MemoryImm& imm,const FunctionDef&) + { + U8 reserved = 0; + serializeVarUInt1(stream,reserved); + } + + #if ENABLE_SIMD_PROTOTYPE + template + void serialize(Stream& stream,V128& v128) + { + serializeNativeValue(stream,v128); + } + + template + void serialize(InputStream& stream,BoolVector& boolVector) + { + U64 mask = 0; + serializeBytes(stream,(U8*)&mask,(numLanes + 7) / 8); + for(Uptr index = 0;index < numLanes;++index) + { + boolVector.b[index] = (mask & (U64(1) << index)) != 0; + } + } + + template + void serialize(OutputStream& stream,BoolVector& boolVector) + { + U64 mask = 0; + for(Uptr index = 0;index < numLanes;++index) + { + if(boolVector.b[index]) { mask |= U64(1) << index; } + } + serializeBytes(stream,(U8*)&mask,(numLanes + 7) / 8); + } + + template + void serialize(Stream& stream,LaneIndexImm& imm,const FunctionDef&) + { + serializeVarUInt7(stream,imm.laneIndex); + } + template + void serialize(Stream& stream,ShuffleImm& imm,const FunctionDef&) + { + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + serializeVarUInt7(stream,imm.laneIndices[laneIndex]); + } + } + #endif + + #if ENABLE_THREADING_PROTOTYPE + template + void serialize(Stream& stream,LaunchThreadImm& imm,const FunctionDef&) {} + + template + void serialize(Stream& stream,AtomicLoadOrStoreImm& imm,const FunctionDef&) + { + serializeVarUInt7(stream,imm.alignmentLog2); + serializeVarUInt32(stream,imm.offset); + } + #endif + + template + void serialize(Stream& stream,LiteralImm& imm,const FunctionDef&) + { serialize(stream,imm.value); } + + template + void serializeSection(OutputStream& stream,SectionType type,SerializeSection serializeSectionBody) + { + serializeNativeValue(stream,type); + ArrayOutputStream sectionStream; + serializeSectionBody(sectionStream); + std::vector sectionBytes = sectionStream.getBytes(); + Uptr sectionNumBytes = sectionBytes.size(); + serializeVarUInt32(stream,sectionNumBytes); + serializeBytes(stream,sectionBytes.data(),sectionBytes.size()); + } + template + void serializeSection(InputStream& stream,SectionType expectedType,SerializeSection serializeSectionBody) + { + assert((SectionType)*stream.peek(sizeof(SectionType)) == expectedType); + stream.advance(sizeof(SectionType)); + Uptr numSectionBytes = 0; + serializeVarUInt32(stream,numSectionBytes); + MemoryInputStream sectionStream(stream.advance(numSectionBytes),numSectionBytes); + serializeSectionBody(sectionStream); + if(sectionStream.capacity()) { throw FatalSerializationException("section contained more data than expected"); } + } + + void serialize(OutputStream& stream,UserSection& userSection) + { + serializeConstant(stream,"expected user section (section ID 0)",(U8)SectionType::user); + ArrayOutputStream sectionStream; + serialize(sectionStream,userSection.name); + serializeBytes(sectionStream,userSection.data.data(),userSection.data.size()); + std::vector sectionBytes = sectionStream.getBytes(); + serialize(stream,sectionBytes); + } + + void serialize(InputStream& stream,UserSection& userSection) + { + serializeConstant(stream,"expected user section (section ID 0)",(U8)SectionType::user); + Uptr numSectionBytes = 0; + serializeVarUInt32(stream,numSectionBytes); + + MemoryInputStream sectionStream(stream.advance(numSectionBytes),numSectionBytes); + serialize(sectionStream,userSection.name); + throwIfNotValidUTF8(userSection.name); + userSection.data.resize(sectionStream.capacity()); + serializeBytes(sectionStream,userSection.data.data(),userSection.data.size()); + assert(!sectionStream.capacity()); + } + + struct LocalSet + { + Uptr num; + ValueType type; + }; + + template + void serialize(Stream& stream,LocalSet& localSet) + { + serializeVarUInt32(stream,localSet.num); + serialize(stream,localSet.type); + } + + struct OperatorSerializerStream + { + typedef void Result; + + OperatorSerializerStream(Serialization::OutputStream& inByteStream,FunctionDef& inFunctionDef) + : byteStream(inByteStream), functionDef(inFunctionDef) {} + + #define VISIT_OPCODE(_,name,nameString,Imm,...) \ + void name(Imm imm) const \ + { \ + Opcode opcode = Opcode::name; \ + serialize(byteStream,opcode); \ + serialize(byteStream,imm,functionDef); \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + + void unknown(Opcode opcode) + { + throw FatalSerializationException("unknown opcode"); + } + private: + Serialization::OutputStream& byteStream; + FunctionDef& functionDef; + }; + + void serializeFunctionBody(OutputStream& sectionStream,Module& module,FunctionDef& functionDef) + { + ArrayOutputStream bodyStream; + + // Convert the function's local types into LocalSets: runs of locals of the same type. + LocalSet* localSets = (LocalSet*)alloca(sizeof(LocalSet)*functionDef.nonParameterLocalTypes.size()); + Uptr numLocalSets = 0; + if(functionDef.nonParameterLocalTypes.size()) + { + localSets[0].type = ValueType::any; + localSets[0].num = 0; + for(auto localType : functionDef.nonParameterLocalTypes) + { + if(localSets[numLocalSets].type != localType) + { + if(localSets[numLocalSets].type != ValueType::any) { ++numLocalSets; } + localSets[numLocalSets].type = localType; + localSets[numLocalSets].num = 0; + } + ++localSets[numLocalSets].num; + } + if(localSets[numLocalSets].type != ValueType::any) { ++numLocalSets; } + } + + // Serialize the local sets. + serializeVarUInt32(bodyStream,numLocalSets); + for(Uptr setIndex = 0;setIndex < numLocalSets;++setIndex) { serialize(bodyStream,localSets[setIndex]); } + + // Serialize the function code. + OperatorDecoderStream irDecoderStream(functionDef.code); + OperatorSerializerStream wasmOpEncoderStream(bodyStream,functionDef); + while(irDecoderStream) { irDecoderStream.decodeOp(wasmOpEncoderStream); }; + + std::vector bodyBytes = bodyStream.getBytes(); + serialize(sectionStream,bodyBytes); + } + + void serializeFunctionBody(InputStream& sectionStream,Module& module,FunctionDef& functionDef) + { + Uptr numBodyBytes = 0; + serializeVarUInt32(sectionStream,numBodyBytes); + + MemoryInputStream bodyStream(sectionStream.advance(numBodyBytes),numBodyBytes); + + // Deserialize local sets and unpack them into a linear array of local types. + Uptr numLocalSets = 0; + serializeVarUInt32(bodyStream,numLocalSets); + for(Uptr setIndex = 0;setIndex < numLocalSets;++setIndex) + { + LocalSet localSet; + serialize(bodyStream,localSet); + for(Uptr index = 0;index < localSet.num;++index) { functionDef.nonParameterLocalTypes.push_back(localSet.type); } + } + + // Deserialize the function code, validate it, and re-encode it in the IR format. + ArrayOutputStream irCodeByteStream; + OperatorEncoderStream irEncoderStream(irCodeByteStream); + CodeValidationStream codeValidationStream(module,functionDef); + while(bodyStream.capacity()) + { + Opcode opcode; + serialize(bodyStream,opcode); + switch(opcode) + { + #define VISIT_OPCODE(_,name,nameString,Imm,...) \ + case Opcode::name: \ + { \ + Imm imm; \ + serialize(bodyStream,imm,functionDef); \ + codeValidationStream.name(imm); \ + irEncoderStream.name(imm); \ + break; \ + } + ENUM_OPERATORS(VISIT_OPCODE) + #undef VISIT_OPCODE + default: throw FatalSerializationException("unknown opcode"); + }; + }; + codeValidationStream.finish(); + + functionDef.code = std::move(irCodeByteStream.getBytes()); + } + + template + void serializeTypeSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::type,[&module](Stream& sectionStream) + { + serializeArray(sectionStream,module.types,[](Stream& stream,const FunctionType*& functionType) + { + serializeConstant(stream,"function type tag",U8(0x60)); + if(Stream::isInput) + { + std::vector parameterTypes; + ResultType returnType; + serialize(stream,parameterTypes); + serialize(stream,returnType); + functionType = FunctionType::get(returnType,parameterTypes); + } + else + { + serialize(stream,const_cast&>(functionType->parameters)); + serialize(stream,const_cast(functionType->ret)); + } + }); + }); + } + template + void serializeImportSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::import,[&module](Stream& sectionStream) + { + Uptr size = module.functions.imports.size() + + module.tables.imports.size() + + module.memories.imports.size() + + module.globals.imports.size(); + serializeVarUInt32(sectionStream,size); + if(Stream::isInput) + { + for(Uptr index = 0;index < size;++index) + { + std::string moduleName; + std::string exportName; + ObjectKind kind = ObjectKind::invalid; + serialize(sectionStream,moduleName); + serialize(sectionStream,exportName); + throwIfNotValidUTF8(moduleName); + throwIfNotValidUTF8(exportName); + serialize(sectionStream,kind); + switch(kind) + { + case ObjectKind::function: + { + U32 functionTypeIndex = 0; + serializeVarUInt32(sectionStream,functionTypeIndex); + if(functionTypeIndex >= module.types.size()) + { + throw FatalSerializationException("invalid import function type index"); + } + module.functions.imports.push_back({{functionTypeIndex},std::move(moduleName),std::move(exportName)}); + break; + } + case ObjectKind::table: + { + TableType tableType; + serialize(sectionStream,tableType); + module.tables.imports.push_back({tableType,std::move(moduleName),std::move(exportName)}); + break; + } + case ObjectKind::memory: + { + MemoryType memoryType; + serialize(sectionStream,memoryType); + module.memories.imports.push_back({memoryType,std::move(moduleName),std::move(exportName)}); + break; + } + case ObjectKind::global: + { + GlobalType globalType; + serialize(sectionStream,globalType); + module.globals.imports.push_back({globalType,std::move(moduleName),std::move(exportName)}); + break; + } + default: throw FatalSerializationException("invalid ObjectKind"); + } + } + } + else + { + for(auto& functionImport : module.functions.imports) + { + serialize(sectionStream,functionImport.moduleName); + serialize(sectionStream,functionImport.exportName); + ObjectKind kind = ObjectKind::function; + serialize(sectionStream,kind); + serializeVarUInt32(sectionStream,functionImport.type.index); + } + for(auto& tableImport : module.tables.imports) + { + serialize(sectionStream,tableImport.moduleName); + serialize(sectionStream,tableImport.exportName); + ObjectKind kind = ObjectKind::table; + serialize(sectionStream,kind); + serialize(sectionStream,tableImport.type); + } + for(auto& memoryImport : module.memories.imports) + { + serialize(sectionStream,memoryImport.moduleName); + serialize(sectionStream,memoryImport.exportName); + ObjectKind kind = ObjectKind::memory; + serialize(sectionStream,kind); + serialize(sectionStream,memoryImport.type); + } + for(auto& globalImport : module.globals.imports) + { + serialize(sectionStream,globalImport.moduleName); + serialize(sectionStream,globalImport.exportName); + ObjectKind kind = ObjectKind::global; + serialize(sectionStream,kind); + serialize(sectionStream,globalImport.type); + } + } + }); + } + + template + void serializeFunctionSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::functionDeclarations,[&module](Stream& sectionStream) + { + Uptr numFunctions = module.functions.defs.size(); + serializeVarUInt32(sectionStream,numFunctions); + if(Stream::isInput) + { + // Grow the vector one element at a time: + // try to get a serialization exception before making a huge allocation for malformed input. + module.functions.defs.clear(); + for(Uptr functionIndex = 0;functionIndex < numFunctions;++functionIndex) + { + U32 functionTypeIndex = 0; + serializeVarUInt32(sectionStream,functionTypeIndex); + if(functionTypeIndex >= module.types.size()) { throw FatalSerializationException("invalid function type index"); } + module.functions.defs.push_back({{functionTypeIndex},{},{}}); + } + module.functions.defs.shrink_to_fit(); + } + else + { + for(FunctionDef& function : module.functions.defs) + { + serializeVarUInt32(sectionStream,function.type.index); + } + } + }); + } + + template + void serializeTableSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::table,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.tables.defs); + }); + } + + template + void serializeMemorySection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::memory,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.memories.defs); + }); + } + + template + void serializeGlobalSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::global,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.globals.defs); + }); + } + + template + void serializeExportSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::export_,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.exports); + }); + } + + template + void serializeStartSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::start,[&module](Stream& sectionStream) + { + serializeVarUInt32(sectionStream,module.startFunctionIndex); + }); + } + + template + void serializeElementSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::elem,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.tableSegments); + }); + } + + template + void serializeCodeSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::functionDefinitions,[&module](Stream& sectionStream) + { + Uptr numFunctionBodies = module.functions.defs.size(); + serializeVarUInt32(sectionStream,numFunctionBodies); + if(Stream::isInput && numFunctionBodies != module.functions.defs.size()) + { throw FatalSerializationException("function and code sections have mismatched function counts"); } + for(FunctionDef& functionDef : module.functions.defs) { serializeFunctionBody(sectionStream,module,functionDef); } + }); + } + + template + void serializeDataSection(Stream& moduleStream,Module& module) + { + serializeSection(moduleStream,SectionType::data,[&module](Stream& sectionStream) + { + serialize(sectionStream,module.dataSegments); + }); + } + + void serializeModule(OutputStream& moduleStream,Module& module) + { + serializeConstant(moduleStream,"magic number",U32(magicNumber)); + serializeConstant(moduleStream,"version",U32(currentVersion)); + + if(module.types.size() > 0) { serializeTypeSection(moduleStream,module); } + if(module.functions.imports.size() > 0 + || module.tables.imports.size() > 0 + || module.memories.imports.size() > 0 + || module.globals.imports.size() > 0) { serializeImportSection(moduleStream,module); } + if(module.functions.defs.size() > 0) { serializeFunctionSection(moduleStream,module); } + if(module.tables.defs.size() > 0) { serializeTableSection(moduleStream,module); } + if(module.memories.defs.size() > 0) { serializeMemorySection(moduleStream,module); } + if(module.globals.defs.size() > 0) { serializeGlobalSection(moduleStream,module); } + if(module.exports.size() > 0) { serializeExportSection(moduleStream,module); } + if(module.startFunctionIndex != UINTPTR_MAX) { serializeStartSection(moduleStream,module); } + if(module.tableSegments.size() > 0) { serializeElementSection(moduleStream,module); } + if(module.functions.defs.size() > 0) { serializeCodeSection(moduleStream,module); } + if(module.dataSegments.size() > 0) { serializeDataSection(moduleStream,module); } + + for(auto& userSection : module.userSections) { serialize(moduleStream,userSection); } + } + void serializeModule(InputStream& moduleStream,Module& module) + { + serializeConstant(moduleStream,"magic number",U32(magicNumber)); + serializeConstant(moduleStream,"version",U32(currentVersion)); + + SectionType lastKnownSectionType = SectionType::unknown; + while(moduleStream.capacity()) + { + const SectionType sectionType = *(SectionType*)moduleStream.peek(sizeof(SectionType)); + if(sectionType != SectionType::user) + { + if(sectionType > lastKnownSectionType) { lastKnownSectionType = sectionType; } + else { throw FatalSerializationException("incorrect order for known section"); } + } + switch(sectionType) + { + case SectionType::type: serializeTypeSection(moduleStream,module); break; + case SectionType::import: serializeImportSection(moduleStream,module); break; + case SectionType::functionDeclarations: serializeFunctionSection(moduleStream,module); break; + case SectionType::table: serializeTableSection(moduleStream,module); break; + case SectionType::memory: serializeMemorySection(moduleStream,module); break; + case SectionType::global: serializeGlobalSection(moduleStream,module); break; + case SectionType::export_: serializeExportSection(moduleStream,module); break; + case SectionType::start: serializeStartSection(moduleStream,module); break; + case SectionType::elem: serializeElementSection(moduleStream,module); break; + case SectionType::functionDefinitions: serializeCodeSection(moduleStream,module); break; + case SectionType::data: serializeDataSection(moduleStream,module); break; + case SectionType::user: + { + UserSection& userSection = *module.userSections.insert(module.userSections.end(),UserSection()); + serialize(moduleStream,userSection); + break; + } + default: throw FatalSerializationException("unknown section ID"); + }; + }; + } + + void serialize(Serialization::InputStream& stream,Module& module) + { + serializeModule(stream,module); + IR::validateDefinitions(module); + } + void serialize(Serialization::OutputStream& stream,const Module& module) + { + serializeModule(stream,const_cast(module)); + } +} diff --git a/libraries/wasm-jit/Source/WAST/Lexer.cpp b/libraries/wasm-jit/Source/WAST/Lexer.cpp new file mode 100644 index 000000000..fbf42b9ce --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Lexer.cpp @@ -0,0 +1,369 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Timing.h" +#include "Inline/Errors.h" +#include "NFA.h" +#include "Regexp.h" +#include "WAST.h" +#include "Lexer.h" +#include "IR/Operators.h" + +#include + +namespace WAST +{ + const char* describeToken(TokenType tokenType) + { + assert(tokenType < numTokenTypes); + static const char* tokenDescriptions[] = + { + // This ENUM_TOKENS must come before the literalTokenPairs definition that redefines VISIT_OPERATOR_TOKEN. + #define VISIT_TOKEN(name,description) description, + ENUM_TOKENS() + #undef VISIT_TOKEN + }; + return tokenDescriptions[tokenType]; + } + + struct StaticData + { + NFA::Machine nfaMachine; + StaticData(); + }; + + static NFA::StateIndex createTokenSeparatorPeekState(NFA::Builder* builder,NFA::StateIndex finalState) + { + NFA::CharSet tokenSeparatorCharSet; + tokenSeparatorCharSet.add(U8(' ')); + tokenSeparatorCharSet.add(U8('\t')); + tokenSeparatorCharSet.add(U8('\r')); + tokenSeparatorCharSet.add(U8('\n')); + tokenSeparatorCharSet.add(U8('=')); + tokenSeparatorCharSet.add(U8('(')); + tokenSeparatorCharSet.add(U8(')')); + tokenSeparatorCharSet.add(U8(';')); + tokenSeparatorCharSet.add(0); + auto separatorState = addState(builder); + NFA::addEdge(builder,separatorState,tokenSeparatorCharSet,finalState | NFA::edgeDoesntConsumeInputFlag); + return separatorState; + } + + static void addLiteralToNFA(const char* string,NFA::Builder* builder,NFA::StateIndex initialState,NFA::StateIndex finalState) + { + // Add the literal to the NFA, one character at a time, reusing existing states that are reachable by the same string. + for(const char* nextChar = string;*nextChar;++nextChar) + { + NFA::StateIndex nextState = NFA::getNonTerminalEdge(builder,initialState,*nextChar); + if(nextState < 0 || nextChar[1] == 0) + { + nextState = nextChar[1] == 0 ? finalState : addState(builder); + NFA::addEdge(builder,initialState,NFA::CharSet(*nextChar),nextState); + } + initialState = nextState; + } + } + + StaticData::StaticData() + { + static const std::pair regexpTokenPairs[] = + { + {t_decimalInt,"[+\\-]?\\d+"}, + {t_decimalFloat,"[+\\-]?\\d+\\.\\d*([eE][+\\-]?\\d+)?"}, + {t_decimalFloat,"[+\\-]?\\d+[eE][+\\-]?\\d+"}, + + {t_hexInt,"[+\\-]?0[xX][\\da-fA-F]+"}, + {t_hexFloat,"[+\\-]?0[xX][\\da-fA-F]+\\.[\\da-fA-F]*([pP][+\\-]?\\d+)?"}, + {t_hexFloat,"[+\\-]?0[xX][\\da-fA-F]+[pP][+\\-]?\\d+"}, + + {t_floatNaN,"[+\\-]?nan(:0[xX][\\da-fA-F]+)?"}, + {t_floatInf,"[+\\-]?inf(inity)?"}, + + {t_string,"\"([^\"\n\\\\]*(\\\\([^0-9a-fA-Fu]|[0-9a-fA-F][0-9a-fA-F]|u\\{[0-9a-fA-F]+})))*\""}, + + {t_name,"\\$[a-zA-Z0-9\'_+*/~=<>!?@#$%&|:`.\\-\\^\\\\]+"}, + }; + + static const std::tuple literalTokenTuples[] = + { + std::make_tuple(t_leftParenthesis,"(",true), + std::make_tuple(t_rightParenthesis,")",true), + std::make_tuple(t_equals,"=",true), + + #define VISIT_TOKEN(name,description) std::make_tuple(t_##name,#name,false), + ENUM_LITERAL_TOKENS() + #undef VISIT_TOKEN + + #undef VISIT_OPERATOR_TOKEN + #define VISIT_OPERATOR_TOKEN(_,name,nameString,...) std::make_tuple(t_##name,nameString,false), + ENUM_OPERATORS(VISIT_OPERATOR_TOKEN) + #undef VISIT_OPERATOR_TOKEN + }; + + Timing::Timer timer; + + NFA::Builder* nfaBuilder = NFA::createBuilder(); + + for(auto regexpTokenPair : regexpTokenPairs) + { + NFA::StateIndex finalState = NFA::maximumTerminalStateIndex - (NFA::StateIndex)regexpTokenPair.first; + finalState = createTokenSeparatorPeekState(nfaBuilder,finalState); + Regexp::addToNFA(regexpTokenPair.second,nfaBuilder,0,finalState); + } + + for(auto literalTokenTuple : literalTokenTuples) + { + const TokenType tokenType = std::get<0>(literalTokenTuple); + const char* literalString = std::get<1>(literalTokenTuple); + const bool isTokenSeparator = std::get<2>(literalTokenTuple); + + NFA::StateIndex finalState = NFA::maximumTerminalStateIndex - (NFA::StateIndex)tokenType; + if(!isTokenSeparator) { finalState = createTokenSeparatorPeekState(nfaBuilder,finalState); } + + addLiteralToNFA(literalString,nfaBuilder,0,finalState); + } + + #ifndef _DEBUG + if(false) + #endif + { + std::ofstream debugGraphStream("nfaGraph.dot"); + debugGraphStream << NFA::dumpNFAGraphViz(nfaBuilder).c_str(); + debugGraphStream.close(); + } + + nfaMachine = NFA::Machine(nfaBuilder); + + #ifndef _DEBUG + if(false) + #endif + { + std::ofstream debugGraphStream("dfaGraph.dot"); + debugGraphStream << nfaMachine.dumpDFAGraphViz().c_str(); + debugGraphStream.close(); + } + + Timing::logTimer("built lexer tables",timer); + } + + struct LineInfo + { + U32* lineStarts; + U32 numLineStarts; + }; + + inline bool isRecoveryPointChar(char c) + { + switch(c) + { + // Recover lexing at the next whitespace or parenthesis. + case ' ': case '\t': case '\r': case '\n': case '\f': + case '(': case ')': + return true; + default: + return false; + }; + } + + Token* lex(const char* string,Uptr stringLength,LineInfo*& outLineInfo) + { + static StaticData staticData; + + Timing::Timer timer; + + if(stringLength > UINT32_MAX) + { + Errors::fatalf("cannot lex strings with more than %u characters",UINT32_MAX); + } + + // Allocate enough memory up front for a token and newline for each character in the input string. + Token* tokens = (Token*)malloc(sizeof(Token) * (stringLength + 1)); + U32* lineStarts = (U32*)malloc(sizeof(U32) * (stringLength + 2)); + + Token* nextToken = tokens; + U32* nextLineStart = lineStarts; + *nextLineStart++ = 0; + + const char* nextChar = string; + while(true) + { + // Skip whitespace and comments (keeping track of newlines). + while(true) + { + switch(*nextChar) + { + // Single line comments. + case ';': + if(nextChar[1] != ';') { goto doneSkippingWhitespace; } + else + { + nextChar += 2; + while(*nextChar) + { + if(*nextChar == '\n') + { + // Emit a line start for the newline. + *nextLineStart++ = U32(nextChar - string + 1); + ++nextChar; + break; + } + ++nextChar; + }; + } + break; + // Delimited (possibly multi-line) comments. + case '(': + if(nextChar[1] != ';') { goto doneSkippingWhitespace; } + else + { + const char* firstCommentChar = nextChar; + nextChar += 2; + U32 commentDepth = 1; + while(commentDepth) + { + if(nextChar[0] == ';' && nextChar[1] == ')') + { + --commentDepth; + nextChar += 2; + } + else if(nextChar[0] == '(' && nextChar[1] == ';') + { + ++commentDepth; + nextChar += 2; + } + else if(nextChar == string + stringLength) + { + // Emit an unterminated comment token. + nextToken->type = t_unterminatedComment; + nextToken->begin = U32(firstCommentChar - string); + ++nextToken; + goto doneSkippingWhitespace; + } + else + { + if(*nextChar == '\n') + { + // Emit a line start for the newline. + *nextLineStart++ = U32(nextChar - string); + } + ++nextChar; + } + }; + } + break; + // Whitespace. + case '\n': + *nextLineStart++ = U32(nextChar - string + 1); + ++nextChar; + break; + case ' ': case '\t': case '\r': case '\f': + ++nextChar; + break; + default: + goto doneSkippingWhitespace; + }; + } + doneSkippingWhitespace: + + // Once we reach a non-whitespace, non-comment character, feed characters into the NFA until it reaches a terminal state. + nextToken->begin = U32(nextChar - string); + NFA::StateIndex terminalState = staticData.nfaMachine.feed(nextChar); + if(terminalState != NFA::unmatchedCharacterTerminal) + { + nextToken->type = TokenType(NFA::maximumTerminalStateIndex - (NFA::StateIndex)terminalState); + ++nextToken; + } + else + { + if(nextToken->begin < stringLength) + { + // Emit an unrecognized token. + nextToken->type = t_unrecognized; + ++nextToken; + + // Advance until a recovery point. + while(!isRecoveryPointChar(*nextChar)) { ++nextChar; } + } + else + { + break; + } + } + } + + // Emit an end token to mark the end of the token stream. + nextToken->type = t_eof; + ++nextToken; + + // Emit an extra line start for the end of the file, so you can find the end of a line with lineStarts[line + 1]. + *nextLineStart++ = U32(nextChar - string) + 1; + + // Shrink the line start and token arrays to the final number of tokens/lines. + const Uptr numLineStarts = nextLineStart - lineStarts; + const Uptr numTokens = nextToken - tokens; + lineStarts = (U32*)realloc(lineStarts,sizeof(U32) * numLineStarts); + tokens = (Token*)realloc(tokens,sizeof(Token) * numTokens); + + // Create the LineInfo object that encapsulates the line start information. + outLineInfo = new LineInfo {lineStarts,U32(numLineStarts)}; + + Timing::logRatePerSecond("lexed WAST file",timer,stringLength/1024.0/1024.0,"MB"); + Log::printf(Log::Category::metrics,"lexer produced %u tokens (%.1fMB)\n",numTokens,numTokens*sizeof(Token)/1024.0/1024.0); + + return tokens; + } + + void freeTokens(Token* tokens) + { + free(tokens); + } + + void freeLineInfo(LineInfo* lineInfo) + { + free(lineInfo->lineStarts); + delete lineInfo; + } + + static Uptr getLineOffset(const LineInfo* lineInfo,Uptr lineIndex) + { + errorUnless(lineIndex < lineInfo->numLineStarts); + return lineInfo->lineStarts[lineIndex]; + } + + TextFileLocus calcLocusFromOffset(const char* string,const LineInfo* lineInfo,Uptr charOffset) + { + // Binary search the line starts for the last one before charIndex. + Uptr minLineIndex = 0; + Uptr maxLineIndex = lineInfo->numLineStarts - 1; + while(maxLineIndex > minLineIndex) + { + const Uptr medianLineIndex = (minLineIndex + maxLineIndex + 1) / 2; + if(charOffset < lineInfo->lineStarts[medianLineIndex]) + { + maxLineIndex = medianLineIndex - 1; + } + else if(charOffset > lineInfo->lineStarts[medianLineIndex]) + { + minLineIndex = medianLineIndex; + } + else + { + minLineIndex = maxLineIndex = medianLineIndex; + } + }; + TextFileLocus result; + result.newlines = (U32)minLineIndex; + + // Count tabs and and spaces from the beginning of the line to charIndex. + for(U32 index = lineInfo->lineStarts[result.newlines];index < charOffset;++index) + { + if(string[index] == '\t') { ++result.tabs; } + else { ++result.characters; } + } + + // Copy the full source line into the TextFileLocus for context. + const Uptr lineStartOffset = getLineOffset(lineInfo,result.newlines); + Uptr lineEndOffset = getLineOffset(lineInfo,result.newlines+1) - 1; + result.sourceLine = std::string(string + lineStartOffset,lineEndOffset - lineStartOffset); + + return result; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/Lexer.h b/libraries/wasm-jit/Source/WAST/Lexer.h new file mode 100644 index 000000000..56cc93626 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Lexer.h @@ -0,0 +1,115 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "IR/Operators.h" +#include "WAST.h" + +#define VISIT_OPERATOR_TOKEN(opcode,name,nameString,...) \ + VISIT_TOKEN(name,"'" #nameString "'") + +#define VISIT_LITERAL_TOKEN(name) VISIT_TOKEN(name,"'" #name "'") +#define ENUM_LITERAL_TOKENS() \ + VISIT_LITERAL_TOKEN(module) \ + VISIT_LITERAL_TOKEN(func) \ + VISIT_LITERAL_TOKEN(type) \ + VISIT_LITERAL_TOKEN(table) \ + VISIT_LITERAL_TOKEN(export) \ + VISIT_LITERAL_TOKEN(import) \ + VISIT_LITERAL_TOKEN(memory) \ + VISIT_LITERAL_TOKEN(data) \ + VISIT_LITERAL_TOKEN(elem) \ + VISIT_LITERAL_TOKEN(start) \ + VISIT_LITERAL_TOKEN(param) \ + VISIT_LITERAL_TOKEN(result) \ + VISIT_LITERAL_TOKEN(local) \ + VISIT_LITERAL_TOKEN(global) \ + VISIT_LITERAL_TOKEN(assert_return) \ + VISIT_LITERAL_TOKEN(assert_return_canonical_nan) \ + VISIT_LITERAL_TOKEN(assert_return_arithmetic_nan) \ + VISIT_LITERAL_TOKEN(assert_trap) \ + VISIT_LITERAL_TOKEN(assert_invalid) \ + VISIT_LITERAL_TOKEN(assert_unlinkable) \ + VISIT_LITERAL_TOKEN(assert_malformed) \ + VISIT_LITERAL_TOKEN(assert_exhaustion) \ + VISIT_LITERAL_TOKEN(invoke) \ + VISIT_LITERAL_TOKEN(get) \ + VISIT_LITERAL_TOKEN(align) \ + VISIT_LITERAL_TOKEN(offset) \ + VISIT_LITERAL_TOKEN(then) \ + VISIT_LITERAL_TOKEN(register) \ + VISIT_LITERAL_TOKEN(mut) \ + VISIT_LITERAL_TOKEN(i32) \ + VISIT_LITERAL_TOKEN(i64) \ + VISIT_LITERAL_TOKEN(f32) \ + VISIT_LITERAL_TOKEN(f64) \ + VISIT_LITERAL_TOKEN(anyfunc) \ + VISIT_LITERAL_TOKEN(shared) \ + VISIT_LITERAL_TOKEN(quote) \ + VISIT_LITERAL_TOKEN(binary) \ + ENUM_SIMD_LITERAL_TOKENS() + +#if !ENABLE_SIMD_PROTOTYPE +#define ENUM_SIMD_LITERAL_TOKENS() +#else +#define ENUM_SIMD_LITERAL_TOKENS() \ + VISIT_LITERAL_TOKEN(v128) \ + VISIT_LITERAL_TOKEN(b8x16) \ + VISIT_LITERAL_TOKEN(b16x8) \ + VISIT_LITERAL_TOKEN(b32x4) \ + VISIT_LITERAL_TOKEN(b64x2) +#endif + +#define ENUM_TOKENS() \ + VISIT_TOKEN(eof,"eof") \ + \ + VISIT_TOKEN(unterminatedComment,"unterminated comment") \ + VISIT_TOKEN(unrecognized,"unrecognized token") \ + \ + VISIT_TOKEN(decimalFloat,"decimal float literal") \ + VISIT_TOKEN(decimalInt,"decimal int literal") \ + VISIT_TOKEN(hexFloat,"hexadecimal float literal") \ + VISIT_TOKEN(hexInt,"hexadecimal int literal") \ + VISIT_TOKEN(floatNaN,"float NaN literal") \ + VISIT_TOKEN(floatInf,"float infinity literal") \ + VISIT_TOKEN(string,"string literal") \ + VISIT_TOKEN(name,"name literal") \ + \ + VISIT_TOKEN(leftParenthesis,"'('") \ + VISIT_TOKEN(rightParenthesis,"')'") \ + VISIT_TOKEN(equals,"'='") \ + \ + ENUM_LITERAL_TOKENS() \ + \ + ENUM_OPERATORS(VISIT_OPERATOR_TOKEN) + +namespace WAST +{ + enum TokenType : U16 + { + #define VISIT_TOKEN(name,description) t_##name, + ENUM_TOKENS() + #undef VISIT_TOKEN + numTokenTypes + }; + + PACKED_STRUCT( + struct Token + { + TokenType type; + U32 begin; + }); + + struct LineInfo; + + // Lexes a string and returns an array of tokens. + // Also returns a pointer in outLineInfo to the information necessary to resolve line/column numbers for the tokens. + // The caller should pass the tokens and line info to freeTokens/freeLineInfo, respectively, when it is done with them. + Token* lex(const char* string,Uptr stringLength,LineInfo*& outLineInfo); + + void freeTokens(Token* tokens); + void freeLineInfo(LineInfo* lineInfo); + + const char* describeToken(TokenType tokenType); + + TextFileLocus calcLocusFromOffset(const char* string,const LineInfo* lineInfo,Uptr charOffset); +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/NFA.cpp b/libraries/wasm-jit/Source/WAST/NFA.cpp new file mode 100644 index 000000000..6aca8ddf6 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/NFA.cpp @@ -0,0 +1,601 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "Inline/Timing.h" +#include "Platform/Platform.h" +#include "NFA.h" +#include +#include +#include +#include +#include + +namespace NFA +{ + typedef std::vector StateSet; + + template + void addUnique(std::vector& vector,const Element& element) + { + for(const auto& existingElement : vector) + { + if(existingElement == element) + { + return; + } + } + vector.push_back(element); + } + + struct NFAState + { + std::map nextStateToPredicateMap; + std::vector epsilonNextStates; + }; + + struct Builder + { + std::vector nfaStates; + }; + + Builder* createBuilder() + { + auto builder = new Builder(); + addState(builder); + return builder; + } + + StateIndex addState(Builder* builder) + { + assert(builder->nfaStates.size() < INT16_MAX); + builder->nfaStates.emplace_back(); + return StateIndex(builder->nfaStates.size() - 1); + } + + void addEdge(Builder* builder,StateIndex initialState,const CharSet& predicate,StateIndex nextState) + { + CharSet& transitionPredicate = builder->nfaStates[initialState].nextStateToPredicateMap[nextState]; + transitionPredicate = transitionPredicate | predicate; + } + + void addEpsilonEdge(Builder* builder,StateIndex initialState,StateIndex nextState) + { + addUnique(builder->nfaStates[initialState].epsilonNextStates,nextState); + } + + StateIndex getNonTerminalEdge(Builder* builder,StateIndex initialState,char c) + { + for(const auto& nextStateToPredicatePair : builder->nfaStates[initialState].nextStateToPredicateMap) + { + if(nextStateToPredicatePair.first >= 0 && nextStateToPredicatePair.second.contains((U8)c)) + { + return nextStateToPredicatePair.first; + } + } + + return unmatchedCharacterTerminal; + } + + struct DFAState + { + StateIndex nextStateByChar[256]; + DFAState() + { + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + nextStateByChar[charIndex] = unmatchedCharacterTerminal | edgeDoesntConsumeInputFlag; + } + } + }; + + std::vector convertToDFA(Builder* builder) + { + Timing::Timer timer; + + std::vector dfaStates; + std::map nfaStateSetToDFAStateMap; + std::vector dfaStateToNFAStateSetMap; + std::vector pendingDFAStates; + + nfaStateSetToDFAStateMap.emplace(StateSet {0},(StateIndex)0); + dfaStateToNFAStateSetMap.emplace_back(StateSet {0}); + dfaStates.emplace_back(); + pendingDFAStates.push_back((StateIndex)0); + + Uptr maxLocalStates = 0; + Uptr maxDFANextStates = 0; + + while(pendingDFAStates.size()) + { + const StateIndex currentDFAStateIndex = pendingDFAStates.back(); + pendingDFAStates.pop_back(); + + const StateSet currentStateSet = dfaStateToNFAStateSetMap[currentDFAStateIndex]; + + // Expand the set of current states to include all states reachable by epsilon transitions from the current states. + StateSet epsilonClosureCurrentStateSet = currentStateSet; + for(Uptr scanIndex = 0;scanIndex < epsilonClosureCurrentStateSet.size();++scanIndex) + { + StateIndex scanState = epsilonClosureCurrentStateSet[scanIndex]; + if(scanState >= 0) + { + for(auto epsilonNextState : builder->nfaStates[scanState].epsilonNextStates) + { + addUnique(epsilonClosureCurrentStateSet,epsilonNextState); + } + } + } + + // Find the subset of the non-terminal states in the current set. + StateSet nonTerminalCurrentStateSet; + StateIndex currentTerminalState = unmatchedCharacterTerminal | edgeDoesntConsumeInputFlag; + bool hasCurrentTerminalState = false; + for(auto stateIndex : epsilonClosureCurrentStateSet) + { + if(stateIndex >= 0) + { + addUnique(nonTerminalCurrentStateSet,stateIndex); + } + else + { + if(hasCurrentTerminalState) + { + Errors::fatalf("NFA has multiple possible terminal states for the same input"); + } + hasCurrentTerminalState = true; + currentTerminalState = stateIndex | edgeDoesntConsumeInputFlag; + } + } + + // Build a compact index of the states following all states in the current set. + std::map stateIndexToLocalStateIndexMap; + std::vector localStateIndexToStateIndexMap; + for(auto stateIndex : nonTerminalCurrentStateSet) + { + const NFAState& nfaState = builder->nfaStates[stateIndex]; + for(auto transition : nfaState.nextStateToPredicateMap) + { + if(!stateIndexToLocalStateIndexMap.count(transition.first)) + { + stateIndexToLocalStateIndexMap.emplace(transition.first,(StateIndex)localStateIndexToStateIndexMap.size()); + localStateIndexToStateIndexMap.emplace_back(transition.first); + } + } + } + + if(!stateIndexToLocalStateIndexMap.count(currentTerminalState)) + { + stateIndexToLocalStateIndexMap.emplace(currentTerminalState,(StateIndex)localStateIndexToStateIndexMap.size()); + localStateIndexToStateIndexMap.emplace_back(currentTerminalState); + } + + enum { numSupportedLocalStates = 64 }; + typedef DenseStaticIntSet LocalStateSet; + + const Uptr numLocalStates = stateIndexToLocalStateIndexMap.size(); + assert(numLocalStates <= numSupportedLocalStates); + maxLocalStates = std::max(maxLocalStates,numLocalStates); + + // Combine the [nextState][char] transition maps for current states and transpose to [char][nextState] + // After building the compact index of referenced states, the nextState set can be represented as a 64-bit mask. + LocalStateSet charToLocalStateSet[256]; + for(auto stateIndex : nonTerminalCurrentStateSet) + { + const NFAState& nfaState = builder->nfaStates[stateIndex]; + for(auto transition : nfaState.nextStateToPredicateMap) + { + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + if(transition.second.contains((char)charIndex)) + { + charToLocalStateSet[charIndex].add(stateIndexToLocalStateIndexMap.at(transition.first)); + } + } + } + } + + const LocalStateSet currentTerminalStateLocalSet(stateIndexToLocalStateIndexMap.at(currentTerminalState)); + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + if(charToLocalStateSet[charIndex].isEmpty()) + { + charToLocalStateSet[charIndex] = currentTerminalStateLocalSet; + } + } + + // Find the set of unique local state sets that follow this state set. + std::vector uniqueLocalNextStateSets; + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + const LocalStateSet localStateSet = charToLocalStateSet[charIndex]; + if(!localStateSet.isEmpty()) + { + addUnique(uniqueLocalNextStateSets,localStateSet); + } + } + + // For each unique local state set that follows this state set, find or create a corresponding DFA state. + std::map localStateSetToDFAStateIndexMap; + for(auto localNextStateSet : uniqueLocalNextStateSets) + { + // Convert the local state set bit mask to a global NFA state set. + StateSet nextStateSet; + { + LocalStateSet residualLocalStateSet = localNextStateSet; + while(true) + { + const StateIndex localStateIndex = residualLocalStateSet.getSmallestMember(); + if(localStateIndex == numSupportedLocalStates) { break; } + + nextStateSet.push_back(localStateIndexToStateIndexMap.at(localStateIndex)); + residualLocalStateSet.remove(localStateIndex); + }; + } + + if(nextStateSet.size() == 1 && *nextStateSet.begin() < 0) + { + localStateSetToDFAStateIndexMap.insert(std::make_pair(localNextStateSet,*nextStateSet.begin())); + } + else + { + // Find an existing DFA state corresponding to this NFA state set. + auto nextDFAStateIt = nfaStateSetToDFAStateMap.find(nextStateSet); + StateIndex nextDFAStateIndex; + if(nextDFAStateIt != nfaStateSetToDFAStateMap.end()) + { + localStateSetToDFAStateIndexMap.emplace(localNextStateSet,nextDFAStateIt->second); + } + else + { + // If no corresponding DFA state existing yet, create a new one and add it to the queue + // of pending states to process. + nextDFAStateIndex = (StateIndex)dfaStates.size(); + localStateSetToDFAStateIndexMap.emplace(localNextStateSet,nextDFAStateIndex); + nfaStateSetToDFAStateMap.insert(std::make_pair(nextStateSet,nextDFAStateIndex)); + dfaStateToNFAStateSetMap.emplace_back(nextStateSet); + dfaStates.emplace_back(); + pendingDFAStates.push_back(nextDFAStateIndex); + } + } + } + + // Set up the DFA transition map. + DFAState& dfaState = dfaStates[nfaStateSetToDFAStateMap[currentStateSet]]; + for(auto localStateSetToDFAStateIndex : localStateSetToDFAStateIndexMap) + { + const LocalStateSet localStateSet = localStateSetToDFAStateIndex.first; + const StateIndex nextDFAStateIndex = localStateSetToDFAStateIndex.second; + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + if(charToLocalStateSet[charIndex] == localStateSet) + { + dfaState.nextStateByChar[charIndex] = nextDFAStateIndex; + } + } + } + maxDFANextStates = std::max(maxDFANextStates,(Uptr)uniqueLocalNextStateSets.size()); + }; + + Timing::logTimer("translated NFA->DFA",timer); + Log::printf(Log::Category::metrics," translated NFA with %u states to DFA with %u states\n",builder->nfaStates.size(),dfaStates.size()); + Log::printf(Log::Category::metrics," maximum number of states following a NFA state set: %u\n",maxLocalStates); + Log::printf(Log::Category::metrics," maximum number of states following a DFA state: %u\n",maxDFANextStates); + + return dfaStates; + } + + struct StateTransitionsByChar + { + U8 c; + StateIndex* nextStateByInitialState; + Uptr numStates; + StateTransitionsByChar(U8 inC,Uptr inNumStates): c(inC), nextStateByInitialState(nullptr), numStates(inNumStates) {} + StateTransitionsByChar(StateTransitionsByChar&& inMove) + : c(inMove.c), nextStateByInitialState(inMove.nextStateByInitialState), numStates(inMove.numStates) + { + inMove.nextStateByInitialState = nullptr; + } + ~StateTransitionsByChar() { if(nextStateByInitialState) { delete [] nextStateByInitialState; } } + + void operator=(StateTransitionsByChar&& inMove) + { + c = inMove.c; + nextStateByInitialState = inMove.nextStateByInitialState; + numStates = inMove.numStates; + inMove.nextStateByInitialState = nullptr; + } + + bool operator<(const StateTransitionsByChar& right) const + { + assert(numStates == right.numStates); + return memcmp(nextStateByInitialState,right.nextStateByInitialState,sizeof(StateIndex)*numStates) < 0; + } + bool operator!=(const StateTransitionsByChar& right) const + { + assert(numStates == right.numStates); + return memcmp(nextStateByInitialState,right.nextStateByInitialState,sizeof(StateIndex)*numStates) != 0; + } + }; + + Machine::Machine(Builder* builder) + { + // Convert the NFA constructed by the builder to a DFA. + std::vector dfaStates = convertToDFA(builder); + assert(dfaStates.size() <= internalMaxStates); + delete builder; + + Timing::Timer timer; + + // Transpose the [state][character] transition map to [character][state]. + std::vector stateTransitionsByChar; + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + stateTransitionsByChar.push_back(StateTransitionsByChar((U8)charIndex,dfaStates.size())); + stateTransitionsByChar[charIndex].nextStateByInitialState = new StateIndex[dfaStates.size()]; + for(Uptr stateIndex = 0;stateIndex < dfaStates.size();++stateIndex) + { stateTransitionsByChar[charIndex].nextStateByInitialState[stateIndex] = dfaStates[stateIndex].nextStateByChar[charIndex]; } + } + + // Sort the [character][state] transition map by the [state] column. + numStates = dfaStates.size(); + std::sort(stateTransitionsByChar.begin(),stateTransitionsByChar.end()); + + // Build a minimal set of character equivalence classes that have the same transition across all states. + U8 characterToClassMap[256]; + U8 representativeCharsByClass[256]; + numClasses = 1; + characterToClassMap[stateTransitionsByChar[0].c] = 0; + representativeCharsByClass[0] = stateTransitionsByChar[0].c; + for(Uptr charIndex = 1;charIndex < stateTransitionsByChar.size();++charIndex) + { + if(stateTransitionsByChar[charIndex] != stateTransitionsByChar[charIndex-1]) + { + representativeCharsByClass[numClasses] = stateTransitionsByChar[charIndex].c; + ++numClasses; + } + characterToClassMap[stateTransitionsByChar[charIndex].c] = U8(numClasses - 1); + } + + // Build a [charClass][state] transition map. + stateAndOffsetToNextStateMap = new InternalStateIndex[numClasses * numStates]; + for(Uptr classIndex = 0;classIndex < numClasses;++classIndex) + { + for(Uptr stateIndex = 0;stateIndex < numStates;++stateIndex) + { + stateAndOffsetToNextStateMap[stateIndex + classIndex * numStates] = InternalStateIndex(dfaStates[stateIndex].nextStateByChar[representativeCharsByClass[classIndex]]); + } + } + + // Build a map from character index to offset into [charClass][initialState] transition map. + assert((numClasses - 1) * (numStates - 1) <= UINT32_MAX); + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + charToOffsetMap[charIndex] = U32(numStates * characterToClassMap[charIndex]); + } + + Timing::logTimer("reduced DFA character classes",timer); + Log::printf(Log::Category::metrics," reduced DFA character classes to %u\n",numClasses); + } + + Machine::~Machine() + { + if(stateAndOffsetToNextStateMap) + { + delete [] stateAndOffsetToNextStateMap; + stateAndOffsetToNextStateMap = nullptr; + } + } + + void Machine::moveFrom(Machine&& inMachine) + { + memcpy(charToOffsetMap,inMachine.charToOffsetMap,sizeof(charToOffsetMap)); + stateAndOffsetToNextStateMap = inMachine.stateAndOffsetToNextStateMap; + inMachine.stateAndOffsetToNextStateMap = nullptr; + numClasses = inMachine.numClasses; + numStates = inMachine.numStates; + } + + char nibbleToHexChar(U8 value) { return value < 10 ? ('0' + value) : 'a' + value - 10; } + + std::string escapeString(const std::string& string) + { + std::string result; + for(Uptr charIndex = 0;charIndex < string.size();++charIndex) + { + auto c = string[charIndex]; + if(c == '\\') { result += "\\\\"; } + else if(c == '\"') { result += "\\\""; } + else if(c == '\n') { result += "\\n"; } + else if(c < 0x20 || c > 0x7e) + { + result += "\\\\"; + result += nibbleToHexChar((c & 0xf0) >> 4); + result += nibbleToHexChar((c & 0x0f) >> 0); + } + else { result += c; } + } + return result; + } + + std::string getGraphEdgeCharLabel(Uptr charIndex) + { + switch(charIndex) + { + case '^': return "\\^"; + case '\f': return "\\f"; + case '\r': return "\\r"; + case '\n': return "\\n"; + case '\t': return "\\t"; + case '\'': return "\\\'"; + case '\"': return "\\\""; + case '\\': return "\\\\"; + case '-': return "\\-"; + default: return std::string(1,(char)charIndex); + }; + } + + std::string getGraphEdgeLabel(const CharSet& charSet) + { + std::string edgeLabel; + U8 numSetChars = 0; + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + if(charSet.contains((char)charIndex)) { ++numSetChars; } + } + if(numSetChars > 1) { edgeLabel += "["; } + const bool isNegative = numSetChars >= 100; + if(isNegative) { edgeLabel += "^"; } + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + if(charSet.contains((char)charIndex) != isNegative) + { + edgeLabel += getGraphEdgeCharLabel(charIndex); + if(charIndex + 2 < 256 + && charSet.contains((char)charIndex+1) != isNegative + && charSet.contains((char)charIndex+2) != isNegative) + { + edgeLabel += "-"; + charIndex += 2; + while(charIndex + 1 < 256 && charSet.contains((char)charIndex+1) != isNegative) { ++charIndex; } + edgeLabel += getGraphEdgeCharLabel(charIndex); + } + } + } + if(numSetChars > 1) { edgeLabel += "]"; } + return edgeLabel; + } + + std::string dumpNFAGraphViz(const Builder* builder) + { + std::string result; + result += "digraph {\n"; + std::set terminalStates; + for(Uptr stateIndex = 0;stateIndex < builder->nfaStates.size();++stateIndex) + { + const NFAState& nfaState = builder->nfaStates[stateIndex]; + + result += "state" + std::to_string(stateIndex) + "[shape=square label=\"" + std::to_string(stateIndex) + "\"];\n"; + + for(const auto& statePredicatePair : nfaState.nextStateToPredicateMap) + { + std::string edgeLabel = getGraphEdgeLabel(statePredicatePair.second); + std::string nextStateName = statePredicatePair.first < 0 + ? "terminal" + std::to_string(-statePredicatePair.first) + : "state" + std::to_string(statePredicatePair.first); + result += "state" + std::to_string(stateIndex) + + " -> " + + nextStateName + "[label=\"" + escapeString(edgeLabel) + "\"];\n"; + if(statePredicatePair.first < 0) + { + terminalStates.emplace(statePredicatePair.first); + } + } + + for(auto epsilonNextState : nfaState.epsilonNextStates) + { + std::string nextStateName = epsilonNextState < 0 + ? "terminal" + std::to_string(-epsilonNextState) + : "state" + std::to_string(epsilonNextState); + result += "state" + std::to_string(stateIndex) + " -> " + nextStateName + "[label=\"ε\"];\n"; + } + } + for(auto terminalState : terminalStates) + { + result += "terminal" + std::to_string(-terminalState) + + "[shape=octagon label=\"" + std::to_string(maximumTerminalStateIndex - terminalState) + "\"];\n"; + } + result += "}\n"; + return result; + } + + std::string Machine::dumpDFAGraphViz() const + { + std::string result; + result += "digraph {\n"; + std::set terminalStates; + + CharSet* classCharSets = (CharSet*)alloca(sizeof(CharSet) * numClasses); + memset(classCharSets,0,sizeof(CharSet) * numClasses); + for(Uptr charIndex = 0;charIndex < 256;++charIndex) + { + const Uptr classIndex = charToOffsetMap[charIndex] / numStates; + classCharSets[classIndex].add((U8)charIndex); + } + + { + std::map transitions; + for(Uptr classIndex = 0;classIndex < numClasses;++classIndex) + { + const InternalStateIndex nextState = stateAndOffsetToNextStateMap[0 + classIndex * numStates]; + CharSet& transitionPredicate = transitions[nextState]; + transitionPredicate = classCharSets[classIndex] | transitionPredicate; + } + + Uptr startIndex = 0; + for(auto transitionPair : transitions) + { + if((transitionPair.first & ~edgeDoesntConsumeInputFlag) != unmatchedCharacterTerminal) + { + result += "start" + std::to_string(startIndex) + "[shape=triangle label=\"\"];\n"; + + std::string edgeLabel = getGraphEdgeLabel(transitionPair.second); + std::string nextStateName = transitionPair.first < 0 + ? "terminal" + std::to_string(-(transitionPair.first & ~edgeDoesntConsumeInputFlag)) + : "state" + std::to_string(transitionPair.first); + result += "start" + std::to_string(startIndex) + + " -> " + + nextStateName + "[label=\"" + + (transitionPair.first < 0 && (transitionPair.first & edgeDoesntConsumeInputFlag) != 0 ? "ε " : "") + + escapeString(edgeLabel) + "\"];\n"; + + if(transitionPair.first < 0) + { + terminalStates.emplace(StateIndex(transitionPair.first & ~edgeDoesntConsumeInputFlag)); + } + + ++startIndex; + } + } + } + + for(Uptr stateIndex = 1;stateIndex < numStates;++stateIndex) + { + result += "state" + std::to_string(stateIndex) + "[shape=square label=\"" + std::to_string(stateIndex) + "\"];\n"; + + std::map transitions; + for(Uptr classIndex = 0;classIndex < numClasses;++classIndex) + { + const InternalStateIndex nextState = stateAndOffsetToNextStateMap[stateIndex + classIndex * numStates]; + CharSet& transitionPredicate = transitions[nextState]; + transitionPredicate = classCharSets[classIndex] | transitionPredicate; + } + + for(auto transitionPair : transitions) + { + if((transitionPair.first & ~edgeDoesntConsumeInputFlag) != unmatchedCharacterTerminal) + { + std::string edgeLabel = getGraphEdgeLabel(transitionPair.second); + std::string nextStateName = transitionPair.first < 0 + ? "terminal" + std::to_string(-(transitionPair.first & ~edgeDoesntConsumeInputFlag)) + : "state" + std::to_string(transitionPair.first); + result += "state" + std::to_string(stateIndex) + + " -> " + + nextStateName + "[label=\"" + + (transitionPair.first < 0 && (transitionPair.first & edgeDoesntConsumeInputFlag) != 0 ? "ε " : "") + + escapeString(edgeLabel) + "\"];\n"; + + if(transitionPair.first < 0) + { + terminalStates.emplace(transitionPair.first); + } + } + } + } + for(auto terminalState : terminalStates) + { + result += "terminal" + std::to_string(-(terminalState & ~edgeDoesntConsumeInputFlag)) + + "[shape=octagon label=\"" + std::to_string(maximumTerminalStateIndex - (terminalState & ~edgeDoesntConsumeInputFlag)) + "\"];\n"; + } + result += "}\n"; + return result; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/NFA.h b/libraries/wasm-jit/Source/WAST/NFA.h new file mode 100644 index 000000000..73331c0fe --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/NFA.h @@ -0,0 +1,89 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "Inline/DenseStaticIntSet.h" + +#include + +namespace NFA +{ + // A set of characters. + typedef DenseStaticIntSet CharSet; + + // An index of a DFA state. A negative index indicates an "accepting" or terminal state. + typedef I16 StateIndex; + + enum + { + edgeDoesntConsumeInputFlag = (StateIndex)0x4000, // A flag that's set on terminal DFA state transitions that don't consume any input + unmatchedCharacterTerminal = (StateIndex)0x8000, // An implicit terminal state that indicates the DFA didn't recognize the input + maximumTerminalStateIndex = (StateIndex)0xbfff, // Should be the largest negative number that doesn't have edgeDoesntConsumeInputFlag set. + }; + + // Creates an abstract object that holds the state of an under-construction BFA. + struct Builder; + Builder* createBuilder(); + + // Functions to add states and edges to the under-construction DFA. + StateIndex addState(Builder* builder); + void addEdge(Builder* builder,StateIndex initialState,const CharSet& predicate,StateIndex nextState); + void addEpsilonEdge(Builder* builder,StateIndex initialState,StateIndex nextState); + StateIndex getNonTerminalEdge(Builder* builder,StateIndex initialState,char c); + + // Dumps the NFA's states and edges to the GraphViz .dot format. + std::string dumpNFAGraphViz(const Builder* builder); + + // Encapsulates a NFA that has been translated into a DFA that can be efficiently executed. + struct Machine + { + Machine(): stateAndOffsetToNextStateMap(nullptr), numClasses(0), numStates(0) {} + ~Machine(); + + Machine(Machine&& inMachine) { moveFrom(std::move(inMachine)); } + void operator=(Machine&& inMachine) { moveFrom(std::move(inMachine)); } + + // Constructs a DFA from the abstract builder object (which is destroyed). + Machine(Builder* inBuilder); + + // Feeds characters into the DFA until it reaches a terminal state. + // Upon reaching a terminal state, the state is returned, and the nextChar pointer + // is updated to point to the first character not consumed by the DFA. + inline StateIndex feed(const char*& nextChar) const + { + Iptr state = 0; + do + { + state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[0]]]; + if(state < 0) { nextChar += 1; break; } + state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[1]]]; + if(state < 0) { nextChar += 2; break; } + state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[2]]]; + if(state < 0) { nextChar += 3; break; } + state = stateAndOffsetToNextStateMap[state + charToOffsetMap[(U8)nextChar[3]]]; + nextChar += 4; + } + while(state >= 0); + if(state & edgeDoesntConsumeInputFlag) + { + --nextChar; + state &= ~edgeDoesntConsumeInputFlag; + } + return (StateIndex)state; + } + + // Dumps the DFA's states and edges to the GraphViz .dot format. + std::string dumpDFAGraphViz() const; + + private: + + typedef I16 InternalStateIndex; + enum { internalMaxStates = INT16_MAX }; + + U32 charToOffsetMap[256]; + InternalStateIndex* stateAndOffsetToNextStateMap; + Uptr numClasses; + Uptr numStates; + + void moveFrom(Machine&& inMachine); + }; +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/Parse.cpp b/libraries/wasm-jit/Source/WAST/Parse.cpp new file mode 100644 index 000000000..313185230 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Parse.cpp @@ -0,0 +1,459 @@ +#include "Inline/BasicTypes.h" +#include "Inline/UTF8.h" +#include "WAST.h" +#include "Lexer.h" +#include "IR/Module.h" +#include "Parse.h" + +#include +#include + +#define XXH_FORCE_NATIVE_FORMAT 1 +#define XXH_PRIVATE_API +#include "../ThirdParty/xxhash/xxhash.h" + +using namespace IR; + +namespace WAST +{ + void findClosingParenthesis(ParseState& state,const Token* openingParenthesisToken) + { + // Skip over tokens until the ')' closing the current parentheses nesting depth is found. + Uptr depth = 1; + while(depth > 0) + { + switch(state.nextToken->type) + { + default: + ++state.nextToken; + break; + case t_leftParenthesis: + ++state.nextToken; + ++depth; + break; + case t_rightParenthesis: + ++state.nextToken; + --depth; + break; + case t_eof: + parseErrorf(state,openingParenthesisToken,"reached end of input while trying to find closing parenthesis"); + throw FatalParseException(); + } + } + } + + void parseErrorf(ParseState& state,Uptr charOffset,const char* messageFormat,va_list messageArguments) + { + // Format the message. + char messageBuffer[1024]; + int numPrintedChars = std::vsnprintf(messageBuffer,sizeof(messageBuffer),messageFormat,messageArguments); + if(numPrintedChars >= 1023 || numPrintedChars < 0) { Errors::unreachable(); } + messageBuffer[numPrintedChars] = 0; + + // Add the error to the state's error list. + state.errors.emplace_back(charOffset,messageBuffer); + } + void parseErrorf(ParseState& state,Uptr charOffset,const char* messageFormat,...) + { + va_list messageArguments; + va_start(messageArguments,messageFormat); + parseErrorf(state,charOffset,messageFormat,messageArguments); + va_end(messageArguments); + } + void parseErrorf(ParseState& state,const char* nextChar,const char* messageFormat,...) + { + va_list messageArguments; + va_start(messageArguments,messageFormat); + parseErrorf(state,nextChar - state.string,messageFormat,messageArguments); + va_end(messageArguments); + } + void parseErrorf(ParseState& state,const Token* nextToken,const char* messageFormat,...) + { + va_list messageArguments; + va_start(messageArguments,messageFormat); + parseErrorf(state,nextToken->begin,messageFormat,messageArguments); + va_end(messageArguments); + } + + void require(ParseState& state,TokenType type) + { + if(state.nextToken->type != type) + { + parseErrorf(state,state.nextToken,"expected %s",describeToken(type)); + throw RecoverParseException(); + } + ++state.nextToken; + } + + bool tryParseValueType(ParseState& state,ValueType& outValueType) + { + switch(state.nextToken->type) + { + case t_i32: ++state.nextToken; outValueType = ValueType::i32; return true; + case t_i64: ++state.nextToken; outValueType = ValueType::i64; return true; + case t_f32: ++state.nextToken; outValueType = ValueType::f32; return true; + case t_f64: ++state.nextToken; outValueType = ValueType::f64; return true; + #if ENABLE_SIMD_PROTOTYPE + case t_v128: ++state.nextToken; outValueType = ValueType::v128; return true; + #endif + default: + outValueType = ValueType::any; + return false; + }; + } + + bool tryParseResultType(ParseState& state,ResultType& outResultType) + { + return tryParseValueType(state,*(ValueType*)&outResultType); + } + + ValueType parseValueType(ParseState& state) + { + ValueType result; + if(!tryParseValueType(state,result)) + { + parseErrorf(state,state.nextToken,"expected value type"); + throw RecoverParseException(); + } + return result; + } + + const FunctionType* parseFunctionType(ModuleParseState& state,NameToIndexMap& outLocalNameToIndexMap,std::vector& outLocalDisassemblyNames) + { + std::vector parameters; + ResultType ret = ResultType::none; + + // Parse the function parameters. + while(tryParseParenthesizedTagged(state,t_param,[&] + { + Name parameterName; + if(tryParseName(state,parameterName)) + { + // (param ) + bindName(state,outLocalNameToIndexMap,parameterName,parameters.size()); + parameters.push_back(parseValueType(state)); + outLocalDisassemblyNames.push_back(parameterName.getString()); + } + else + { + // (param *) + ValueType parameterType; + while(tryParseValueType(state,parameterType)) + { + parameters.push_back(parameterType); + outLocalDisassemblyNames.push_back(std::string()); + }; + } + })); + + // Parse an optional result type. + tryParseParenthesizedTagged(state,t_result,[&] + { + tryParseResultType(state,ret); + }); + + return FunctionType::get(ret,parameters); + } + + IndexedFunctionType parseFunctionTypeRef(ModuleParseState& state,NameToIndexMap& outLocalNameToIndexMap,std::vector& outLocalDisassemblyNames) + { + // Parse an optional function type reference. + const Token* typeReferenceToken = state.nextToken; + IndexedFunctionType referencedFunctionType = {UINT32_MAX}; + if(state.nextToken[0].type == t_leftParenthesis + && state.nextToken[1].type == t_type) + { + // Parse a reference by name or index to some type in the module's type table. + parseParenthesized(state,[&] + { + require(state,t_type); + referencedFunctionType.index = parseAndResolveNameOrIndexRef(state,state.typeNameToIndexMap,state.module.types.size(),"type"); + }); + } + + // Parse the explicit function parameters and result type. + const FunctionType* directFunctionType = parseFunctionType(state,outLocalNameToIndexMap,outLocalDisassemblyNames); + const bool hasNoDirectType = directFunctionType == FunctionType::get(); + + // Validate that if the function definition has both a type reference, and explicit parameter/result type declarations, that they match. + IndexedFunctionType functionType; + if(referencedFunctionType.index != UINT32_MAX && hasNoDirectType) + { + functionType = referencedFunctionType; + } + else + { + functionType = getUniqueFunctionTypeIndex(state,directFunctionType); + if(referencedFunctionType.index != UINT32_MAX && state.module.types[referencedFunctionType.index] != directFunctionType) + { + parseErrorf(state,typeReferenceToken,"referenced function type (%s) does not match declared parameters and results (%s)", + asString(state.module.types[referencedFunctionType.index]).c_str(), + asString(directFunctionType).c_str() + ); + } + } + + return functionType; + } + + IndexedFunctionType getUniqueFunctionTypeIndex(ModuleParseState& state,const FunctionType* functionType) + { + // If this type is not in the module's type table yet, add it. + auto functionTypeToIndexMapIt = state.functionTypeToIndexMap.find(functionType); + if(functionTypeToIndexMapIt != state.functionTypeToIndexMap.end()) + { + return IndexedFunctionType {functionTypeToIndexMapIt->second}; + } + else + { + const Uptr functionTypeIndex = state.module.types.size(); + state.module.types.push_back(functionType); + state.disassemblyNames.types.push_back(std::string()); + errorUnless(functionTypeIndex < UINT32_MAX); + state.functionTypeToIndexMap.emplace(functionType,(U32)functionTypeIndex); + return IndexedFunctionType {(U32)functionTypeIndex}; + } + } + + U32 Name::calcHash(const char* begin,U32 numChars) + { + // Use xxHash32 to hash names. xxHash64 is theoretically faster for long strings on 64-bit machines, + // but I did not find it to be faster for typical name lengths. + return XXH32(begin,numChars,0); + } + + bool tryParseName(ParseState& state,Name& outName) + { + if(state.nextToken->type != t_name) { return false; } + + // Find the first non-name character. + const char* firstChar = state.string + state.nextToken->begin;; + const char* nextChar = firstChar; + assert(*nextChar == '$'); + ++nextChar; + while(true) + { + const char c = *nextChar; + if((c >= 'a' && c <= 'z') + || (c >= 'A' && c <= 'Z') + || (c >= '0' && c <= '9') + || c=='_' || c=='\'' || c=='+' || c=='-' || c=='*' || c=='/' || c=='\\' || c=='^' || c=='~' || c=='=' + || c=='<' || c=='>' || c=='!' || c=='?' || c=='@' || c=='#' || c=='$' || c=='%' || c=='&' || c=='|' + || c==':' || c=='`' || c=='.') + { + ++nextChar; + } + else + { + break; + } + }; + + assert(nextChar - state.string > state.nextToken->begin + 1); + ++state.nextToken; + assert(nextChar - state.string <= state.nextToken->begin); + assert(nextChar - firstChar <= UINT32_MAX); + outName = Name(firstChar,U32(nextChar - firstChar)); + return true; + } + + bool tryParseNameOrIndexRef(ParseState& state,Reference& outRef) + { + outRef.token = state.nextToken; + if(tryParseName(state,outRef.name)) { outRef.type = Reference::Type::name; return true; } + else if(tryParseI32(state,outRef.index)) { outRef.type = Reference::Type::index; return true; } + return false; + } + + U32 parseAndResolveNameOrIndexRef(ParseState& state,const NameToIndexMap& nameToIndexMap,Uptr maxIndex,const char* context) + { + Reference ref; + if(!tryParseNameOrIndexRef(state,ref)) + { + parseErrorf(state,state.nextToken,"expected %s name or index",context); + throw RecoverParseException(); + } + return resolveRef(state,nameToIndexMap,maxIndex,ref); + } + + void bindName(ParseState& state,NameToIndexMap& nameToIndexMap,const Name& name,Uptr index) + { + errorUnless(index <= UINT32_MAX); + + if(name) + { + auto mapIt = nameToIndexMap.find(name); + if(mapIt != nameToIndexMap.end()) + { + const TextFileLocus previousDefinitionLocus = calcLocusFromOffset(state.string, state.lineInfo,mapIt->first.getCharOffset(state.string)); + parseErrorf(state,name.getCharOffset(state.string),"redefinition of name defined at %s",previousDefinitionLocus.describe().c_str()); + } + nameToIndexMap.emplace(name,U32(index)); + } + } + + U32 resolveRef(ParseState& state,const NameToIndexMap& nameToIndexMap,Uptr maxIndex,const Reference& ref) + { + switch(ref.type) + { + case Reference::Type::index: + { + if(ref.index >= maxIndex) + { + parseErrorf(state,ref.token,"invalid index"); + return UINT32_MAX; + } + return ref.index; + } + case Reference::Type::name: + { + auto nameToIndexMapIt = nameToIndexMap.find(ref.name); + if(nameToIndexMapIt == nameToIndexMap.end()) + { + parseErrorf(state,ref.token,"unknown name"); + return UINT32_MAX; + } + else + { + return nameToIndexMapIt->second; + } + } + default: Errors::unreachable(); + }; + } + + bool tryParseHexit(const char*& nextChar,U8& outValue) + { + if(*nextChar >= '0' && *nextChar <= '9') { outValue = *nextChar - '0'; } + else if(*nextChar >= 'a' && *nextChar <= 'f') { outValue = *nextChar - 'a' + 10; } + else if(*nextChar >= 'A' && *nextChar <= 'F') { outValue = *nextChar - 'A' + 10; } + else + { + outValue = 0; + return false; + } + ++nextChar; + return true; + } + + static void parseCharEscapeCode(const char*& nextChar,ParseState& state,std::string& outString) + { + U8 firstNibble; + if(tryParseHexit(nextChar,firstNibble)) + { + // Parse an 8-bit literal from two hexits. + U8 secondNibble; + if(!tryParseHexit(nextChar,secondNibble)) { parseErrorf(state,nextChar,"expected hexit"); } + outString += char(firstNibble * 16 + secondNibble); + } + else + { + switch(*nextChar) + { + case 't': outString += '\t'; ++nextChar; break; + case 'n': outString += '\n'; ++nextChar; break; + case 'r': outString += '\r'; ++nextChar; break; + case '\"': outString += '\"'; ++nextChar; break; + case '\'': outString += '\''; ++nextChar; break; + case '\\': outString += '\\'; ++nextChar; break; + case 'u': + { + // \u{...} - Unicode codepoint from hexadecimal number + if(nextChar[1] != '{') { parseErrorf(state,nextChar,"expected '{'"); } + nextChar += 2; + + // Parse the hexadecimal number. + const char* firstHexit = nextChar; + U32 codepoint = 0; + U8 hexit = 0; + while(tryParseHexit(nextChar,hexit)) + { + if(codepoint > (UINT32_MAX - hexit) / 16) + { + codepoint = UINT32_MAX; + while(tryParseHexit(nextChar,hexit)) {}; + break; + } + assert(codepoint * 16 + hexit >= codepoint); + codepoint = codepoint * 16 + hexit; + } + + // Check that it denotes a valid Unicode codepoint. + if((codepoint >= 0xD800 && codepoint <= 0xDFFF) + || codepoint >= 0x110000) + { + parseErrorf(state,firstHexit,"invalid Unicode codepoint"); + codepoint = 0x1F642; + } + + // Encode the codepoint as UTF-8. + UTF8::encodeCodepoint(codepoint,outString); + + if(*nextChar != '}') { parseErrorf(state,nextChar,"expected '}'"); } + ++nextChar; + break; + } + default: + outString += '\\'; + ++nextChar; + parseErrorf(state,nextChar,"invalid escape code"); + break; + } + } + } + + bool tryParseString(ParseState& state,std::string& outString) + { + if(state.nextToken->type != t_string) + { + return false; + } + + // Parse a string literal; the lexer has already rejected unterminated strings, + // so this just needs to copy the characters and evaluate escape codes. + const char* nextChar = state.string + state.nextToken->begin; + assert(*nextChar == '\"'); + ++nextChar; + while(true) + { + switch(*nextChar) + { + case '\\': + { + ++nextChar; + parseCharEscapeCode(nextChar,state,outString); + break; + } + case '\"': + ++state.nextToken; + assert(state.string + state.nextToken->begin > nextChar); + return true; + default: + outString += *nextChar++; + break; + }; + }; + } + + std::string parseUTF8String(ParseState& state) + { + const Token* stringToken = state.nextToken; + std::string result; + if(!tryParseString(state,result)) + { + parseErrorf(state,stringToken,"expected string literal"); + throw RecoverParseException(); + } + + // Check that the string is a valid UTF-8 encoding. + const U8* endChar = (const U8*)result.data() + result.size(); + const U8* nextChar = UTF8::validateString((const U8*)result.data(),endChar); + if(nextChar != endChar) + { + const Uptr charOffset = stringToken->begin + (nextChar - (const U8*)result.data()) + 1; + parseErrorf(state,charOffset,"invalid UTF-8 encoding"); + } + + return result; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/Parse.h b/libraries/wasm-jit/Source/WAST/Parse.h new file mode 100644 index 000000000..450650f25 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Parse.h @@ -0,0 +1,219 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "WAST.h" +#include "Lexer.h" +#include "IR/Types.h" +#include "IR/Module.h" + +#include +#include +#include + +namespace WAST +{ + struct FatalParseException {}; + struct RecoverParseException {}; + + // Like WAST::Error, but only has an offset in the input string instead of a full TextFileLocus. + struct UnresolvedError + { + Uptr charOffset; + std::string message; + UnresolvedError(Uptr inCharOffset,std::string&& inMessage) + : charOffset(inCharOffset), message(inMessage) {} + }; + + // The state that's threaded through the various parsers. + struct ParseState + { + const char* string; + const LineInfo* lineInfo; + std::vector& errors; + const Token* nextToken; + + ParseState(const char* inString,const LineInfo* inLineInfo,std::vector& inErrors,const Token* inNextToken) + : string(inString) + , lineInfo(inLineInfo) + , errors(inErrors) + , nextToken(inNextToken) + {} + }; + + // Encapsulates a name ($whatever) parsed from the WAST file. + // References the characters in the input string the name was parsed from, + // so it can handle arbitrary length names in a fixed size struct, but only + // as long as the input string isn't freed. + // Includes a hash of the name's characters. + struct Name + { + Name(): begin(nullptr), numChars(0), hash(0) {} + Name(const char* inBegin,U32 inNumChars) + : begin(inBegin) + , numChars(inNumChars) + , hash(calcHash(inBegin,inNumChars)) + {} + + operator bool() const { return begin != nullptr; } + std::string getString() const { return begin ? std::string(begin + 1,numChars - 1) : std::string(); } + Uptr getCharOffset(const char* string) const { return begin - string; } + + friend bool operator==(const Name& a,const Name& b) + { + return a.hash == b.hash && a.numChars == b.numChars && memcmp(a.begin,b.begin,a.numChars) == 0; + } + friend bool operator!=(const Name& a,const Name& b) + { + return !(a == b); + } + + struct Hasher + { + Uptr operator()(const Name& name) const + { + return name.hash; + } + }; + + private: + + const char* begin; + U32 numChars; + U32 hash; + + static U32 calcHash(const char* begin,U32 numChars); + }; + + // A map from Name to index using a hash table. + typedef std::unordered_map NameToIndexMap; + + // Represents a yet-to-be-resolved reference, parsed as either a name or an index. + struct Reference + { + enum class Type { invalid, name, index }; + Type type; + union + { + Name name; + U32 index; + }; + const Token* token; + Reference(const Name& inName): type(Type::name), name(inName) {} + Reference(U32 inIndex): type(Type::index), index(inIndex) {} + Reference(): type(Type::invalid), token(nullptr) {} + operator bool() const { return type != Type::invalid; } + }; + + // State associated with parsing a module. + struct ModuleParseState : ParseState + { + IR::Module& module; + + std::map functionTypeToIndexMap; + NameToIndexMap typeNameToIndexMap; + + NameToIndexMap functionNameToIndexMap; + NameToIndexMap tableNameToIndexMap; + NameToIndexMap memoryNameToIndexMap; + NameToIndexMap globalNameToIndexMap; + + IR::DisassemblyNames disassemblyNames; + + // Thunks that are called after parsing all declarations. + std::vector> postDeclarationCallbacks; + + ModuleParseState(const char* inString,const LineInfo* inLineInfo,std::vector& inErrors,const Token* inNextToken,IR::Module& inModule) + : ParseState(inString,inLineInfo,inErrors,inNextToken) + , module(inModule) + {} + }; + + // Error handling. + void parseErrorf(ParseState& state,Uptr charOffset,const char* messageFormat,...); + void parseErrorf(ParseState& state,const char* nextChar,const char* messageFormat,...); + void parseErrorf(ParseState& state,const Token* nextToken,const char* messageFormat,...); + + void require(ParseState& state,TokenType type); + + // Type parsing and uniqueing + bool tryParseValueType(ParseState& state,IR::ValueType& outValueType); + bool tryParseResultType(ParseState& state,IR::ResultType& outResultType); + IR::ValueType parseValueType(ParseState& state); + + const IR::FunctionType* parseFunctionType(ModuleParseState& state,NameToIndexMap& outLocalNameToIndexMap,std::vector& outLocalDisassemblyNames); + IR::IndexedFunctionType parseFunctionTypeRef(ModuleParseState& state,NameToIndexMap& outLocalNameToIndexMap,std::vector& outLocalDisassemblyNames); + IR::IndexedFunctionType getUniqueFunctionTypeIndex(ModuleParseState& state,const IR::FunctionType* functionType); + + // Literal parsing. + bool tryParseHexit(const char*& nextChar,U8& outValue); + + bool tryParseI32(ParseState& state,U32& outI32); + bool tryParseI64(ParseState& state,U64& outI64); + + U8 parseI8(ParseState& state); + U32 parseI32(ParseState& state); + U64 parseI64(ParseState& state); + F32 parseF32(ParseState& state); + F64 parseF64(ParseState& state); + + bool tryParseString(ParseState& state,std::string& outString); + + std::string parseUTF8String(ParseState& state); + + // Name parsing and resolution. + bool tryParseName(ParseState& state,Name& outName); + bool tryParseNameOrIndexRef(ParseState& state,Reference& outRef); + U32 parseAndResolveNameOrIndexRef(ParseState& state,const NameToIndexMap& nameToIndexMap,Uptr maxIndex,const char* context); + + void bindName(ParseState& state,NameToIndexMap& nameToIndexMap,const Name& name,Uptr index); + U32 resolveRef(ParseState& state,const NameToIndexMap& nameToIndexMap,Uptr maxIndex,const Reference& ref); + + // Finds the parenthesis closing the current s-expression. + void findClosingParenthesis(ParseState& state,const Token* openingParenthesisToken); + + // Parses the surrounding parentheses for an inner parser, and handles recovery at the closing parenthesis. + template + static void parseParenthesized(ParseState& state,ParseInner parseInner) + { + const Token* openingParenthesisToken = state.nextToken; + require(state,t_leftParenthesis); + try + { + parseInner(); + require(state,t_rightParenthesis); + } + catch(RecoverParseException) + { + findClosingParenthesis(state,openingParenthesisToken); + } + } + + // Tries to parse '(' tagType parseInner ')', handling recovery at the closing parenthesis. + // Returns true if any tokens were consumed. + template + static bool tryParseParenthesizedTagged(ParseState& state,TokenType tagType,ParseInner parseInner) + { + const Token* openingParenthesisToken = state.nextToken; + if(state.nextToken[0].type != t_leftParenthesis || state.nextToken[1].type != tagType) + { + return false; + } + try + { + state.nextToken += 2; + parseInner(); + require(state,t_rightParenthesis); + } + catch(RecoverParseException) + { + findClosingParenthesis(state,openingParenthesisToken); + } + return true; + } + + // Function parsing. + IR::FunctionDef parseFunctionDef(ModuleParseState& state,const Token* funcToken); + + // Module parsing. + void parseModuleBody(ModuleParseState& state); +}; \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/ParseFunction.cpp b/libraries/wasm-jit/Source/WAST/ParseFunction.cpp new file mode 100644 index 000000000..0e7e6e4b0 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/ParseFunction.cpp @@ -0,0 +1,635 @@ +#include "Inline/BasicTypes.h" +#include "WAST.h" +#include "Lexer.h" +#include "Parse.h" +#include "IR/Module.h" +#include "IR/Operators.h" +#include "IR/Validate.h" +#include "Inline/Serialization.h" + +#include + +using namespace WAST; +using namespace IR; + +namespace +{ + struct Local {}; + + // State associated with parsing a function. + struct FunctionParseState : ParseState + { + const ModuleParseState& moduleState; + FunctionDef& functionDef; + + std::unique_ptr localNameToIndexMap; + Uptr numLocals; + + NameToIndexMap branchTargetNameToIndexMap; + U32 branchTargetDepth; + + Serialization::ArrayOutputStream codeByteStream; + OperatorEncoderStream operationEncoder; + CodeValidationProxyStream validatingCodeStream; + + FunctionParseState(const ModuleParseState& inModuleState,NameToIndexMap* inLocalNameToIndexMap,const Token* firstBodyToken,FunctionDef& inFunctionDef) + : ParseState(inModuleState.string,inModuleState.lineInfo,inModuleState.errors,firstBodyToken) + , moduleState(inModuleState) + , functionDef(inFunctionDef) + , localNameToIndexMap(inLocalNameToIndexMap) + , numLocals(inFunctionDef.nonParameterLocalTypes.size() + inModuleState.module.types[inFunctionDef.type.index]->parameters.size()) + , branchTargetDepth(0) + , operationEncoder(codeByteStream) + , validatingCodeStream(inModuleState.module,functionDef,operationEncoder) + {} + }; + + // While in scope, pushes a branch target onto the branch target stack. + // Also maintains the branchTargetNameToIndexMap + struct ScopedBranchTarget + { + ScopedBranchTarget(FunctionParseState& inState,Name inName) + : state(inState), name(inName), previousBranchTargetIndex(UINT32_MAX) + { + branchTargetIndex = ++state.branchTargetDepth; + if(name) + { + auto previousIt = state.branchTargetNameToIndexMap.find(name); + if(previousIt != state.branchTargetNameToIndexMap.end()) + { + // If the name was already bound to a branch target, remember the + // previously bound branch target. + previousBranchTargetIndex = previousIt->second; + previousIt->second = branchTargetIndex; + } + else + { + state.branchTargetNameToIndexMap.emplace(name,branchTargetIndex); + } + } + } + + ~ScopedBranchTarget() + { + assert(branchTargetIndex == state.branchTargetDepth); + --state.branchTargetDepth; + if(name) + { + assert(state.branchTargetNameToIndexMap.count(name) == 1); + assert(state.branchTargetNameToIndexMap.at(name) == branchTargetIndex); + if(previousBranchTargetIndex == UINT32_MAX) + { + state.branchTargetNameToIndexMap.erase(name); + } + else + { + // If hte name was previously bound to an outer branch target, restore it. + state.branchTargetNameToIndexMap[name] = previousBranchTargetIndex; + } + } + } + + private: + + FunctionParseState& state; + Name name; + U32 branchTargetIndex; + U32 previousBranchTargetIndex; + }; +} + +static bool tryParseAndResolveBranchTargetRef(FunctionParseState& state,U32& outTargetDepth) +{ + Reference branchTargetRef; + if(tryParseNameOrIndexRef(state,branchTargetRef)) + { + switch(branchTargetRef.type) + { + case Reference::Type::index: outTargetDepth = branchTargetRef.index; break; + case Reference::Type::name: + { + auto nameToIndexMapIt = state.branchTargetNameToIndexMap.find(branchTargetRef.name); + if(nameToIndexMapIt == state.branchTargetNameToIndexMap.end()) + { + parseErrorf(state,branchTargetRef.token,"unknown name"); + outTargetDepth = UINT32_MAX; + } + else + { + outTargetDepth = state.branchTargetDepth - nameToIndexMapIt->second; + } + break; + } + default: Errors::unreachable(); + }; + return true; + } + return false; +} + +static void parseAndValidateRedundantBranchTargetName(ParseState& state,Name branchTargetName,const char* context,const char* redundantContext) +{ + Name redundantName; + if(tryParseName(state,redundantName) && branchTargetName != redundantName) + { + parseErrorf(state,state.nextToken-1,"%s label doesn't match %s label",redundantContext,context); + } +} + +static void parseImm(FunctionParseState& state,NoImm&) {} +static void parseImm(FunctionParseState& state,MemoryImm& outImm) {} + +static void parseImm(FunctionParseState& state,LiteralImm& outImm) { outImm.value = (I32)parseI32(state); } +static void parseImm(FunctionParseState& state,LiteralImm& outImm) { outImm.value = (I64)parseI64(state); } +static void parseImm(FunctionParseState& state,LiteralImm& outImm) { outImm.value = parseF32(state); } +static void parseImm(FunctionParseState& state,LiteralImm& outImm) { outImm.value = parseF64(state); } + +static void parseImm(FunctionParseState& state,BranchImm& outImm) +{ + if(!tryParseAndResolveBranchTargetRef(state,outImm.targetDepth)) + { + parseErrorf(state,state.nextToken,"expected branch target name or index"); + throw RecoverParseException(); + } +} + +static void parseImm(FunctionParseState& state,BranchTableImm& outImm) +{ + std::vector targetDepths; + U32 targetDepth = 0; + while(tryParseAndResolveBranchTargetRef(state,targetDepth)) + { + targetDepths.push_back(targetDepth); + }; + + if(!targetDepths.size()) + { + parseErrorf(state,state.nextToken,"expected branch target name or index"); + throw RecoverParseException(); + } + else + { + outImm.defaultTargetDepth = targetDepths.back(); + targetDepths.pop_back(); + outImm.branchTableIndex = (U32)state.functionDef.branchTables.size(); + state.functionDef.branchTables.push_back(std::move(targetDepths)); + } +} + +template +static void parseImm(FunctionParseState& state,GetOrSetVariableImm& outImm) +{ + outImm.variableIndex = parseAndResolveNameOrIndexRef( + state, + isGlobal ? state.moduleState.globalNameToIndexMap : *state.localNameToIndexMap, + isGlobal ? state.moduleState.module.globals.size() : state.numLocals, + isGlobal ? "global" : "local"); +} + +static void parseImm(FunctionParseState& state,CallImm& outImm) +{ + outImm.functionIndex = parseAndResolveNameOrIndexRef( + state, + state.moduleState.functionNameToIndexMap, + state.moduleState.module.functions.size(), + "function" + ); +} + +static void parseImm(FunctionParseState& state,CallIndirectImm& outImm) +{ + outImm.type.index = parseAndResolveNameOrIndexRef( + state, + state.moduleState.typeNameToIndexMap, + state.moduleState.module.types.size(), + "type" + ); +} + +template +static void parseImm(FunctionParseState& state,LoadOrStoreImm& outImm) +{ + outImm.offset = 0; + if(state.nextToken->type == t_offset) + { + ++state.nextToken; + require(state,t_equals); + outImm.offset = parseI32(state); + } + + const U32 naturalAlignment = 1 << naturalAlignmentLog2; + U32 alignment = naturalAlignment; + if(state.nextToken->type == t_align) + { + ++state.nextToken; + require(state,t_equals); + alignment = parseI32(state); + if(alignment > naturalAlignment) + { + parseErrorf(state,state.nextToken,"alignment must be <= natural alignment"); + alignment = naturalAlignment; + } + } + + outImm.alignmentLog2 = (U8)Platform::floorLogTwo(alignment); + if(!alignment || alignment & (alignment - 1)) + { + parseErrorf(state,state.nextToken,"alignment must be power of 2"); + } +} + +#if ENABLE_SIMD_PROTOTYPE + +static void parseImm(FunctionParseState& state,LiteralImm& outImm) +{ + for(Uptr laneIndex = 0;laneIndex < 16;++laneIndex) + { + outImm.value.i8[laneIndex] = parseI8(state); + } +} + +template +static void parseImm(FunctionParseState& state,LaneIndexImm& outImm) +{ + const U64 u64 = parseI64(state); + if(u64 > numLanes) + { + parseErrorf(state,state.nextToken-1,"lane index must be in the range 0..%u",numLanes); + } + outImm.laneIndex = U8(u64); +} + +template +static void parseImm(FunctionParseState& state,ShuffleImm& outImm) +{ + parseParenthesized(state,[&] + { + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + const U64 u64 = parseI64(state); + if(u64 >= numLanes * 2) + { + parseErrorf(state,state.nextToken-1,"lane index must be in the range 0..%u",numLanes * 2); + } + outImm.laneIndices[laneIndex] = U8(u64); + } + }); +} +#endif + +#if ENABLE_THREADING_PROTOTYPE +static void parseImm(FunctionParseState& state,LaunchThreadImm& outImm) {} + +template +static void parseImm(FunctionParseState& state,AtomicLoadOrStoreImm& outImm) +{ + LoadOrStoreImm loadOrStoreImm; + parseImm(state,loadOrStoreImm); + outImm.alignmentLog2 = loadOrStoreImm.alignmentLog2; + outImm.offset = loadOrStoreImm.offset; +} +#endif + +static void parseInstrSequence(FunctionParseState& state); +static void parseExpr(FunctionParseState& state); + +static void parseControlImm(FunctionParseState& state,Name& outBranchTargetName,ControlStructureImm& imm) +{ + tryParseName(state,outBranchTargetName); + + imm.resultType = ResultType::none; + if(state.nextToken[0].type == t_leftParenthesis && state.nextToken[1].type == t_result) + { + state.nextToken += 2; + tryParseResultType(state,imm.resultType); + require(state,t_rightParenthesis); + } + else + { + // For backward compatibility, also handle just a result type. + tryParseResultType(state,imm.resultType); + } +} + +static void parseBlock(FunctionParseState& state,bool isExpr) +{ + Name branchTargetName; + ControlStructureImm imm; + parseControlImm(state,branchTargetName,imm); + + ScopedBranchTarget branchTarget(state,branchTargetName); + state.validatingCodeStream.block(imm); + parseInstrSequence(state); + state.validatingCodeStream.end(); + + if(!isExpr) + { + require(state,t_end); + parseAndValidateRedundantBranchTargetName(state,branchTargetName,"block","end"); + } +} + +static void parseLoop(FunctionParseState& state,bool isExpr) +{ + Name branchTargetName; + ControlStructureImm imm; + parseControlImm(state,branchTargetName,imm); + + ScopedBranchTarget branchTarget(state,branchTargetName); + state.validatingCodeStream.loop(imm); + parseInstrSequence(state); + state.validatingCodeStream.end(); + + if(!isExpr) + { + require(state,t_end); + parseAndValidateRedundantBranchTargetName(state,branchTargetName,"loop","end"); + } +} + +static void parseExprSequence(FunctionParseState& state) +{ + while(state.nextToken->type != t_rightParenthesis) + { + parseExpr(state); + }; +} + +#define VISIT_OP(opcode,name,nameString,Imm,...) \ + static void parseOp_##name(FunctionParseState& state,bool isExpression) \ + { \ + ++state.nextToken; \ + Imm imm; \ + parseImm(state,imm); \ + if(isExpression) \ + { \ + parseExprSequence(state); \ + } \ + state.validatingCodeStream.name(imm); \ + } +ENUM_NONCONTROL_OPERATORS(VISIT_OP) +#undef VISIT_OP + +static void parseExpr(FunctionParseState& state) +{ + parseParenthesized(state,[&] + { + const Token* opcodeToken = state.nextToken; + try + { + switch(state.nextToken->type) + { + case t_block: + { + ++state.nextToken; + parseBlock(state,true); + break; + } + case t_loop: + { + ++state.nextToken; + parseLoop(state,true); + break; + } + case t_if_: + { + ++state.nextToken; + + Name branchTargetName; + ControlStructureImm imm; + parseControlImm(state,branchTargetName,imm); + + // Parse an optional condition expression. + if(state.nextToken[0].type != t_leftParenthesis || state.nextToken[1].type != t_then) + { + parseExpr(state); + } + + ScopedBranchTarget branchTarget(state,branchTargetName); + state.validatingCodeStream.if_(imm); + + // Parse the if clauses. + if(state.nextToken[0].type == t_leftParenthesis && state.nextToken[1].type == t_then) + { + // First syntax: (then )* (else *)? + parseParenthesized(state,[&] + { + require(state,t_then); + parseInstrSequence(state); + }); + if(state.nextToken->type == t_leftParenthesis) + { + parseParenthesized(state,[&] + { + require(state,t_else_); + state.validatingCodeStream.else_(); + parseInstrSequence(state); + }); + } + } + else + { + // Second syntax option: ? + parseExpr(state); + if(state.nextToken->type != t_rightParenthesis) + { + state.validatingCodeStream.else_(); + parseExpr(state); + } + } + state.validatingCodeStream.end(); + break; + } + #define VISIT_OP(opcode,name,nameString,Imm,...) case t_##name: parseOp_##name(state,true); break; + ENUM_NONCONTROL_OPERATORS(VISIT_OP) + #undef VISIT_OP + default: + parseErrorf(state,state.nextToken,"expected opcode"); + throw RecoverParseException(); + } + } + catch(RecoverParseException) + { + state.validatingCodeStream.unreachable(); + throw RecoverParseException(); + } + catch(ValidationException exception) + { + parseErrorf(state,opcodeToken,"%s",exception.message.c_str()); + state.validatingCodeStream.unreachable(); + throw RecoverParseException(); + } + }); +} + +static void parseInstrSequence(FunctionParseState& state) +{ + while(true) + { + const Token* opcodeToken = state.nextToken; + try + { + switch(state.nextToken->type) + { + case t_leftParenthesis: parseExpr(state); break; + case t_rightParenthesis: return; + case t_else_: return; + case t_end: return; + case t_block: + { + ++state.nextToken; + parseBlock(state,false); + break; + } + case t_loop: + { + ++state.nextToken; + parseLoop(state,false); + break; + } + case t_if_: + { + ++state.nextToken; + + Name branchTargetName; + ControlStructureImm imm; + parseControlImm(state,branchTargetName,imm); + + ScopedBranchTarget branchTarget(state,branchTargetName); + state.validatingCodeStream.if_(imm); + + // Parse the then clause. + parseInstrSequence(state); + + // Parse the else clause. + if(state.nextToken->type == t_else_) + { + ++state.nextToken; + parseAndValidateRedundantBranchTargetName(state,branchTargetName,"if","else"); + + state.validatingCodeStream.else_(); + parseInstrSequence(state); + } + state.validatingCodeStream.end(); + + require(state,t_end); + parseAndValidateRedundantBranchTargetName(state,branchTargetName,"if","end"); + + break; + } + #define VISIT_OP(opcode,name,nameString,Imm,...) case t_##name: parseOp_##name(state,false); break; + ENUM_NONCONTROL_OPERATORS(VISIT_OP) + #undef VISIT_OP + default: + parseErrorf(state,state.nextToken,"expected opcode"); + throw RecoverParseException(); + } + } + catch(RecoverParseException) + { + state.validatingCodeStream.unreachable(); + throw RecoverParseException(); + } + catch(ValidationException exception) + { + parseErrorf(state,opcodeToken,"%s",exception.message.c_str()); + state.validatingCodeStream.unreachable(); + throw RecoverParseException(); + } + }; +} + +namespace WAST +{ + FunctionDef parseFunctionDef(ModuleParseState& state,const Token* funcToken) + { + std::vector* localDisassemblyNames = new std::vector; + NameToIndexMap* localNameToIndexMap = new NameToIndexMap(); + + // Parse an optional function type reference. + const Token* typeReferenceToken = state.nextToken; + IndexedFunctionType referencedFunctionType = {UINT32_MAX}; + if(state.nextToken[0].type == t_leftParenthesis + && state.nextToken[1].type == t_type) + { + referencedFunctionType = parseFunctionTypeRef(state,*localNameToIndexMap,*localDisassemblyNames); + } + + // Parse the explicit function parameters and result type. + const FunctionType* directFunctionType = parseFunctionType(state,*localNameToIndexMap,*localDisassemblyNames); + const bool hasNoDirectType = directFunctionType == FunctionType::get(); + + // Validate that if the function definition has both a type reference, and explicit parameter/result type declarations, that they match. + IndexedFunctionType functionType; + if(referencedFunctionType.index != UINT32_MAX && hasNoDirectType) + { + functionType = referencedFunctionType; + } + else + { + functionType = getUniqueFunctionTypeIndex(state,directFunctionType); + if(referencedFunctionType.index != UINT32_MAX && state.module.types[referencedFunctionType.index] != directFunctionType) + { + parseErrorf(state,typeReferenceToken,"referenced function type (%s) does not match declared parameters and results (%s)", + asString(state.module.types[referencedFunctionType.index]).c_str(), + asString(directFunctionType).c_str() + ); + } + } + + // Parse the function's local variables. + std::vector nonParameterLocalTypes; + while(tryParseParenthesizedTagged(state,t_local,[&] + { + Name localName; + if(tryParseName(state,localName)) + { + bindName(state,*localNameToIndexMap,localName,directFunctionType->parameters.size() + nonParameterLocalTypes.size()); + localDisassemblyNames->push_back(localName.getString()); + nonParameterLocalTypes.push_back(parseValueType(state)); + } + else + { + while(state.nextToken->type != t_rightParenthesis) + { + localDisassemblyNames->push_back(std::string()); + nonParameterLocalTypes.push_back(parseValueType(state)); + }; + } + })); + + // Defer parsing the body of the function until after all declarations have been parsed. + const Uptr functionIndex = state.module.functions.size(); + const Uptr functionDefIndex = state.module.functions.defs.size(); + const Token* firstBodyToken = state.nextToken; + state.postDeclarationCallbacks.push_back([functionIndex,functionDefIndex,firstBodyToken,localNameToIndexMap,localDisassemblyNames](ModuleParseState& state) + { + FunctionParseState functionState(state,localNameToIndexMap,firstBodyToken,state.module.functions.defs[functionDefIndex]); + try + { + parseInstrSequence(functionState); + if(!functionState.errors.size()) + { + functionState.validatingCodeStream.end(); + functionState.validatingCodeStream.finishValidation(); + } + } + catch(ValidationException exception) + { + parseErrorf(state,firstBodyToken,"%s",exception.message.c_str()); + } + catch(RecoverParseException) {} + catch(FatalParseException) {} + + state.module.functions.defs[functionDefIndex].code = std::move(functionState.codeByteStream.getBytes()); + state.disassemblyNames.functions[functionIndex].locals = std::move(*localDisassemblyNames); + delete localDisassemblyNames; + }); + + // Continue parsing after the closing parenthesis. + findClosingParenthesis(state,funcToken-1); + --state.nextToken; + + return {functionType,std::move(nonParameterLocalTypes),{}}; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/ParseModule.cpp b/libraries/wasm-jit/Source/WAST/ParseModule.cpp new file mode 100644 index 000000000..aa03cdd7c --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/ParseModule.cpp @@ -0,0 +1,651 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Timing.h" +#include "WAST.h" +#include "Lexer.h" +#include "IR/Module.h" +#include "IR/Validate.h" +#include "Parse.h" + +using namespace WAST; +using namespace IR; + +static bool tryParseSizeConstraints(ParseState& state,U64 maxMax,SizeConstraints& outSizeConstraints) +{ + outSizeConstraints.min = 0; + outSizeConstraints.max = UINT64_MAX; + + // Parse a minimum. + if(!tryParseI64(state,outSizeConstraints.min)) + { + return false; + } + else + { + // Parse an optional maximum. + if(!tryParseI64(state,outSizeConstraints.max)) { outSizeConstraints.max = UINT64_MAX; } + else + { + // Validate that the maximum size is within the limit, and that the size contraints is not disjoint. + if(outSizeConstraints.max > maxMax) + { + parseErrorf(state,state.nextToken-1,"maximum size exceeds limit (%u>%u)",outSizeConstraints.max,maxMax); + outSizeConstraints.max = maxMax; + } + else if(outSizeConstraints.max < outSizeConstraints.min) + { + parseErrorf(state,state.nextToken-1,"maximum size is less than minimum size (%u<%u)",outSizeConstraints.max,outSizeConstraints.min); + outSizeConstraints.max = outSizeConstraints.min; + } + } + + return true; + } +} + +static SizeConstraints parseSizeConstraints(ParseState& state,U64 maxMax) +{ + SizeConstraints result; + if(!tryParseSizeConstraints(state,maxMax,result)) + { + parseErrorf(state,state.nextToken,"expected size constraints"); + } + return result; +} + +static GlobalType parseGlobalType(ParseState& state) +{ + GlobalType result; + result.isMutable = tryParseParenthesizedTagged(state,t_mut,[&] + { + result.valueType = parseValueType(state); + }); + if(!result.isMutable) + { + result.valueType = parseValueType(state); + } + return result; +} + +static InitializerExpression parseInitializerExpression(ModuleParseState& state) +{ + InitializerExpression result; + parseParenthesized(state,[&] + { + switch(state.nextToken->type) + { + case t_i32_const: { ++state.nextToken; result = (I32)parseI32(state); break; } + case t_i64_const: { ++state.nextToken; result = (I64)parseI64(state); break; } + case t_f32_const: { ++state.nextToken; result = parseF32(state); break; } + case t_f64_const: { ++state.nextToken; result = parseF64(state); break; } + case t_get_global: + { + ++state.nextToken; + result.type = InitializerExpression::Type::get_global; + result.globalIndex = parseAndResolveNameOrIndexRef( + state, + state.globalNameToIndexMap, + state.module.globals.size(), + "global" + ); + break; + } + default: + parseErrorf(state,state.nextToken,"expected initializer expression"); + result.type = InitializerExpression::Type::error; + throw RecoverParseException(); + }; + }); + + return result; +} + +static void errorIfFollowsDefinitions(ModuleParseState& state) +{ + if(state.module.functions.defs.size() + || state.module.tables.defs.size() + || state.module.memories.defs.size() + || state.module.globals.defs.size()) + { + parseErrorf(state,state.nextToken,"import declarations must precede all definitions"); + } +} + +template +static void createImport( + ParseState& state,Name name,std::string&& moduleName,std::string&& exportName, + NameToIndexMap& nameToIndexMap,IndexSpace& indexSpace,std::vector& disassemblyNameArray, + Type type) +{ + bindName(state,nameToIndexMap,name,indexSpace.size()); + disassemblyNameArray.push_back({name.getString()}); + indexSpace.imports.push_back({type,std::move(moduleName),std::move(exportName)}); +} + +static bool parseOptionalSharedDeclaration(ModuleParseState& state) +{ + if(ENABLE_THREADING_PROTOTYPE && state.nextToken->type == t_shared) { ++state.nextToken; return true; } + else { return false; } +} + +static void parseImport(ModuleParseState& state) +{ + errorIfFollowsDefinitions(state); + + require(state,t_import); + + std::string moduleName = parseUTF8String(state); + std::string exportName = parseUTF8String(state); + + parseParenthesized(state,[&] + { + // Parse the import kind. + const Token* importKindToken = state.nextToken; + switch(importKindToken->type) + { + case t_func: + case t_table: + case t_memory: + case t_global: + ++state.nextToken; + break; + default: + parseErrorf(state,state.nextToken,"invalid import type"); + throw RecoverParseException(); + } + + // Parse an optional internal name for the import. + Name name; + tryParseName(state,name); + + // Parse the import type and create the import in the appropriate name/index spaces. + switch(importKindToken->type) + { + case t_func: + { + NameToIndexMap localNameToIndexMap; + std::vector localDissassemblyNames; + const IndexedFunctionType functionType = parseFunctionTypeRef(state,localNameToIndexMap,localDissassemblyNames); + createImport(state,name,std::move(moduleName),std::move(exportName), + state.functionNameToIndexMap,state.module.functions,state.disassemblyNames.functions, + functionType); + state.disassemblyNames.functions.back().locals = localDissassemblyNames; + break; + } + case t_table: + { + const SizeConstraints sizeConstraints = parseSizeConstraints(state,UINT32_MAX); + const TableElementType elementType = TableElementType::anyfunc; + require(state,t_anyfunc); + const bool isShared = parseOptionalSharedDeclaration(state); + createImport(state,name,std::move(moduleName),std::move(exportName), + state.tableNameToIndexMap,state.module.tables,state.disassemblyNames.tables, + {elementType,isShared,sizeConstraints}); + break; + } + case t_memory: + { + const SizeConstraints sizeConstraints = parseSizeConstraints(state,IR::maxMemoryPages); + const bool isShared = parseOptionalSharedDeclaration(state); + createImport(state,name,std::move(moduleName),std::move(exportName), + state.memoryNameToIndexMap,state.module.memories,state.disassemblyNames.memories, + MemoryType{isShared,sizeConstraints}); + break; + } + case t_global: + { + const GlobalType globalType = parseGlobalType(state); + createImport(state,name,std::move(moduleName),std::move(exportName), + state.globalNameToIndexMap,state.module.globals,state.disassemblyNames.globals, + globalType); + break; + } + default: Errors::unreachable(); + }; + }); +} + +static void parseExport(ModuleParseState& state) +{ + require(state,t_export); + + const std::string exportName = parseUTF8String(state); + + parseParenthesized(state,[&] + { + ObjectKind exportKind; + switch(state.nextToken->type) + { + case t_func: exportKind = ObjectKind::function; break; + case t_table: exportKind = ObjectKind::table; break; + case t_memory: exportKind = ObjectKind::memory; break; + case t_global: exportKind = ObjectKind::global; break; + default: + parseErrorf(state,state.nextToken,"invalid export kind"); + throw RecoverParseException(); + }; + ++state.nextToken; + + Reference exportRef; + if(!tryParseNameOrIndexRef(state,exportRef)) + { + parseErrorf(state,state.nextToken,"expected name or index"); + throw RecoverParseException(); + } + + const Uptr exportIndex = state.module.exports.size(); + state.module.exports.push_back({std::move(exportName),exportKind,0}); + + state.postDeclarationCallbacks.push_back([=](ModuleParseState& state) + { + Uptr& exportedObjectIndex = state.module.exports[exportIndex].index; + switch(exportKind) + { + case ObjectKind::function: exportedObjectIndex = resolveRef(state,state.functionNameToIndexMap,state.module.functions.size(),exportRef); break; + case ObjectKind::table: exportedObjectIndex = resolveRef(state,state.tableNameToIndexMap,state.module.tables.size(),exportRef); break; + case ObjectKind::memory: exportedObjectIndex = resolveRef(state,state.memoryNameToIndexMap,state.module.memories.size(),exportRef); break; + case ObjectKind::global: exportedObjectIndex = resolveRef(state,state.globalNameToIndexMap,state.module.globals.size(),exportRef); break; + default: + Errors::unreachable(); + } + }); + }); +} + +static void parseType(ModuleParseState& state) +{ + require(state,t_type); + + Name name; + tryParseName(state,name); + + parseParenthesized(state,[&] + { + require(state,t_func); + + NameToIndexMap parameterNameToIndexMap; + std::vector localDisassemblyNames; + const FunctionType* functionType = parseFunctionType(state,parameterNameToIndexMap,localDisassemblyNames); + + Uptr functionTypeIndex = state.module.types.size(); + state.module.types.push_back(functionType); + errorUnless(functionTypeIndex < UINT32_MAX); + state.functionTypeToIndexMap[functionType] = (U32)functionTypeIndex; + + bindName(state,state.typeNameToIndexMap,name,functionTypeIndex); + state.disassemblyNames.types.push_back(name.getString()); + }); +} + +static void parseData(ModuleParseState& state) +{ + const Token* firstToken = state.nextToken; + require(state,t_data); + + // Parse an optional memory name. + Reference memoryRef; + bool hasMemoryRef = tryParseNameOrIndexRef(state,memoryRef); + + // Parse an initializer expression for the base address of the data. + const InitializerExpression baseAddress = parseInitializerExpression(state); + + // Parse a list of strings that contains the segment's data. + std::string dataString; + while(tryParseString(state,dataString)) {}; + + // Create the data segment. + std::vector dataVector((const U8*)dataString.data(),(const U8*)dataString.data() + dataString.size()); + const Uptr dataSegmentIndex = state.module.dataSegments.size(); + state.module.dataSegments.push_back({UINTPTR_MAX,baseAddress,std::move(dataVector)}); + + // Enqueue a callback that is called after all declarations are parsed to resolve the memory to put the data segment in. + state.postDeclarationCallbacks.push_back([=](ModuleParseState& state) + { + if(!state.module.memories.size()) + { + parseErrorf(state,firstToken,"data segments aren't allowed in modules without any memory declarations"); + } + else + { + state.module.dataSegments[dataSegmentIndex].memoryIndex = + hasMemoryRef ? resolveRef(state,state.memoryNameToIndexMap,state.module.memories.size(),memoryRef) : 0; + } + }); +} + +static Uptr parseElemSegmentBody(ModuleParseState& state,Reference tableRef,InitializerExpression baseIndex,const Token* elemToken) +{ + // Allocate the elementReferences array on the heap so it doesn't need to be copied for the post-declaration callback. + std::vector* elementReferences = new std::vector(); + + Reference elementRef; + while(tryParseNameOrIndexRef(state,elementRef)) + { + elementReferences->push_back(elementRef); + }; + + // Create the table segment. + const Uptr tableSegmentIndex = state.module.tableSegments.size(); + state.module.tableSegments.push_back({UINTPTR_MAX,baseIndex,std::vector()}); + + // Enqueue a callback that is called after all declarations are parsed to resolve the table elements' references. + state.postDeclarationCallbacks.push_back([tableRef,tableSegmentIndex,elementReferences,elemToken](ModuleParseState& state) + { + if(!state.module.tables.size()) + { + parseErrorf(state,elemToken,"data segments aren't allowed in modules without any memory declarations"); + } + else + { + TableSegment& tableSegment = state.module.tableSegments[tableSegmentIndex]; + tableSegment.tableIndex = tableRef ? resolveRef(state,state.tableNameToIndexMap,state.module.tables.size(),tableRef) : 0; + + tableSegment.indices.resize(elementReferences->size()); + for(Uptr elementIndex = 0;elementIndex < elementReferences->size();++elementIndex) + { + tableSegment.indices[elementIndex] = resolveRef( + state, + state.functionNameToIndexMap, + state.module.functions.size(), + (*elementReferences)[elementIndex] + ); + } + } + + // Free the elementReferences array that was allocated on the heap. + delete elementReferences; + }); + + return elementReferences->size(); +} + +static void parseElem(ModuleParseState& state) +{ + const Token* elemToken = state.nextToken; + require(state,t_elem); + + // Parse an optional table name. + Reference tableRef; + tryParseNameOrIndexRef(state,tableRef); + + // Parse an initializer expression for the base index of the elements. + const InitializerExpression baseIndex = parseInitializerExpression(state); + + parseElemSegmentBody(state,tableRef,baseIndex,elemToken); +} + + +template +static void parseObjectDefOrImport( + ModuleParseState& state, + NameToIndexMap& nameToIndexMap, + IR::IndexSpace& indexSpace, + std::vector& disassemblyNameArray, + TokenType declarationTag, + IR::ObjectKind kind, + ParseImport parseImportFunc, + ParseDef parseDefFunc) +{ + const Token* declarationTagToken = state.nextToken; + require(state,declarationTag); + + Name name; + tryParseName(state,name); + + // Handle inline export declarations. + while(true) + { + const bool isExport = tryParseParenthesizedTagged(state,t_export,[&] + { + state.module.exports.push_back({parseUTF8String(state),kind,indexSpace.size()}); + }); + if(!isExport) { break; } + }; + + // Handle an inline import declaration. + std::string importModuleName; + std::string exportName; + const bool isImport = tryParseParenthesizedTagged(state,t_import,[&] + { + errorIfFollowsDefinitions(state); + + importModuleName = parseUTF8String(state); + exportName = parseUTF8String(state); + }); + if(isImport) + { + Type importType = parseImportFunc(state); + createImport(state,name,std::move(importModuleName),std::move(exportName), + nameToIndexMap,indexSpace,disassemblyNameArray, + importType); + } + else + { + Def def = parseDefFunc(state,declarationTagToken); + bindName(state,nameToIndexMap,name,indexSpace.size()); + indexSpace.defs.push_back(std::move(def)); + disassemblyNameArray.push_back({name.getString()}); + } +} + +static void parseFunc(ModuleParseState& state) +{ + parseObjectDefOrImport(state,state.functionNameToIndexMap,state.module.functions,state.disassemblyNames.functions,t_func,ObjectKind::function, + [&](ModuleParseState& state) + { + NameToIndexMap localNameToIndexMap; + std::vector localDisassemblyNames; + return parseFunctionTypeRef(state,localNameToIndexMap,localDisassemblyNames); + }, + parseFunctionDef); +} + +static void parseTable(ModuleParseState& state) +{ + parseObjectDefOrImport(state,state.tableNameToIndexMap,state.module.tables,state.disassemblyNames.tables,t_table,ObjectKind::table, + // Parse a table import. + [](ModuleParseState& state) + { + const SizeConstraints sizeConstraints = parseSizeConstraints(state,UINT32_MAX); + const TableElementType elementType = TableElementType::anyfunc; + require(state,t_anyfunc); + const bool isShared = parseOptionalSharedDeclaration(state); + return TableType {elementType,isShared,sizeConstraints}; + }, + // Parse a table definition. + [](ModuleParseState& state,const Token*) + { + // Parse the table type. + SizeConstraints sizeConstraints; + const bool hasSizeConstraints = tryParseSizeConstraints(state,UINT32_MAX,sizeConstraints); + + const TableElementType elementType = TableElementType::anyfunc; + require(state,t_anyfunc); + + // If we couldn't parse an explicit size constraints, the table definition must contain an table segment that implicitly defines the size. + if(!hasSizeConstraints) + { + parseParenthesized(state,[&] + { + require(state,t_elem); + + const Uptr tableIndex = state.module.tables.size(); + errorUnless(tableIndex < UINT32_MAX); + const Uptr numElements = parseElemSegmentBody(state,Reference(U32(tableIndex)),InitializerExpression((I32)0),state.nextToken-1); + sizeConstraints.min = sizeConstraints.max = numElements; + }); + } + + const bool isShared = parseOptionalSharedDeclaration(state); + return TableDef {TableType(elementType,isShared,sizeConstraints)}; + }); +} + +static void parseMemory(ModuleParseState& state) +{ + parseObjectDefOrImport(state,state.memoryNameToIndexMap,state.module.memories,state.disassemblyNames.memories,t_memory,ObjectKind::memory, + // Parse a memory import. + [](ModuleParseState& state) + { + const SizeConstraints sizeConstraints = parseSizeConstraints(state,IR::maxMemoryPages); + const bool isShared = parseOptionalSharedDeclaration(state); + return MemoryType {isShared,sizeConstraints}; + }, + // Parse a memory definition + [](ModuleParseState& state,const Token*) + { + SizeConstraints sizeConstraints; + if(!tryParseSizeConstraints(state,IR::maxMemoryPages,sizeConstraints)) + { + std::string dataString; + + parseParenthesized(state,[&] + { + require(state,t_data); + + while(tryParseString(state,dataString)) {}; + }); + + std::vector dataVector((const U8*)dataString.data(),(const U8*)dataString.data() + dataString.size()); + sizeConstraints.min = sizeConstraints.max = (dataVector.size() + IR::numBytesPerPage - 1) / IR::numBytesPerPage; + state.module.dataSegments.push_back({state.module.memories.size(),InitializerExpression(I32(0)),std::move(dataVector)}); + } + + const bool isShared = parseOptionalSharedDeclaration(state); + return MemoryDef {MemoryType(isShared,sizeConstraints)}; + }); +} + +static void parseGlobal(ModuleParseState& state) +{ + parseObjectDefOrImport(state,state.globalNameToIndexMap,state.module.globals,state.disassemblyNames.globals,t_global,ObjectKind::global, + // Parse a global import. + parseGlobalType, + // Parse a global definition + [](ModuleParseState& state,const Token*) + { + const GlobalType globalType = parseGlobalType(state); + const InitializerExpression initializerExpression = parseInitializerExpression(state); + return GlobalDef {globalType,initializerExpression}; + }); +} + +static void parseStart(ModuleParseState& state) +{ + require(state,t_start); + + Reference functionRef; + if(!tryParseNameOrIndexRef(state,functionRef)) + { + parseErrorf(state,state.nextToken,"expected function name or index"); + } + + state.postDeclarationCallbacks.push_back([functionRef](ModuleParseState& state) + { + state.module.startFunctionIndex = resolveRef(state,state.functionNameToIndexMap,state.module.functions.size(),functionRef); + }); +} + +static void parseDeclaration(ModuleParseState& state) +{ + parseParenthesized(state,[&] + { + switch(state.nextToken->type) + { + case t_import: parseImport(state); return true; + case t_export: parseExport(state); return true; + case t_global: parseGlobal(state); return true; + case t_memory: parseMemory(state); return true; + case t_table: parseTable(state); return true; + case t_type: parseType(state); return true; + case t_data: parseData(state); return true; + case t_elem: parseElem(state); return true; + case t_func: parseFunc(state); return true; + case t_start: parseStart(state); return true; + default: + parseErrorf(state,state.nextToken,"unrecognized definition in module"); + throw RecoverParseException(); + }; + }); +} + +namespace WAST +{ + void parseModuleBody(ModuleParseState& state) + { + const Token* firstToken = state.nextToken; + + // Parse the module's declarations. + while(state.nextToken->type != t_rightParenthesis) + { + parseDeclaration(state); + }; + + // Process the callbacks requested after all declarations have been parsed. + if(!state.errors.size()) + { + for(const auto& callback : state.postDeclarationCallbacks) + { + callback(state); + } + } + + // Validate the module's definitions (excluding function code, which is validated as it is parsed). + if(!state.errors.size()) + { + try + { + IR::validateDefinitions(state.module); + } + catch(ValidationException validationException) + { + parseErrorf(state,firstToken,"validation exception: %s",validationException.message.c_str()); + } + } + + // Set the module's disassembly names. + assert(state.module.functions.size() == state.disassemblyNames.functions.size()); + assert(state.module.tables.size() == state.disassemblyNames.tables.size()); + assert(state.module.memories.size() == state.disassemblyNames.memories.size()); + assert(state.module.globals.size() == state.disassemblyNames.globals.size()); + IR::setDisassemblyNames(state.module,state.disassemblyNames); + } + + bool parseModule(const char* string,Uptr stringLength,IR::Module& outModule,std::vector& outErrors) + { + Timing::Timer timer; + + // Lex the string. + LineInfo* lineInfo = nullptr; + std::vector unresolvedErrors; + Token* tokens = lex(string,stringLength,lineInfo); + ModuleParseState state(string,lineInfo,unresolvedErrors,tokens,outModule); + + try + { + // Parse (module ...) + parseParenthesized(state,[&] + { + require(state,t_module); + parseModuleBody(state); + }); + require(state,t_eof); + } + catch(RecoverParseException) {} + catch(FatalParseException) {} + + // Resolve line information for any errors, and write them to outErrors. + for(auto& unresolvedError : unresolvedErrors) + { + TextFileLocus locus = calcLocusFromOffset(state.string,lineInfo,unresolvedError.charOffset); + outErrors.push_back({std::move(locus),std::move(unresolvedError.message)}); + } + + // Free the tokens and line info. + freeTokens(tokens); + freeLineInfo(lineInfo); + + Timing::logRatePerSecond("lexed and parsed WAST",timer,stringLength / 1024.0 / 1024.0,"MB"); + + return outErrors.size() == 0; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/ParseNumbers.cpp b/libraries/wasm-jit/Source/WAST/ParseNumbers.cpp new file mode 100644 index 000000000..9c2073185 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/ParseNumbers.cpp @@ -0,0 +1,398 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Floats.h" +#include "WAST.h" +#include "Lexer.h" +#include "Parse.h" + +#include +#include + +// Include the David Gay's dtoa code. +namespace DavidGay +{ + #define IEEE_8087 + #define NO_HEX_FP + #define NO_INFNAN_CHECK + #define strtod parseDecimalF64 + #define dtoa printDecimalF64 + + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4244 4083 4706 4701 4703) + #elif defined(__GNUC__) && !defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wsign-compare" + #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + #define Long int + #else + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wsign-compare" + #define Long int + #endif + + #include "../ThirdParty/dtoa.c" + + #ifdef _MSC_VER + #pragma warning(pop) + #else + #pragma GCC diagnostic pop + #undef Long + #endif + + #undef IEEE_8087 + #undef NO_HEX_FP + #undef NO_STRTOD_BIGCOMP + #undef NO_INFNAN_CHECK + #undef strtod + #undef dtoa +}; + +using namespace WAST; + +// Parses an optional + or - sign and returns true if a - sign was parsed. +// If either a + or - sign is parsed, nextChar is advanced past it. +static bool parseSign(const char*& nextChar) +{ + if(*nextChar == '-') { ++nextChar; return true; } + else if(*nextChar == '+') { ++nextChar; } + return false; +} + +// Parses an unsigned integer from hexits, starting with "0x", and advancing nextChar past the parsed hexits. +// be called for input that's already been accepted by the lexer as a hexadecimal integer. +static U64 parseHexUnsignedInt(const char*& nextChar,ParseState& state,U64 maxValue) +{ + const char* firstHexit = nextChar; + assert(nextChar[0] == '0' && (nextChar[1] == 'x' || nextChar[1] == 'X')); + nextChar += 2; + + U64 result = 0; + U8 hexit = 0; + while(tryParseHexit(nextChar,hexit)) + { + if(result > (maxValue - hexit) / 16) + { + parseErrorf(state,firstHexit,"integer literal is too large"); + result = maxValue; + while(tryParseHexit(nextChar,hexit)) {}; + break; + } + assert(result * 16 + hexit >= result); + result = result * 16 + hexit; + } + return result; +} + +// Parses an unsigned integer from digits, advancing nextChar past the parsed digits. +// Assumes it will only be called for input that's already been accepted by the lexer as a decimal integer. +static U64 parseDecimalUnsignedInt(const char*& nextChar,ParseState& state,U64 maxValue,const char* context) +{ + U64 result = 0; + const char* firstDigit = nextChar; + while(*nextChar >= '0' && *nextChar <= '9') + { + const U8 digit = *nextChar - '0'; + ++nextChar; + + if(result > U64(maxValue - digit) / 10) + { + parseErrorf(state,firstDigit,"%s is too large",context); + result = maxValue; + while(*nextChar >= '0' && *nextChar <= '9') { ++nextChar; }; + break; + } + assert(result * 10 + digit >= result); + result = result * 10 + digit; + }; + return result; +} + +// Parses a floating-point NaN, advancing nextChar past the parsed characters. +// Assumes it will only be called for input that's already been accepted by the lexer as a literal NaN. +template +Float parseNaN(const char*& nextChar,ParseState& state) +{ + typedef typename Floats::FloatComponents FloatComponents; + FloatComponents resultComponents; + resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; + resultComponents.bits.exponent = FloatComponents::maxExponentBits; + + assert(nextChar[0] == 'n' + && nextChar[1] == 'a' + && nextChar[2] == 'n'); + nextChar += 3; + + if(*nextChar == ':') + { + ++nextChar; + + const U64 significandBits = parseHexUnsignedInt(nextChar,state,FloatComponents::maxSignificand); + resultComponents.bits.significand = typename FloatComponents::Bits(significandBits); + } + else + { + // If the NaN's significand isn't specified, just set the top bit. + resultComponents.bits.significand = typename FloatComponents::Bits(1) << (FloatComponents::numSignificandBits-1); + } + + return resultComponents.value; +} + + +// Parses a floating-point infinity. Does not advance nextChar. +// Assumes it will only be called for input that's already been accepted by the lexer as a literal infinity. +template +Float parseInfinity(const char* nextChar) +{ + // Floating point infinite is represented by max exponent with a zero significand. + typedef typename Floats::FloatComponents FloatComponents; + FloatComponents resultComponents; + resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; + resultComponents.bits.exponent = FloatComponents::maxExponentBits; + resultComponents.bits.significand = 0; + return resultComponents.value; +} + +// Parses a decimal floating point literal, advancing nextChar past the parsed characters. +// Assumes it will only be called for input that's already been accepted by the lexer as a decimal float literal. +template +Float parseDecimalFloat(const char*& nextChar,ParseState& state) +{ + // Use David Gay's strtod to parse a floating point number. + const char* firstChar = nextChar; + F64 f64 = DavidGay::parseDecimalF64(nextChar,const_cast(&nextChar)); + if(nextChar == firstChar) + { + ++nextChar; + Errors::fatalf("strtod failed to parse number accepted by lexer"); + } + if(f64 < std::numeric_limits::lowest() || f64 > std::numeric_limits::max()) + { + parseErrorf(state,firstChar,"float literal is too large"); + } + + return (Float)f64; +} + +// Parses a hexadecimal floating point literal, advancing nextChar past the parsed characters. +// Assumes it will only be called for input that's already been accepted by the lexer as a hexadecimal float literal. +template +Float parseHexFloat(const char*& nextChar,ParseState& state) +{ + typedef typename Floats::FloatComponents FloatComponents; + typedef typename FloatComponents::Bits FloatBits; + FloatComponents resultComponents; + + resultComponents.bits.sign = parseSign(nextChar) ? 1 : 0; + + assert(nextChar[0] == '0' && (nextChar[1] == 'x' || nextChar[1] == 'X')); + nextChar += 2; + + // Parse hexits into a 64-bit fixed point number, keeping track of where the point is in exponent. + U64 fixedPoI64 = 0; + bool hasSeenPoint = false; + I64 exponent = 0; + while(true) + { + U8 hexit = 0; + if(tryParseHexit(nextChar,hexit)) + { + // Once there are too many hexits to accumulate in the 64-bit fixed point number, ignore + // the hexits, but continue to update exponent so we get an accurate but imprecise number. + if(fixedPoI64 <= (UINT64_MAX - 15) / 16) + { + assert(fixedPoI64 * 16 + hexit >= fixedPoI64); + fixedPoI64 = fixedPoI64 * 16 + hexit; + exponent -= hasSeenPoint ? 4 : 0; + } + else + { + exponent += hasSeenPoint ? 0 : 4; + } + } + else if(*nextChar == '.') + { + assert(!hasSeenPoint); + hasSeenPoint = true; + ++nextChar; + } + else { break; } + } + + // Parse an optional exponent. + if(*nextChar == 'p' || *nextChar == 'P') + { + ++nextChar; + const bool isExponentNegative = parseSign(nextChar); + const U64 userExponent = parseDecimalUnsignedInt(nextChar,state,U64(-INT32_MIN),"float literal exponent"); + exponent = isExponentNegative ? exponent - userExponent : exponent + userExponent; + } + + if(!fixedPoI64) + { + // If both the integer and fractional part are zero, just return zero. + resultComponents.bits.exponent = 0; + resultComponents.bits.significand = 0; + } + else + { + // Shift the fixed point number's most significant set bit into the MSB. + const Uptr leadingZeroes = Platform::countLeadingZeroes(fixedPoI64); + fixedPoI64 <<= leadingZeroes; + exponent += 64; + exponent -= leadingZeroes; + + const I64 exponentWithImplicitLeadingOne = exponent - 1; + if(exponentWithImplicitLeadingOne > FloatComponents::maxNormalExponent) + { + // If the number is out of range, produce an error and return infinity. + resultComponents.bits.exponent = FloatComponents::maxExponentBits; + resultComponents.bits.significand = FloatComponents::maxSignificand; + parseErrorf(state,state.nextToken,"hexadecimal float literal is out of range"); + } + else if(exponentWithImplicitLeadingOne < FloatComponents::minNormalExponent) + { + // Denormals are encoded as if their exponent is minNormalExponent, but + // with the significand shifted down to include the leading 1 that is implicit for + // normal numbers, and with the encoded exponent = 0. + const Uptr denormalShift = FloatComponents::minNormalExponent - exponent; + fixedPoI64 = denormalShift >= 64 ? 0 : (fixedPoI64 >> denormalShift); + resultComponents.bits.exponent = 0; + resultComponents.bits.significand = FloatBits(fixedPoI64 >> (64 - FloatComponents::numSignificandBits)); + } + else + { + // Encode a normal floating point value. + assert(exponentWithImplicitLeadingOne >= FloatComponents::minNormalExponent); + assert(exponentWithImplicitLeadingOne <= FloatComponents::maxNormalExponent); + resultComponents.bits.exponent = FloatBits(exponentWithImplicitLeadingOne + FloatComponents::exponentBias); + resultComponents.bits.significand = FloatBits(fixedPoI64 >> (63 - FloatComponents::numSignificandBits)); + } + } + + return resultComponents.value; +} + +// Tries to parse an numeric literal token as an integer, advancing state.nextToken. +// Returns true if it matched a token. +template +bool tryParseInt(ParseState& state,UnsignedInt& outUnsignedInt,I64 minSignedValue,U64 maxUnsignedValue) +{ + bool isNegative = false; + U64 u64 = 0; + + const char* nextChar = state.string + state.nextToken->begin; + switch(state.nextToken->type) + { + case t_decimalInt: + isNegative = parseSign(nextChar); + u64 = parseDecimalUnsignedInt(nextChar,state,isNegative ? U64(-minSignedValue) : maxUnsignedValue,"int literal"); + break; + case t_hexInt: + isNegative = parseSign(nextChar); + u64 = parseHexUnsignedInt(nextChar,state,isNegative ? U64(-minSignedValue) : maxUnsignedValue); + break; + default: + return false; + }; + + outUnsignedInt = isNegative ? UnsignedInt(-I64(u64)) : UnsignedInt(u64); + + ++state.nextToken; + assert(nextChar <= state.string + state.nextToken->begin); + + return true; +} + +// Tries to parse a numeric literal literal token as a float, advancing state.nextToken. +// Returns true if it matched a token. +template +bool tryParseFloat(ParseState& state,Float& outFloat) +{ + const char* nextChar = state.string + state.nextToken->begin; + switch(state.nextToken->type) + { + case t_decimalInt: + case t_decimalFloat: outFloat = parseDecimalFloat(nextChar,state); break; + case t_hexInt: + case t_hexFloat: outFloat = parseHexFloat(nextChar,state); break; + case t_floatNaN: outFloat = parseNaN(nextChar,state); break; + case t_floatInf: outFloat = parseInfinity(nextChar); break; + default: + parseErrorf(state,state.nextToken,"expected float literal"); + return false; + }; + + ++state.nextToken; + assert(nextChar <= state.string + state.nextToken->begin); + + return true; +} + +namespace WAST +{ + bool tryParseI32(ParseState& state,U32& outI32) + { + return tryParseInt(state,outI32,INT32_MIN,UINT32_MAX); + } + + bool tryParseI64(ParseState& state,U64& outI64) + { + return tryParseInt(state,outI64,INT64_MIN,UINT64_MAX); + } + + U8 parseI8(ParseState& state) + { + U32 result; + if(!tryParseInt(state,result,INT8_MIN,UINT8_MAX)) + { + parseErrorf(state,state.nextToken,"expected i8 literal"); + throw RecoverParseException(); + } + return U8(result); + } + + U32 parseI32(ParseState& state) + { + U32 result; + if(!tryParseI32(state,result)) + { + parseErrorf(state,state.nextToken,"expected i32 literal"); + throw RecoverParseException(); + } + return result; + } + + U64 parseI64(ParseState& state) + { + U64 result; + if(!tryParseI64(state,result)) + { + parseErrorf(state,state.nextToken,"expected i64 literal"); + throw RecoverParseException(); + } + return result; + } + + F32 parseF32(ParseState& state) + { + F32 result; + if(!tryParseFloat(state,result)) + { + parseErrorf(state,state.nextToken,"expected f32 literal"); + throw RecoverParseException(); + } + return result; + } + + F64 parseF64(ParseState& state) + { + F64 result; + if(!tryParseFloat(state,result)) + { + parseErrorf(state,state.nextToken,"expected f64 literal"); + throw RecoverParseException(); + } + return result; + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/ParseTests.cpp b/libraries/wasm-jit/Source/WAST/ParseTests.cpp new file mode 100644 index 000000000..e62d94a9f --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/ParseTests.cpp @@ -0,0 +1,359 @@ +#include "Inline/BasicTypes.h" +#include "WAST.h" +#include "TestScript.h" +#include "Lexer.h" +#include "IR/Module.h" +#include "IR/Validate.h" +#include "Runtime/TaggedValue.h" +#include "Parse.h" +#include "Inline/Serialization.h" +#include "WASM/WASM.h" + +using namespace WAST; +using namespace IR; + +static Runtime::Value parseConstExpression(ParseState& state) +{ + Runtime::Value result; + parseParenthesized(state,[&] + { + switch(state.nextToken->type) + { + case t_i32_const: + { + ++state.nextToken; + result = parseI32(state); + break; + } + case t_i64_const: + { + ++state.nextToken; + result = parseI64(state); + break; + } + case t_f32_const: + { + ++state.nextToken; + result = parseF32(state); + break; + } + case t_f64_const: + { + ++state.nextToken; + result = parseF64(state); + break; + } + default: + parseErrorf(state,state.nextToken,"expected const expression"); + throw RecoverParseException(); + }; + }); + return result; +} + +static std::string parseOptionalNameAsString(ParseState& state) +{ + Name name; + return tryParseName(state,name) ? name.getString() : std::string(); +} + +static void parseTestScriptModule(ParseState& state,IR::Module& outModule,std::vector& outErrors,std::string& outInternalModuleName) +{ + ModuleParseState moduleState(state.string,state.lineInfo,outErrors,state.nextToken,outModule); + + outInternalModuleName = parseOptionalNameAsString(moduleState); + + if(moduleState.nextToken->type == t_quote || moduleState.nextToken->type == t_binary) + { + // Parse a quoted module: (module quote|binary "...") + const Token* quoteToken = moduleState.nextToken; + ++moduleState.nextToken; + + std::string moduleQuotedString; + if(!tryParseString(moduleState,moduleQuotedString)) + { + parseErrorf(moduleState,moduleState.nextToken,"expected string"); + } + else + { + while(tryParseString(moduleState,moduleQuotedString)) {}; + } + + if(quoteToken->type == t_quote) + { + moduleQuotedString = "(module " + moduleQuotedString + ")"; + + std::vector quotedErrors; + parseModule(moduleQuotedString.c_str(),moduleQuotedString.size(),outModule,quotedErrors); + for(auto&& error : quotedErrors) + { + outErrors.emplace_back(quoteToken->begin,std::move(error.message)); + } + } + else + { + try + { + Serialization::MemoryInputStream wasmInputStream((const U8*)moduleQuotedString.data(),moduleQuotedString.size()); + WASM::serialize(wasmInputStream,outModule); + } + catch(Serialization::FatalSerializationException exception) + { + parseErrorf(moduleState,quoteToken,"error deserializing binary module: %s",exception.message.c_str()); + } + catch(ValidationException exception) + { + parseErrorf(moduleState,quoteToken,"error validating binary module: %s",exception.message.c_str()); + } + } + } + else + { + try + { + parseModuleBody(moduleState); + } + catch(RecoverParseException) + { + outErrors.insert(outErrors.end(),std::make_move_iterator(moduleState.errors.begin()),std::make_move_iterator(moduleState.errors.end())); + state.nextToken = moduleState.nextToken; + throw RecoverParseException(); + } + } + + state.nextToken = moduleState.nextToken; +} + +static Action* parseAction(ParseState& state) +{ + Action* result = nullptr; + parseParenthesized(state,[&] + { + TextFileLocus locus = calcLocusFromOffset(state.string,state.lineInfo,state.nextToken->begin); + + switch(state.nextToken->type) + { + case t_get: + { + ++state.nextToken; + + std::string nameString = parseOptionalNameAsString(state); + std::string exportName = parseUTF8String(state); + + result = new GetAction(std::move(locus),std::move(nameString),std::move(exportName)); + break; + } + case t_invoke: + { + ++state.nextToken; + + std::string nameString = parseOptionalNameAsString(state); + std::string exportName = parseUTF8String(state); + + std::vector arguments; + while(state.nextToken->type == t_leftParenthesis) + { + arguments.push_back(parseConstExpression(state)); + }; + + result = new InvokeAction(std::move(locus),std::move(nameString),std::move(exportName),std::move(arguments)); + break; + } + case t_module: + { + ++state.nextToken; + + std::string internalModuleName; + Module* module = new Module; + parseTestScriptModule(state,*module,state.errors,internalModuleName); + + result = new ModuleAction(std::move(locus),std::move(internalModuleName),module); + break; + } + default: + parseErrorf(state,state.nextToken,"expected 'get' or 'invoke'"); + throw RecoverParseException(); + }; + }); + + return result; +} + +static Command* parseCommand(ParseState& state) +{ + Command* result = nullptr; + + if(state.nextToken[0].type == t_leftParenthesis + && (state.nextToken[1].type == t_module + || state.nextToken[1].type == t_invoke + || state.nextToken[1].type == t_get)) + { + Action* action = parseAction(state); + TextFileLocus locus = action->locus; + result = new ActionCommand(std::move(locus),action); + } + else + { + parseParenthesized(state,[&] + { + TextFileLocus locus = calcLocusFromOffset(state.string,state.lineInfo,state.nextToken->begin); + + switch(state.nextToken->type) + { + case t_register: + { + ++state.nextToken; + + std::string moduleName = parseUTF8String(state); + std::string nameString = parseOptionalNameAsString(state); + + result = new RegisterCommand(std::move(locus),std::move(moduleName),std::move(nameString)); + break; + } + case t_assert_return: + { + ++state.nextToken; + + Action* action = parseAction(state); + Runtime::Result expectedReturn = state.nextToken->type == t_leftParenthesis ? parseConstExpression(state) : Runtime::Result(); + result = new AssertReturnCommand(std::move(locus),action,expectedReturn); + break; + } + case t_assert_return_canonical_nan: + case t_assert_return_arithmetic_nan: + { + const Command::Type commandType = state.nextToken->type == t_assert_return_canonical_nan + ? Command::assert_return_canonical_nan + : Command::assert_return_arithmetic_nan; + ++state.nextToken; + + Action* action = parseAction(state); + result = new AssertReturnNaNCommand(commandType,std::move(locus),action); + break; + } + case t_assert_exhaustion: + case t_assert_trap: + { + ++state.nextToken; + + Action* action = parseAction(state); + + std::string expectedErrorMessage; + if(!tryParseString(state,expectedErrorMessage)) + { + parseErrorf(state,state.nextToken,"expected string literal"); + throw RecoverParseException(); + } + Runtime::Exception::Cause expectedCause = Runtime::Exception::Cause::unknown; + if(!strcmp(expectedErrorMessage.c_str(),"out of bounds memory access")) { expectedCause = Runtime::Exception::Cause::accessViolation; } + else if(!strcmp(expectedErrorMessage.c_str(),"call stack exhausted")) { expectedCause = Runtime::Exception::Cause::stackOverflow; } + else if(!strcmp(expectedErrorMessage.c_str(),"integer overflow")) { expectedCause = Runtime::Exception::Cause::integerDivideByZeroOrIntegerOverflow; } + else if(!strcmp(expectedErrorMessage.c_str(),"integer divide by zero")) { expectedCause = Runtime::Exception::Cause::integerDivideByZeroOrIntegerOverflow; } + else if(!strcmp(expectedErrorMessage.c_str(),"invalid conversion to integer")) { expectedCause = Runtime::Exception::Cause::invalidFloatOperation; } + else if(!strcmp(expectedErrorMessage.c_str(),"unreachable executed")) { expectedCause = Runtime::Exception::Cause::reachedUnreachable; } + else if(!strcmp(expectedErrorMessage.c_str(),"unreachable")) { expectedCause = Runtime::Exception::Cause::reachedUnreachable; } + else if(!strcmp(expectedErrorMessage.c_str(),"indirect call signature mismatch")) { expectedCause = Runtime::Exception::Cause::indirectCallSignatureMismatch; } + else if(!strcmp(expectedErrorMessage.c_str(),"indirect call")) { expectedCause = Runtime::Exception::Cause::indirectCallSignatureMismatch; } + else if(!strcmp(expectedErrorMessage.c_str(),"undefined element")) { expectedCause = Runtime::Exception::Cause::undefinedTableElement; } + else if(!strcmp(expectedErrorMessage.c_str(),"undefined")) { expectedCause = Runtime::Exception::Cause::undefinedTableElement; } + else if(!strcmp(expectedErrorMessage.c_str(),"uninitialized")) { expectedCause = Runtime::Exception::Cause::undefinedTableElement; } + else if(!strcmp(expectedErrorMessage.c_str(),"uninitialized element")) { expectedCause = Runtime::Exception::Cause::undefinedTableElement; } + + result = new AssertTrapCommand(std::move(locus),action,expectedCause); + break; + } + case t_assert_unlinkable: + { + ++state.nextToken; + + if(state.nextToken[0].type != t_leftParenthesis || state.nextToken[1].type != t_module) + { + parseErrorf(state,state.nextToken,"expected module"); + throw RecoverParseException(); + } + + ModuleAction* moduleAction = (ModuleAction*)parseAction(state); + + std::string expectedErrorMessage; + if(!tryParseString(state,expectedErrorMessage)) + { + parseErrorf(state,state.nextToken,"expected string literal"); + throw RecoverParseException(); + } + + result = new AssertUnlinkableCommand(std::move(locus),moduleAction); + break; + } + case t_assert_invalid: + case t_assert_malformed: + { + const Command::Type commandType = state.nextToken->type == t_assert_invalid + ? Command::assert_invalid + : Command::assert_malformed; + ++state.nextToken; + + std::string internalModuleName; + Module module; + std::vector moduleErrors; + + parseParenthesized(state,[&] + { + require(state,t_module); + + parseTestScriptModule(state,module,moduleErrors,internalModuleName); + }); + + std::string expectedErrorMessage; + if(!tryParseString(state,expectedErrorMessage)) + { + parseErrorf(state,state.nextToken,"expected string literal"); + throw RecoverParseException(); + } + + result = new AssertInvalidOrMalformedCommand(commandType,std::move(locus),moduleErrors.size() != 0); + break; + }; + default: + parseErrorf(state,state.nextToken,"unknown script command"); + throw RecoverParseException(); + }; + }); + } + + return result; +} + +namespace WAST +{ + void parseTestCommands(const char* string,Uptr stringLength,std::vector>& outTestCommands,std::vector& outErrors) + { + // Lex the input string. + LineInfo* lineInfo = nullptr; + std::vector unresolvedErrors; + Token* tokens = lex(string,stringLength,lineInfo); + ParseState state(string,lineInfo,unresolvedErrors,tokens); + + try + { + // (command)* + while(state.nextToken->type == t_leftParenthesis) + { + outTestCommands.emplace_back(parseCommand(state)); + }; + require(state,t_eof); + } + catch(RecoverParseException) {} + catch(FatalParseException) {} + + // Resolve line information for any errors, and write them to outErrors. + for(auto& unresolvedError : unresolvedErrors) + { + TextFileLocus locus = calcLocusFromOffset(state.string,lineInfo,unresolvedError.charOffset); + outErrors.push_back({std::move(locus),std::move(unresolvedError.message)}); + } + + // Free the tokens and line info. + freeTokens(tokens); + freeLineInfo(lineInfo); + } +} \ No newline at end of file diff --git a/libraries/wasm-jit/Source/WAST/Print.cpp b/libraries/wasm-jit/Source/WAST/Print.cpp new file mode 100644 index 000000000..6cfd29595 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Print.cpp @@ -0,0 +1,694 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Floats.h" +#include "WAST.h" +#include "IR/Module.h" +#include "IR/Operators.h" + +#include + +using namespace IR; + +namespace WAST +{ + #define INDENT_STRING "\xE0\x01" + #define DEDENT_STRING "\xE0\x02" + + char nibbleToHexChar(U8 value) { return value < 10 ? ('0' + value) : 'a' + value - 10; } + + std::string escapeString(const char* string,Uptr numChars) + { + std::string result; + for(Uptr charIndex = 0;charIndex < numChars;++charIndex) + { + auto c = string[charIndex]; + if(c == '\\') { result += "\\\\"; } + else if(c == '\"') { result += "\\\""; } + else if(c == '\n') { result += "\\n"; } + else if(c < 0x20 || c > 0x7e) + { + result += '\\'; + result += nibbleToHexChar((c & 0xf0) >> 4); + result += nibbleToHexChar((c & 0x0f) >> 0); + } + else { result += c; } + } + return result; + } + + std::string expandIndentation(std::string&& inString,U8 spacesPerIndentLevel = 2) + { + std::string paddedInput = std::move(inString); + paddedInput += '\0'; + + std::string result; + const char* next = paddedInput.data(); + const char* end = paddedInput.data() + paddedInput.size() - 1; + Uptr indentDepth = 0; + while(next < end) + { + // Absorb INDENT_STRING and DEDENT_STRING, but keep track of the indentation depth, + // and insert a proportional number of spaces following newlines. + if(*(U16*)next == *(U16*)INDENT_STRING) { ++indentDepth; next += 2; } + else if(*(U16*)next == *(U16*)DEDENT_STRING) { errorUnless(indentDepth > 0); --indentDepth; next += 2; } + else if(*next == '\n') + { + result += '\n'; + result.insert(result.end(),indentDepth*2,' '); + ++next; + } + else { result += *next++; } + } + return result; + } + + struct ScopedTagPrinter + { + ScopedTagPrinter(std::string& inString,const char* tag): string(inString) + { + string += "("; + string += tag; + string += INDENT_STRING; + } + + ~ScopedTagPrinter() + { + string += DEDENT_STRING ")"; + } + + private: + std::string& string; + }; + + void print(std::string& string,ValueType type) { string += asString(type); } + void print(std::string& string,ResultType type) { string += asString(type); } + + void print(std::string& string,const SizeConstraints& size) + { + string += std::to_string(size.min); + if(size.max != UINT64_MAX) { string += ' '; string += std::to_string(size.max); } + } + + void print(std::string& string,const FunctionType* functionType) + { + // Print the function parameters. + if(functionType->parameters.size()) + { + ScopedTagPrinter paramTag(string,"param"); + for(Uptr parameterIndex = 0;parameterIndex < functionType->parameters.size();++parameterIndex) + { + string += ' '; + print(string,functionType->parameters[parameterIndex]); + } + } + + // Print the function return type. + if(functionType->ret != ResultType::none) + { + string += ' '; + ScopedTagPrinter resultTag(string,"result"); + string += ' '; + print(string,functionType->ret); + } + } + + void print(std::string& string,const TableType& type) + { + print(string,type.size); + string += " anyfunc"; + } + + void print(std::string& string,const MemoryType& type) + { + print(string,type.size); + } + + void print(std::string& string,GlobalType type) + { + if(type.isMutable) { string += "(mut "; } + print(string,type.valueType); + if(type.isMutable) { string += ")"; } + } + + void printControlSignature(std::string& string,ResultType resultType) + { + if(resultType != ResultType::none) + { + string += " (result "; + print(string,resultType); + string += ')'; + } + } + + struct NameScope + { + NameScope(const char inSigil): sigil(inSigil) { nameToCountMap[""] = 0; } + + void map(std::string& name) + { + auto mapIt = nameToCountMap.find(name); + if(mapIt == nameToCountMap.end()) { nameToCountMap[name] = 1; } + else { name = name + std::to_string(mapIt->second++); } + name = sigil + name; + } + + private: + + char sigil; + std::map nameToCountMap; + }; + + struct ModulePrintContext + { + const Module& module; + std::string& string; + + DisassemblyNames names; + + ModulePrintContext(const Module& inModule,std::string& inString) + : module(inModule), string(inString) + { + // Start with the names from the module's user name section, but make sure they are unique, and add the "$" sigil. + IR::getDisassemblyNames(module,names); + NameScope globalNameScope('$'); + for(auto& name : names.types) { globalNameScope.map(name); } + for(auto& name : names.tables) { globalNameScope.map(name); } + for(auto& name : names.memories) { globalNameScope.map(name); } + for(auto& name : names.globals) { globalNameScope.map(name); } + for(auto& function : names.functions) + { + globalNameScope.map(function.name); + + NameScope localNameScope('$'); + for(auto& name : function.locals) { localNameScope.map(name); } + } + } + + void printModule(); + + void printInitializerExpression(const InitializerExpression& expression) + { + switch(expression.type) + { + case InitializerExpression::Type::i32_const: string += "(i32.const " + std::to_string(expression.i32) + ')'; break; + case InitializerExpression::Type::i64_const: string += "(i64.const " + std::to_string(expression.i64) + ')'; break; + case InitializerExpression::Type::f32_const: string += "(f32.const " + Floats::asString(expression.f32) + ')'; break; + case InitializerExpression::Type::f64_const: string += "(f64.const " + Floats::asString(expression.f64) + ')'; break; + case InitializerExpression::Type::get_global: string += "(get_global " + names.globals[expression.globalIndex] + ')'; break; + default: Errors::unreachable(); + }; + } + }; + + struct FunctionPrintContext + { + typedef void Result; + + ModulePrintContext& moduleContext; + const Module& module; + const FunctionDef& functionDef; + const FunctionType* functionType; + std::string& string; + + const std::vector& localNames; + NameScope labelNameScope; + + FunctionPrintContext(ModulePrintContext& inModuleContext,Uptr functionDefIndex) + : moduleContext(inModuleContext) + , module(inModuleContext.module) + , functionDef(inModuleContext.module.functions.defs[functionDefIndex]) + , functionType(inModuleContext.module.types[functionDef.type.index]) + , string(inModuleContext.string) + , localNames(inModuleContext.names.functions[module.functions.imports.size() + functionDefIndex].locals) + , labelNameScope('$') + {} + + void printFunctionBody(); + + void unknown(Opcode) + { + Errors::unreachable(); + } + void block(ControlStructureImm imm) + { + string += "\nblock"; + pushControlStack(ControlContext::Type::block,"block"); + printControlSignature(string,imm.resultType); + } + void loop(ControlStructureImm imm) + { + string += "\nloop"; + pushControlStack(ControlContext::Type::loop,"loop"); + printControlSignature(string,imm.resultType); + } + void if_(ControlStructureImm imm) + { + string += "\nif"; + pushControlStack(ControlContext::Type::ifThen,"if"); + printControlSignature(string,imm.resultType); + } + void else_(NoImm imm) + { + string += DEDENT_STRING; + controlStack.back().type = ControlContext::Type::ifElse; + string += "\nelse" INDENT_STRING; + } + void end(NoImm) + { + string += DEDENT_STRING; + if(controlStack.back().type != ControlContext::Type::function) { string += "\nend ;; "; string += controlStack.back().labelId; } + controlStack.pop_back(); + } + + void return_(NoImm) + { + string += "\nreturn"; + enterUnreachable(); + } + + void br(BranchImm imm) + { + string += "\nbr " + getBranchTargetId(imm.targetDepth); + enterUnreachable(); + } + void br_table(BranchTableImm imm) + { + string += "\nbr_table" INDENT_STRING; + enum { numTargetsPerLine = 16 }; + assert(imm.branchTableIndex < functionDef.branchTables.size()); + const std::vector& targetDepths = functionDef.branchTables[imm.branchTableIndex]; + for(Uptr targetIndex = 0;targetIndex < targetDepths.size();++targetIndex) + { + if(targetIndex % numTargetsPerLine == 0) { string += '\n'; } + else { string += ' '; } + string += getBranchTargetId(targetDepths[targetIndex]); + } + string += '\n'; + string += getBranchTargetId(imm.defaultTargetDepth); + string += " ;; default" DEDENT_STRING; + + enterUnreachable(); + } + void br_if(BranchImm imm) + { + string += "\nbr_if " + getBranchTargetId(imm.targetDepth); + } + + void unreachable(NoImm) { string += "\nunreachable"; enterUnreachable(); } + void drop(NoImm) { string += "\ndrop"; } + + void select(NoImm) + { + string += "\nselect"; + } + + void get_local(GetOrSetVariableImm imm) + { + string += "\nget_local " + localNames[imm.variableIndex]; + } + void set_local(GetOrSetVariableImm imm) + { + string += "\nset_local " + localNames[imm.variableIndex]; + } + void tee_local(GetOrSetVariableImm imm) + { + string += "\ntee_local " + localNames[imm.variableIndex]; + } + + void get_global(GetOrSetVariableImm imm) + { + string += "\nget_global " + moduleContext.names.globals[imm.variableIndex]; + } + void set_global(GetOrSetVariableImm imm) + { + string += "\nset_global " + moduleContext.names.globals[imm.variableIndex]; + } + + void call(CallImm imm) + { + string += "\ncall " + moduleContext.names.functions[imm.functionIndex].name; + } + void call_indirect(CallIndirectImm imm) + { + string += "\ncall_indirect " + moduleContext.names.types[imm.type.index]; + } + + void printImm(NoImm) {} + void printImm(MemoryImm) {} + + void printImm(LiteralImm imm) { string += ' '; string += std::to_string(imm.value); } + void printImm(LiteralImm imm) { string += ' '; string += std::to_string(imm.value); } + void printImm(LiteralImm imm) { string += ' '; string += Floats::asString(imm.value); } + void printImm(LiteralImm imm) { string += ' '; string += Floats::asString(imm.value); } + + template + void printImm(LoadOrStoreImm imm) + { + if(imm.offset != 0) + { + string += " offset="; + string += std::to_string(imm.offset); + } + if(imm.alignmentLog2 != naturalAlignmentLog2) + { + string += " align="; + string += std::to_string(1 << imm.alignmentLog2); + } + } + + #if ENABLE_SIMD_PROTOTYPE + + void printImm(LiteralImm imm) { string += ' '; string += asString(imm.value); } + + template + void printImm(LaneIndexImm imm) + { + string += ' '; + string += imm.laneIndex; + } + + template + void printImm(ShuffleImm imm) + { + string += " ("; + for(Uptr laneIndex = 0;laneIndex < numLanes;++laneIndex) + { + if(laneIndex != 0) { string += ' '; } + string += std::to_string(imm.laneIndices[laneIndex]); + } + string += ')'; + } + #endif + + #if ENABLE_THREADING_PROTOTYPE + void printImm(LaunchThreadImm) {} + + template + void printImm(AtomicLoadOrStoreImm imm) + { + if(imm.offset != 0) + { + string += " offset="; + string += std::to_string(imm.offset); + } + assert(imm.alignmentLog2 == naturalAlignmentLog2); + } + #endif + + #define PRINT_OP(opcode,name,nameString,Imm,printOperands) \ + void name(Imm imm) \ + { \ + string += "\n" nameString; \ + printImm(imm); \ + } + ENUM_NONCONTROL_NONPARAMETRIC_OPERATORS(PRINT_OP) + #undef VALIDATE_OP + + private: + + struct ControlContext + { + enum class Type : U8 + { + function, + block, + ifThen, + ifElse, + loop + }; + Type type; + std::string labelId; + }; + + std::vector controlStack; + + std::string getBranchTargetId(Uptr depth) + { + const ControlContext& controlContext = controlStack[controlStack.size() - depth - 1]; + return controlContext.type == ControlContext::Type::function ? std::to_string(depth) : controlContext.labelId; + } + + void pushControlStack(ControlContext::Type type,const char* labelIdBase) + { + std::string labelId; + if(type != ControlContext::Type::function) + { + labelId = labelIdBase; + labelNameScope.map(labelId); + string += ' '; + string += labelId; + } + controlStack.push_back({type,labelId}); + string += INDENT_STRING; + } + + void enterUnreachable() + {} + }; + + template + void printImportType(std::string& string,const Module& module,Type type) + { + print(string,type); + } + template<> + void printImportType(std::string& string,const Module& module,IndexedFunctionType type) + { + print(string,module.types[type.index]); + } + + template + void printImport(std::string& string,const Module& module,const Import& import,Uptr importIndex,const char* name,const char* typeTag) + { + string += '\n'; + ScopedTagPrinter importTag(string,"import"); + string += " \""; + string += escapeString(import.moduleName.c_str(),import.moduleName.length()); + string += "\" \""; + string += escapeString(import.exportName.c_str(),import.exportName.length()); + string += "\" ("; + string += typeTag; + string += ' '; + string += name; + string += ' '; + printImportType(string,module,import.type); + string += ')'; + } + + void ModulePrintContext::printModule() + { + ScopedTagPrinter moduleTag(string,"module"); + + // Print the types. + for(Uptr typeIndex = 0;typeIndex < module.types.size();++typeIndex) + { + string += '\n'; + ScopedTagPrinter typeTag(string,"type"); + string += ' '; + string += names.types[typeIndex]; + string += " (func "; + print(string,module.types[typeIndex]); + string += ')'; + } + + // Print the module imports. + for(Uptr importIndex = 0;importIndex < module.functions.imports.size();++importIndex) + { + printImport(string,module,module.functions.imports[importIndex],importIndex,names.functions[importIndex].name.c_str(),"func"); + } + for(Uptr importIndex = 0;importIndex < module.tables.imports.size();++importIndex) + { + printImport(string,module,module.tables.imports[importIndex],importIndex,names.tables[importIndex].c_str(),"table"); + } + for(Uptr importIndex = 0;importIndex < module.memories.imports.size();++importIndex) + { + printImport(string,module,module.memories.imports[importIndex],importIndex,names.memories[importIndex].c_str(),"memory"); + } + for(Uptr importIndex = 0;importIndex < module.globals.imports.size();++importIndex) + { + printImport(string,module,module.globals.imports[importIndex],importIndex,names.globals[importIndex].c_str(),"global"); + } + // Print the module exports. + for(auto export_ : module.exports) + { + string += '\n'; + ScopedTagPrinter exportTag(string,"export"); + string += " \""; + string += escapeString(export_.name.c_str(),export_.name.length()); + string += "\" ("; + switch(export_.kind) + { + case ObjectKind::function: string += "func " + names.functions[export_.index].name; break; + case ObjectKind::table: string += "table " + names.tables[export_.index]; break; + case ObjectKind::memory: string += "memory " + names.memories[export_.index]; break; + case ObjectKind::global: string += "global " + names.globals[export_.index]; break; + default: Errors::unreachable(); + }; + string += ')'; + } + + // Print the module memory definitions. + for(Uptr memoryDefIndex = 0;memoryDefIndex < module.memories.defs.size();++memoryDefIndex) + { + const MemoryDef& memoryDef = module.memories.defs[memoryDefIndex]; + string += '\n'; + ScopedTagPrinter memoryTag(string,"memory"); + string += ' '; + string += names.memories[module.memories.imports.size() + memoryDefIndex]; + string += ' '; + print(string,memoryDef.type); + } + + // Print the module table definitions and elem segments. + for(Uptr tableDefIndex = 0;tableDefIndex < module.tables.defs.size();++tableDefIndex) + { + const TableDef& tableDef = module.tables.defs[tableDefIndex]; + string += '\n'; + ScopedTagPrinter memoryTag(string,"table"); + string += ' '; + string += names.tables[module.tables.imports.size() + tableDefIndex]; + string += ' '; + print(string,tableDef.type); + } + + // Print the module global definitions. + for(Uptr globalDefIndex = 0;globalDefIndex < module.globals.defs.size();++globalDefIndex) + { + const GlobalDef& globalDef = module.globals.defs[globalDefIndex]; + string += '\n'; + ScopedTagPrinter memoryTag(string,"global"); + string += ' '; + string += names.globals[module.globals.imports.size() + globalDefIndex]; + string += ' '; + print(string,globalDef.type); + string += ' '; + printInitializerExpression(globalDef.initializer); + } + + // Print the data and table segment definitions. + for(auto tableSegment : module.tableSegments) + { + string += '\n'; + ScopedTagPrinter dataTag(string,"elem"); + string += ' '; + string += names.tables[tableSegment.tableIndex]; + string += ' '; + printInitializerExpression(tableSegment.baseOffset); + enum { numElemsPerLine = 8 }; + for(Uptr elementIndex = 0;elementIndex < tableSegment.indices.size();++elementIndex) + { + if(elementIndex % numElemsPerLine == 0) { string += '\n'; } + else { string += ' '; } + string += names.functions[tableSegment.indices[elementIndex]].name; + } + } + for(auto dataSegment : module.dataSegments) + { + string += '\n'; + ScopedTagPrinter dataTag(string,"data"); + string += ' '; + string += names.memories[dataSegment.memoryIndex]; + string += ' '; + printInitializerExpression(dataSegment.baseOffset); + enum { numBytesPerLine = 64 }; + for(Uptr offset = 0;offset < dataSegment.data.size();offset += numBytesPerLine) + { + string += "\n\""; + string += escapeString((const char*)dataSegment.data.data() + offset,std::min(dataSegment.data.size() - offset,(Uptr)numBytesPerLine)); + string += "\""; + } + } + + for(Uptr functionDefIndex = 0;functionDefIndex < module.functions.defs.size();++functionDefIndex) + { + const Uptr functionIndex = module.functions.imports.size() + functionDefIndex; + const FunctionDef& functionDef = module.functions.defs[functionDefIndex]; + const FunctionType* functionType = module.types[functionDef.type.index]; + FunctionPrintContext functionContext(*this,functionDefIndex); + + string += "\n\n"; + ScopedTagPrinter funcTag(string,"func"); + + string += ' '; + string += names.functions[functionIndex].name; + + // Print the function parameters. + if(functionType->parameters.size()) + { + for(Uptr parameterIndex = 0;parameterIndex < functionType->parameters.size();++parameterIndex) + { + string += '\n'; + ScopedTagPrinter paramTag(string,"param"); + string += ' '; + string += functionContext.localNames[parameterIndex]; + string += ' '; + print(string,functionType->parameters[parameterIndex]); + } + } + + // Print the function return type. + if(functionType->ret != ResultType::none) + { + string += '\n'; + ScopedTagPrinter resultTag(string,"result"); + string += ' '; + print(string,functionType->ret); + } + + // Print the function's locals. + for(Uptr localIndex = 0;localIndex < functionDef.nonParameterLocalTypes.size();++localIndex) + { + string += '\n'; + ScopedTagPrinter localTag(string,"local"); + string += ' '; + string += functionContext.localNames[functionType->parameters.size() + localIndex]; + string += ' '; + print(string,functionDef.nonParameterLocalTypes[localIndex]); + } + + functionContext.printFunctionBody(); + } + + // Print user sections (other than the name section). + for(const auto& userSection : module.userSections) + { + if(userSection.name != "name") + { + string += '\n'; + ScopedTagPrinter dataTag(string,"user_section"); + string += " \""; + string += escapeString(userSection.name.c_str(),userSection.name.length()); + string += "\" "; + enum { numBytesPerLine = 64 }; + for(Uptr offset = 0;offset < userSection.data.size();offset += numBytesPerLine) + { + string += "\n\""; + string += escapeString((const char*)userSection.data.data() + offset,std::min(userSection.data.size() - offset,(Uptr)numBytesPerLine)); + string += "\""; + } + } + } + } + + void FunctionPrintContext::printFunctionBody() + { + //string += "("; + pushControlStack(ControlContext::Type::function,nullptr); + string += DEDENT_STRING; + + OperatorDecoderStream decoder(functionDef.code); + while(decoder && controlStack.size()) + { + decoder.decodeOp(*this); + }; + + string += INDENT_STRING "\n"; + } + + std::string print(const Module& module) + { + std::string string; + ModulePrintContext context(module,string); + context.printModule(); + return expandIndentation(std::move(string)); + } +} diff --git a/libraries/wasm-jit/Source/WAST/Regexp.cpp b/libraries/wasm-jit/Source/WAST/Regexp.cpp new file mode 100644 index 000000000..f6813c291 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Regexp.cpp @@ -0,0 +1,341 @@ +#include "Inline/BasicTypes.h" +#include "Inline/Errors.h" +#include "Regexp.h" +#include "NFA.h" + +#include + +enum class NodeType : U8 +{ + lit, + zeroOrMore, + oneOrMore, + optional, + alt, + seq, +}; +struct Node +{ + const NodeType type; + Node(NodeType inType): type(inType) {} + virtual ~Node() {} +}; +struct Lit : Node +{ + NFA::CharSet charSet; + Lit(const NFA::CharSet& inCharSet): Node(NodeType::lit), charSet(inCharSet) {} +}; +template +struct Unary : Node +{ + Node* child; + Unary(Node* inChild): Node(inType), child(inChild) {} + ~Unary() { delete child; } +}; +template +struct Binary : Node +{ + Node* firstChild; + Node* secondChild; + Binary(Node* inFirstChild,Node* inSecondChild) + : Node(inType) + , firstChild(inFirstChild) + , secondChild(inSecondChild) + {} + ~Binary() + { + delete firstChild; + delete secondChild; + } +}; +typedef Unary ZeroOrMore; +typedef Unary OneOrMore; +typedef Unary Optional; +typedef Binary Alt; +typedef Binary Seq; + +template +static bool isMetachar(char c) +{ + switch(c) + { + case '^': case '\\': + return true; + case '-': case ']': + return inSet; + case '$': case '.': + case '|': case '*': case '+': case '?': + case '(': case ')': case '[': case '{': + return !inSet; + default: + return false; + }; +} + +template +static char parseChar(const char*& nextChar) +{ + if(*nextChar == '\\') + { + ++nextChar; + if(!isMetachar(*nextChar)) + { + Errors::fatalf("'%c' is not a metachar in this context",*nextChar); + } + } + else if(isMetachar(*nextChar)) + { + Errors::fatalf("'%c' is a metachar in this context",*nextChar); + } + else if(*nextChar == 0) + { + Errors::fatalf("unexpected end of string"); + } + return *nextChar++; +} + +template +static NFA::CharSet parseLit(const char*& nextChar) +{ + NFA::CharSet result; + const char c = parseChar(nextChar); + if(inSet && *nextChar == '-') + { + ++nextChar; + const char d = parseChar(nextChar); + result.addRange((U8)c,(U8)d); + } + else { result.add((U8)c); } + return result; +} + +template +static NFA::CharSet parseCharClass(const char*& nextChar) +{ + if(*nextChar != '\\') { return parseLit(nextChar); } + else + { + NFA::CharSet result; + switch(nextChar[1]) + { + case 'd': result.addRange('0','9'); break; + case 'w': result.addRange('a','z'); result.addRange('A','Z'); result.addRange('0','9'); result.add('_'); break; + case 's': result.add(' '); result.add('\t'); result.add('\f'); result.add('\r'); result.add('\n'); break; + default: + if(!isMetachar(nextChar[1])) + { + Errors::fatalf("'%c' is not a metachar in this context",nextChar[1]); + } + result.add(nextChar[1]); + break; + }; + nextChar += 2; + return result; + } +} + +static NFA::CharSet parseSet(const char*& nextChar) +{ + NFA::CharSet result; + + assert(*nextChar == '['); + ++nextChar; + + bool isNegative = false; + if(*nextChar == '^') + { + isNegative = true; + ++nextChar; + } + + while(*nextChar && *nextChar != ']') + { + result = result | parseCharClass(nextChar); + }; + ++nextChar; + + if(isNegative) + { + result = ~result; + result.remove(0); + } + + return result; +} + +static Node* parseElementary(const char*& nextChar,Uptr groupDepth) +{ + NFA::CharSet charSet; + switch(*nextChar) + { + case '[': + { + charSet = parseSet(nextChar); + break; + } + case '.': + { + charSet = ~NFA::CharSet(0); + ++nextChar; + break; + } + case '$': + { + charSet.add('\n'); + ++nextChar; + break; + } + default: + { + charSet = parseCharClass(nextChar); + break; + } + }; + return new Lit(charSet); +} + +static Node* parseUnion(const char*& nextChar,Uptr groupDepth); +static Node* parseGroup(const char*& nextChar,Uptr groupDepth) +{ + if(*nextChar != '(') { return parseElementary(nextChar,groupDepth); } + else + { + ++nextChar; + Node* result = parseUnion(nextChar,groupDepth+1); + assert(*nextChar == ')'); + ++nextChar; + return result; + } +} + +static Node* parseQuantifier(const char*& nextChar,Uptr groupDepth) +{ + Node* result = parseGroup(nextChar,groupDepth); + + switch(*nextChar) + { + case '+': ++nextChar; result = new OneOrMore(result); break; + case '*': ++nextChar; result = new ZeroOrMore(result); break; + case '?': ++nextChar; result = new Optional(result); break; + }; + + return result; +} + +static Node* parseSeq(const char*& nextChar,Uptr groupDepth) +{ + Node* result = nullptr; + while(true) + { + Node* newNode = parseQuantifier(nextChar,groupDepth); + result = result ? new Seq(result,newNode) : newNode; + + switch(*nextChar) + { + case ')': + if(groupDepth == 0) { Errors::fatalf("unexpected ')'"); } + return result; + case 0: + if(groupDepth != 0) { Errors::fatalf("unexpected end of string"); } + return result; + case '|': + return result; + }; + }; +} + +static Node* parseUnion(const char*& nextChar,Uptr groupDepth) +{ + Node* result = nullptr; + while(true) + { + Node* newNode = parseSeq(nextChar,groupDepth); + result = result ? new Alt(result,newNode) : newNode; + + switch(*nextChar) + { + case ')': + if(groupDepth == 0) { Errors::fatalf("unexpected ')'"); } + return result; + case 0: + if(groupDepth != 0) { Errors::fatalf("unexpected end of string"); } + return result; + case '|': + ++nextChar; + break; + default: + Errors::fatalf("unrecognized input"); + }; + }; +} + +static Node* parse(const char* string) +{ + const char* nextChar = string; + Node* node = parseUnion(nextChar,0); + if(*nextChar != 0) { Errors::fatalf("failed to parse entire regexp"); } + return node; +} + +static void createNFA(NFA::Builder* nfaBuilder,Node* node,NFA::StateIndex initialState,NFA::StateIndex finalState) +{ + switch(node->type) + { + case NodeType::lit: + { + auto lit = (Lit*)node; + NFA::addEdge(nfaBuilder,initialState,lit->charSet,finalState); + break; + } + case NodeType::zeroOrMore: + { + auto zeroOrMore = (ZeroOrMore*)node; + createNFA(nfaBuilder,zeroOrMore->child,initialState,initialState); + NFA::addEpsilonEdge(nfaBuilder,initialState,finalState); + break; + }; + case NodeType::oneOrMore: + { + auto oneOrMore = (OneOrMore*)node; + auto intermediateState = NFA::addState(nfaBuilder); + createNFA(nfaBuilder,oneOrMore->child,initialState,intermediateState); + createNFA(nfaBuilder,oneOrMore->child,intermediateState,intermediateState); + NFA::addEpsilonEdge(nfaBuilder,intermediateState,finalState); + break; + } + case NodeType::optional: + { + auto optional = (Optional*)node; + createNFA(nfaBuilder,optional->child,initialState,finalState); + NFA::addEpsilonEdge(nfaBuilder,initialState,finalState); + break; + } + case NodeType::alt: + { + auto alt = (Alt*)node; + createNFA(nfaBuilder,alt->firstChild,initialState,finalState); + createNFA(nfaBuilder,alt->secondChild,initialState,finalState); + break; + } + case NodeType::seq: + { + auto seq = (Seq*)node; + auto intermediateState = NFA::addState(nfaBuilder); + createNFA(nfaBuilder,seq->firstChild,initialState,intermediateState); + createNFA(nfaBuilder,seq->secondChild,intermediateState,finalState); + break; + } + default: + Errors::unreachable(); + }; +} + +namespace Regexp +{ + void addToNFA(const char* regexpString,NFA::Builder* nfaBuilder,NFA::StateIndex initialState,NFA::StateIndex finalState) + { + Node* rootNode = parse(regexpString); + createNFA(nfaBuilder,rootNode,initialState,finalState); + delete rootNode; + } +}; diff --git a/libraries/wasm-jit/Source/WAST/Regexp.h b/libraries/wasm-jit/Source/WAST/Regexp.h new file mode 100644 index 000000000..ef4c70b26 --- /dev/null +++ b/libraries/wasm-jit/Source/WAST/Regexp.h @@ -0,0 +1,11 @@ +#pragma once + +#include "Inline/BasicTypes.h" +#include "NFA.h" + +namespace Regexp +{ + // Parses a regular expression from a string, and adds a recognizer for it to the given NFA + // The recognizer will start from initialState, and end in finalState when the regular expression has been completely matched. + void addToNFA(const char* regexpString,NFA::Builder* nfaBuilder,NFA::StateIndex initialState,NFA::StateIndex finalState); +}; diff --git a/libraries/wasm-jit/Test/Benchmark/Benchmark.cpp b/libraries/wasm-jit/Test/Benchmark/Benchmark.cpp new file mode 100644 index 000000000..fa457a0ae --- /dev/null +++ b/libraries/wasm-jit/Test/Benchmark/Benchmark.cpp @@ -0,0 +1,43 @@ +#include +#include + +struct point +{ + double x; + double y; +}; + +int main() +{ + // Generate a lot of uniformly distributed 2d points in the range -1,-1 to +1,+1. + enum { numXSamples = 10000 }; + enum { numYSamples = 10000 }; + std::vector points; + points.reserve(numXSamples * numYSamples); + for(int x = 0;x < numXSamples;++x) + { + for(int y = 0;y < numXSamples;++y) + { + point p = {-1.0 + 2.0 * x / (numXSamples-1),-1.0 + 2.0 * y / (numYSamples-1)}; + points.push_back(p); + } + } + + // Count the ratio of points inside the unit circle. + int numerator = 0; + int denominator = 0; + for(auto pointIt = points.begin();pointIt != points.end();++pointIt) + { + if(pointIt->x * pointIt->x + pointIt->y * pointIt->y < 1.0) + { + ++numerator; + } + ++denominator; + } + + // Derive the area of the unit circle. + auto circleArea = 4.0 * (double)numerator / denominator; + std::cout << "result: " << circleArea << std::endl; + + return 0; +} \ No newline at end of file diff --git a/libraries/wasm-jit/Test/Benchmark/Benchmark.wast b/libraries/wasm-jit/Test/Benchmark/Benchmark.wast new file mode 100644 index 000000000..99494027e --- /dev/null +++ b/libraries/wasm-jit/Test/Benchmark/Benchmark.wast @@ -0,0 +1,111128 @@ +(module + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$iiiiiii (func (param i32 i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$viiiii (func (param i32 i32 i32 i32 i32))) + (type $FUNCSIG$viiiiii (func (param i32 i32 i32 i32 i32 i32))) + (type $FUNCSIG$iiiiid (func (param i32 i32 i32 i32 f64) (result i32))) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$viii (func (param i32 i32 i32))) + (type $FUNCSIG$iiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) + (type $FUNCSIG$iiiiiid (func (param i32 i32 i32 i32 i32 f64) (result i32))) + (type $FUNCSIG$i (func (result i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "___dso_handle" (global $___dso_handle$asm2wasm$import i32)) + (import "global" "NaN" (global $nan$asm2wasm$import f64)) + (import "global" "Infinity" (global $inf$asm2wasm$import f64)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_pthread_cond_wait" (func $_pthread_cond_wait (param i32 i32) (result i32))) + (import "env" "_pthread_key_create" (func $_pthread_key_create (param i32 i32) (result i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___assert_fail" (func $___assert_fail (param i32 i32 i32 i32))) + (import "env" "___cxa_allocate_exception" (func $___cxa_allocate_exception (param i32) (result i32))) + (import "env" "__ZSt18uncaught_exceptionv" (func $__ZSt18uncaught_exceptionv (result i32))) + (import "env" "_strftime_l" (func $_strftime_l (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "_pthread_getspecific" (func $_pthread_getspecific (param i32) (result i32))) + (import "env" "_pthread_once" (func $_pthread_once (param i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "_pthread_setspecific" (func $_pthread_setspecific (param i32 i32) (result i32))) + (import "env" "___cxa_atexit" (func $___cxa_atexit (param i32 i32 i32) (result i32))) + (import "env" "___cxa_throw" (func $___cxa_throw (param i32 i32 i32))) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "___syscall145" (func $___syscall145 (param i32 i32) (result i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 469 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $___dso_handle (mut i32) (get_global $___dso_handle$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $nan (mut f64) (get_global $nan$asm2wasm$import)) + (global $inf (mut f64) (get_global $inf$asm2wasm$import)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $__ZNKSt3__28time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPK2tmcc $__ZNKSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPK2tmcc $__ZNKSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe $__ZNKSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIcS3_NS_9allocatorIcEEEE $__ZNKSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe $__ZNKSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIwS3_NS_9allocatorIwEEEE $b0 $b1 $___stdio_write $___stdio_seek $___stdio_read $___stdout_write $_sn_write $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6setbufEPwi $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPci $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKci $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6setbufEPwi $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6xsgetnEPwi $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6xsputnEPKwi $__ZNSt3__211__stdoutbufIcE6xsputnEPKci $__ZNSt3__211__stdoutbufIwE6xsputnEPKwi $__ZNKSt3__27collateIcE7do_hashEPKcS3_ $__ZNKSt3__27collateIwE7do_hashEPKwS3_ $__ZNKSt3__28messagesIwE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE $__ZNKSt3__28messagesIwE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE $__ZNKSt3__25ctypeIcE10do_toupperEPcPKc $__ZNKSt3__25ctypeIcE10do_tolowerEPcPKc $__ZNKSt3__25ctypeIcE9do_narrowEcc $__ZNKSt3__25ctypeIwE5do_isEtw $__ZNKSt3__25ctypeIwE10do_toupperEPwPKw $__ZNKSt3__25ctypeIwE10do_tolowerEPwPKw $__ZNKSt3__25ctypeIwE9do_narrowEwc $__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv $_do_read $b1 $b1 $b1 $b1 $b1 $b2 $__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib $__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib $__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib $b3 $__ZNKSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEce $__ZNKSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwe $b3 $b4 $__ZNSt3__28ios_baseD2Ev $__ZNSt3__28ios_baseD0Ev $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEED2Ev $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEED0Ev $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEED2Ev $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEED0Ev $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev $__ZNSt3__211__stdoutbufIcED0Ev $__ZNSt3__211__stdoutbufIwED0Ev $__ZNSt3__211__stdoutbufIcED0Ev $__ZNSt3__211__stdoutbufIwED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__26locale5facet16__on_zero_sharedEv $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__27codecvtIwc11__mbstate_tED2Ev $__ZNSt3__27codecvtIwc11__mbstate_tED0Ev $__ZNSt3__26locale5__impD2Ev $__ZNSt3__26locale5__impD0Ev $__ZNSt3__25ctypeIcED2Ev $__ZNSt3__25ctypeIcED0Ev $__ZNSt3__28numpunctIcED2Ev $__ZNSt3__28numpunctIcED0Ev $__ZNSt3__28numpunctIwED2Ev $__ZNSt3__28numpunctIwED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev $_cleanup_522 $_cleanup_522 $__ZNSt3__28ios_base4InitD2Ev $__ZNSt3__26locale2id6__initEv $__ZNSt3__217__call_once_proxyINS_5tupleIJONS_12_GLOBAL__N_111__fake_bindEEEEEEvPv $___cxx_global_array_dtor $___cxx_global_array_dtor_61 $___cxx_global_array_dtor_109 $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev $___cxx_global_array_dtor_46 $___cxx_global_array_dtor_85 $___cxx_global_array_dtor_112 $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev $_free $__ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b4 $b5 $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE $__ZNSt3__210__stdinbufIcE5imbueERKNS_6localeE $__ZNSt3__210__stdinbufIwE5imbueERKNS_6localeE $__ZNSt3__211__stdoutbufIcE5imbueERKNS_6localeE $__ZNSt3__211__stdoutbufIwE5imbueERKNS_6localeE $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIcLb1EE16do_negative_signEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIcLb1EE16do_negative_signEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_negative_signEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv $__ZNKSt3__210moneypunctIwLb1EE16do_negative_signEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE $__ZNKSt3__28numpunctIcE11do_groupingEv $__ZNKSt3__28numpunctIcE11do_truenameEv $__ZNKSt3__28numpunctIcE12do_falsenameEv $__ZNKSt3__28numpunctIwE11do_groupingEv $__ZNKSt3__28numpunctIwE11do_truenameEv $__ZNKSt3__28numpunctIwE12do_falsenameEv $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b5 $b6 $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRb $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRl $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRx $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRt $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRy $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRf $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRe $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRe $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRb $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRl $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRx $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRt $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRy $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRf $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRe $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRe $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcx $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcy $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwx $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwy $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm $__ZNKSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEcRKNS_12basic_stringIcS3_NS_9allocatorIcEEEE $__ZNKSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b6 $b7 $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcd $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEce $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwd $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwe $b7 $b7 $b7 $b8 $___stdio_close $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9underflowEv $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE5uflowEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9underflowEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5uflowEv $__ZNSt3__210__stdinbufIcE9underflowEv $__ZNSt3__210__stdinbufIcE5uflowEv $__ZNSt3__210__stdinbufIwE9underflowEv $__ZNSt3__210__stdinbufIwE5uflowEv $__ZNSt3__211__stdoutbufIwE4syncEv $__ZNSt3__211__stdoutbufIwE4syncEv $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv $__ZNKSt3__220__time_get_c_storageIcE7__weeksEv $__ZNKSt3__220__time_get_c_storageIcE8__monthsEv $__ZNKSt3__220__time_get_c_storageIcE7__am_pmEv $__ZNKSt3__220__time_get_c_storageIcE3__cEv $__ZNKSt3__220__time_get_c_storageIcE3__rEv $__ZNKSt3__220__time_get_c_storageIcE3__xEv $__ZNKSt3__220__time_get_c_storageIcE3__XEv $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv $__ZNKSt3__220__time_get_c_storageIwE7__weeksEv $__ZNKSt3__220__time_get_c_storageIwE8__monthsEv $__ZNKSt3__220__time_get_c_storageIwE7__am_pmEv $__ZNKSt3__220__time_get_c_storageIwE3__cEv $__ZNKSt3__220__time_get_c_storageIwE3__rEv $__ZNKSt3__220__time_get_c_storageIwE3__xEv $__ZNKSt3__220__time_get_c_storageIwE3__XEv $__ZNKSt3__210moneypunctIcLb1EE16do_thousands_sepEv $__ZNKSt3__210moneypunctIcLb1EE16do_thousands_sepEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__210moneypunctIcLb1EE16do_thousands_sepEv $__ZNKSt3__210moneypunctIcLb1EE16do_thousands_sepEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__210moneypunctIwLb1EE16do_thousands_sepEv $__ZNKSt3__210moneypunctIwLb1EE16do_thousands_sepEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__210moneypunctIwLb1EE16do_thousands_sepEv $__ZNKSt3__210moneypunctIwLb1EE16do_thousands_sepEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__27codecvtIDsc11__mbstate_tE13do_max_lengthEv $__ZNKSt3__27codecvtIwc11__mbstate_tE11do_encodingEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__27codecvtIwc11__mbstate_tE13do_max_lengthEv $__ZNKSt3__28numpunctIcE16do_decimal_pointEv $__ZNKSt3__28numpunctIcE16do_thousands_sepEv $__ZNKSt3__28numpunctIwE16do_decimal_pointEv $__ZNKSt3__28numpunctIwE16do_thousands_sepEv $__ZNKSt3__27codecvtIcc11__mbstate_tE16do_always_noconvEv $__ZNKSt3__27codecvtIcc11__mbstate_tE16do_always_noconvEv $__ZNKSt3__27codecvtIcc11__mbstate_tE16do_always_noconvEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv $__ZNKSt3__27codecvtIDsc11__mbstate_tE13do_max_lengthEv $__ZNKSt9bad_alloc4whatEv $b8 $b8 $b8 $b9 $b10 $__ZL25default_terminate_handlerv $__ZN10__cxxabiv112_GLOBAL__N_110construct_Ev $b10 $b11 $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc $__ZNKSt3__27codecvtIDic11__mbstate_tE6do_outERS1_PKDiS5_RS5_PcS7_RS7_ $__ZNKSt3__27codecvtIDic11__mbstate_tE5do_inERS1_PKcS5_RS5_PDiS7_RS7_ $__ZNKSt3__27codecvtIwc11__mbstate_tE6do_outERS1_PKwS5_RS5_PcS7_RS7_ $__ZNKSt3__27codecvtIwc11__mbstate_tE5do_inERS1_PKcS5_RS5_PwS7_RS7_ $__ZNKSt3__27codecvtIcc11__mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_ $__ZNKSt3__27codecvtIcc11__mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_ $__ZNKSt3__27codecvtIDsc11__mbstate_tE6do_outERS1_PKDsS5_RS5_PcS7_RS7_ $__ZNKSt3__27codecvtIDsc11__mbstate_tE5do_inERS1_PKcS5_RS5_PDsS7_RS7_ $b11 $b11 $b11 $b11 $b11 $b12 $__ZNKSt3__25ctypeIcE8do_widenEPKcS3_Pc $__ZNKSt3__25ctypeIwE5do_isEPKwS3_Pt $__ZNKSt3__25ctypeIwE10do_scan_isEtPKwS3_ $__ZNKSt3__25ctypeIwE11do_scan_notEtPKwS3_ $__ZNKSt3__25ctypeIwE8do_widenEPKcS3_Pw $b12 $b12 $b13 $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekoffExNS_8ios_base7seekdirEj $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekoffExNS_8ios_base7seekdirEj $__ZNKSt3__28messagesIcE6do_getEiiiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE $__ZNKSt3__28messagesIwE6do_getEiiiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE $__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib $__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib $__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib $b14 $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj $__ZNSt3__210__stdinbufIcE9pbackfailEi $__ZNSt3__210__stdinbufIwE9pbackfailEj $__ZNSt3__211__stdoutbufIcE8overflowEi $__ZNSt3__211__stdoutbufIwE8overflowEj $__ZNKSt3__25ctypeIcE10do_toupperEc $__ZNKSt3__25ctypeIcE10do_tolowerEc $__ZNKSt3__25ctypeIcE8do_widenEc $__ZNKSt3__25ctypeIwE10do_toupperEw $__ZNKSt3__25ctypeIwE10do_tolowerEw $__ZNKSt3__25ctypeIwE8do_widenEc $b14 $b15 $__ZNKSt3__27collateIcE10do_compareEPKcS3_S3_S3_ $__ZNKSt3__27collateIwE10do_compareEPKwS3_S3_S3_ $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcb $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcl $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcm $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPKv $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwb $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwl $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwm $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKv $__ZNKSt3__27codecvtIDsc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ $__ZNKSt3__27codecvtIDic11__mbstate_tE9do_lengthERS1_PKcS5_j $__ZNKSt3__27codecvtIwc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ $__ZNKSt3__27codecvtIwc11__mbstate_tE9do_lengthERS1_PKcS5_j $__ZNKSt3__25ctypeIcE9do_narrowEPKcS3_cPc $__ZNKSt3__25ctypeIwE9do_narrowEPKwS3_cPc $__ZNKSt3__27codecvtIDsc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ $__ZNKSt3__27codecvtIcc11__mbstate_tE9do_lengthERS1_PKcS5_j $__ZNKSt3__27codecvtIDsc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ $__ZNKSt3__27codecvtIDsc11__mbstate_tE9do_lengthERS1_PKcS5_j $b15 $b15 $b15 $b15 $b15 $b15 $b15 $b15 $b15 $b15 $b15 $b16 $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekposENS_4fposI11__mbstate_tEEj $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekposENS_4fposI11__mbstate_tEEj $__ZNKSt3__27collateIcE12do_transformEPKcS3_ $__ZNKSt3__27collateIwE12do_transformEPKwS3_ $__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi $__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi $__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi) + (data (get_global $memoryBase) "\b8%\00\00\b43\00\00\10\04\00\00\00\00\00\00\90%\00\00\de3\00\00\b8%\00\00\f03\00\00\10\04\00\00\00\00\00\00\90%\00\00\1a4\00\00\90%\00\00K4\00\00\f8%\00\00|4\00\00\00\00\00\00\01\00\00\00\00\04\00\00\03\f4\ff\ff\f8%\00\00\ab4\00\00\00\00\00\00\01\00\00\00\18\04\00\00\03\f4\ff\ff\f8%\00\00\da4\00\00\00\00\00\00\01\00\00\00\00\04\00\00\03\f4\ff\ff\f8%\00\00\t5\00\00\00\00\00\00\01\00\00\00\18\04\00\00\03\f4\ff\ff\b8%\00\0085\00\00(\04\00\00\00\00\00\00\b8%\00\00v5\00\000\04\00\00\00\00\00\00\b8%\00\00\8e5\00\00(\04\00\00\00\00\00\00\b8%\00\00\a75\00\000\04\00\00\00\00\00\00\b8%\00\00\c05\00\00\e8\04\00\00\00\00\00\00\b8%\00\00\d45\00\008\t\00\00\00\00\00\00\b8%\00\00\ea5\00\00\e8\04\00\00\00\00\00\00\f8%\00\00\fe5\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00(\05\00\00\00\00\00\00\f8%\00\00B6\00\00\00\00\00\00\01\00\00\00@\05\00\00\00\00\00\00\90%\00\00X6\00\00\f8%\00\00\976\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00h\05\00\00\00\00\00\00\f8%\00\00\db6\00\00\00\00\00\00\01\00\00\00@\05\00\00\00\00\00\00\f8%\00\00\f16\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\a0\05\00\00\00\00\00\00\f8%\00\0057\00\00\00\00\00\00\01\00\00\00\b8\05\00\00\00\00\00\00\90%\00\00K7\00\00\f8%\00\00w7\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\e0\05\00\00\00\00\00\00\f8%\00\00\bb7\00\00\00\00\00\00\01\00\00\00\b8\05\00\00\00\00\00\00\f8%\00\00\d17\00\00\00\00\00\00\03\00\00\00\e8\04\00\00\02\00\00\00 \06\00\00\02\00\00\00(\06\00\00\00\08\00\00\90%\00\00\168\00\00\90%\00\00)8\00\00\f8%\00\00\8b9\00\00\00\00\00\00\03\00\00\00\e8\04\00\00\02\00\00\00 \06\00\00\02\00\00\00X\06\00\00\00\08\00\00\90%\00\00\d09\00\00\f8%\00\00\f29\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\80\06\00\00\00\08\00\00\90%\00\007:\00\00\f8%\00\00L:\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\80\06\00\00\00\08\00\00\f8%\00\00\91:\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\c8\06\00\00\02\00\00\00\90%\00\00\ad:\00\00\f8%\00\00\c2:\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\c8\06\00\00\02\00\00\00\f8%\00\00\de:\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\c8\06\00\00\02\00\00\00\f8%\00\00\fa:\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\c8\06\00\00\02\00\00\00\f8%\00\00\16;\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00P\07\00\00\00\00\00\00\90%\00\00\\;\00\00\f8%\00\00\84;\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00x\07\00\00\00\00\00\00\90%\00\00\ca;\00\00\f8%\00\00\ee;\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\a0\07\00\00\00\00\00\00\90%\00\004<\00\00\f8%\00\00S<\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\c8\07\00\00\00\00\00\00\90%\00\00\99<\00\00\f8%\00\00\b2<\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\f0\07\00\00\02\00\00\00\90%\00\00\c7<\00\00\f8%\00\00\df<\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\f0\07\00\00\02\00\00\00\b8%\00\00\f4<\00\00(\08\00\00\00\00\00\00\f8%\00\00\16=\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00H\08\00\00\02\00\00\00\90%\00\009=\00\00\b8%\00\00P=\00\00(\08\00\00\00\00\00\00\f8%\00\00s=\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00H\08\00\00\02\00\00\00\f8%\00\00\95=\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00H\08\00\00\02\00\00\00\f8%\00\00\b7=\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00H\08\00\00\02\00\00\00\b8%\00\00\da=\00\00\e8\04\00\00\00\00\00\00\f8%\00\00\f0=\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\f0\08\00\00\02\00\00\00\90%\00\00\02>\00\00\f8%\00\00\17>\00\00\00\00\00\00\02\00\00\00\e8\04\00\00\02\00\00\00\f0\08\00\00\02\00\00\00\b8%\00\00)>\00\00\e8\04\00\00\00\00\00\00\b8%\00\00I>\00\00\e8\04\00\00\00\00\00\00\90%\00\00\c2>\00\00\90%\00\00\e2@\00\00\b8%\00\00\c0@\00\00h\t\00\00\00\00\00\00\b8%\00\00m@\00\00H\t\00\00\00\00\00\00\b8%\00\00\92@\00\00x\t\00\00\00\00\00\00\90%\00\00\b3@\00\00\b8%\00\00\a8A\00\00@\t\00\00\00\00\00\00\b8%\00\00\e8A\00\00h\t\00\00\00\00\00\00\b8%\00\00\c4A\00\00\90\t\00\00\00\00\00\00\b8%\00\00\nB\00\00H\t\00\00\00\00\00\00\02\00\00\c0\03\00\00\c0\04\00\00\c0\05\00\00\c0\06\00\00\c0\07\00\00\c0\08\00\00\c0\t\00\00\c0\n\00\00\c0\0b\00\00\c0\0c\00\00\c0\0d\00\00\c0\0e\00\00\c0\0f\00\00\c0\10\00\00\c0\11\00\00\c0\12\00\00\c0\13\00\00\c0\14\00\00\c0\15\00\00\c0\16\00\00\c0\17\00\00\c0\18\00\00\c0\19\00\00\c0\1a\00\00\c0\1b\00\00\c0\1c\00\00\c0\1d\00\00\c0\1e\00\00\c0\1f\00\00\c0\00\00\00\b3\01\00\00\c3\02\00\00\c3\03\00\00\c3\04\00\00\c3\05\00\00\c3\06\00\00\c3\07\00\00\c3\08\00\00\c3\t\00\00\c3\n\00\00\c3\0b\00\00\c3\0c\00\00\c3\0d\00\00\d3\0e\00\00\c3\0f\00\00\c3\00\00\0c\bb\01\00\0c\c3\02\00\0c\c3\03\00\0c\c3\04\00\0c\d3\90\n\00\00\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\98R\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04\0b\00\00\t\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\00\00\00\00\02\00\00\00\a0R\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00x\0b\00\00\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\02\00\00\00\a8V\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00x\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\18\'\00\00d\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00\0b\00\00\00\0c\00\00\00\0d\00\00\00\0e\00\00\00\0f\00\00\00\10\00\00\00\11\00\00\00\12\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00\17\00\00\00\18\00\00\00\19\00\00\00\1a\00\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00 \00\00\00!\00\00\00\"\00\00\00#\00\00\00$\00\00\00%\00\00\00&\00\00\00\'\00\00\00(\00\00\00)\00\00\00*\00\00\00+\00\00\00,\00\00\00-\00\00\00.\00\00\00/\00\00\000\00\00\001\00\00\002\00\00\003\00\00\004\00\00\005\00\00\006\00\00\007\00\00\008\00\00\009\00\00\00:\00\00\00;\00\00\00<\00\00\00=\00\00\00>\00\00\00?\00\00\00@\00\00\00a\00\00\00b\00\00\00c\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00h\00\00\00i\00\00\00j\00\00\00k\00\00\00l\00\00\00m\00\00\00n\00\00\00o\00\00\00p\00\00\00q\00\00\00r\00\00\00s\00\00\00t\00\00\00u\00\00\00v\00\00\00w\00\00\00x\00\00\00y\00\00\00z\00\00\00[\00\00\00\\\00\00\00]\00\00\00^\00\00\00_\00\00\00`\00\00\00a\00\00\00b\00\00\00c\00\00\00d\00\00\00e\00\00\00f\00\00\00g\00\00\00h\00\00\00i\00\00\00j\00\00\00k\00\00\00l\00\00\00m\00\00\00n\00\00\00o\00\00\00p\00\00\00q\00\00\00r\00\00\00s\00\00\00t\00\00\00u\00\00\00v\00\00\00w\00\00\00x\00\00\00y\00\00\00z\00\00\00{\00\00\00|\00\00\00}\00\00\00~\00\00\00\7f\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00h\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00\0b\00\00\00\0c\00\00\00\0d\00\00\00\0e\00\00\00\0f\00\00\00\10\00\00\00\11\00\00\00\12\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00\17\00\00\00\18\00\00\00\19\00\00\00\1a\00\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00 \00\00\00!\00\00\00\"\00\00\00#\00\00\00$\00\00\00%\00\00\00&\00\00\00\'\00\00\00(\00\00\00)\00\00\00*\00\00\00+\00\00\00,\00\00\00-\00\00\00.\00\00\00/\00\00\000\00\00\001\00\00\002\00\00\003\00\00\004\00\00\005\00\00\006\00\00\007\00\00\008\00\00\009\00\00\00:\00\00\00;\00\00\00<\00\00\00=\00\00\00>\00\00\00?\00\00\00@\00\00\00A\00\00\00B\00\00\00C\00\00\00D\00\00\00E\00\00\00F\00\00\00G\00\00\00H\00\00\00I\00\00\00J\00\00\00K\00\00\00L\00\00\00M\00\00\00N\00\00\00O\00\00\00P\00\00\00Q\00\00\00R\00\00\00S\00\00\00T\00\00\00U\00\00\00V\00\00\00W\00\00\00X\00\00\00Y\00\00\00Z\00\00\00[\00\00\00\\\00\00\00]\00\00\00^\00\00\00_\00\00\00`\00\00\00A\00\00\00B\00\00\00C\00\00\00D\00\00\00E\00\00\00F\00\00\00G\00\00\00H\00\00\00I\00\00\00J\00\00\00K\00\00\00L\00\00\00M\00\00\00N\00\00\00O\00\00\00P\00\00\00Q\00\00\00R\00\00\00S\00\00\00T\00\00\00U\00\00\00V\00\00\00W\00\00\00X\00\00\00Y\00\00\00Z\00\00\00{\00\00\00|\00\00\00}\00\00\00~\00\00\00\7f\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\00\00\00\10\04\00\00\01\00\00\00\02\00\00\00\00\00\00\00(\04\00\00\03\00\00\00\04\00\00\00\01\00\00\00\06\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\07\00\00\00\04\00\00\00\05\00\00\00\01\00\00\00\08\00\00\00\02\00\00\00\00\00\00\000\04\00\00\05\00\00\00\06\00\00\00\02\00\00\00\t\00\00\00\02\00\00\00\02\00\00\00\06\00\00\00\07\00\00\00\n\00\00\00\08\00\00\00\t\00\00\00\03\00\00\00\0b\00\00\00\04\00\00\00\08\00\00\00\00\00\00\008\04\00\00\07\00\00\00\08\00\00\00\f8\ff\ff\ff\f8\ff\ff\ff8\04\00\00\t\00\00\00\n\00\00\00\08\00\00\00\00\00\00\00P\04\00\00\0b\00\00\00\0c\00\00\00\f8\ff\ff\ff\f8\ff\ff\ffP\04\00\00\0d\00\00\00\0e\00\00\00\04\00\00\00\00\00\00\00h\04\00\00\0f\00\00\00\10\00\00\00\fc\ff\ff\ff\fc\ff\ff\ffh\04\00\00\11\00\00\00\12\00\00\00\04\00\00\00\00\00\00\00\80\04\00\00\13\00\00\00\14\00\00\00\fc\ff\ff\ff\fc\ff\ff\ff\80\04\00\00\15\00\00\00\16\00\00\00\00\00\00\00\98\04\00\00\03\00\00\00\17\00\00\00\03\00\00\00\06\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\07\00\00\00\n\00\00\00\0b\00\00\00\05\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\a8\04\00\00\05\00\00\00\18\00\00\00\04\00\00\00\t\00\00\00\02\00\00\00\02\00\00\00\06\00\00\00\07\00\00\00\n\00\00\00\0c\00\00\00\0d\00\00\00\06\00\00\00\0b\00\00\00\04\00\00\00\00\00\00\00\b8\04\00\00\03\00\00\00\19\00\00\00\05\00\00\00\06\00\00\00\01\00\00\00\01\00\00\00\0e\00\00\00\03\00\00\00\07\00\00\00\04\00\00\00\05\00\00\00\01\00\00\00\0c\00\00\00\07\00\00\00\00\00\00\00\c8\04\00\00\05\00\00\00\1a\00\00\00\06\00\00\00\t\00\00\00\02\00\00\00\02\00\00\00\0f\00\00\00\07\00\00\00\n\00\00\00\08\00\00\00\t\00\00\00\03\00\00\00\0d\00\00\00\08\00\00\00\00\00\00\00\d8\04\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\01\00\00\00\03\00\00\00\0e\00\00\00\00\00\00\00\f8\04\00\00\1e\00\00\00\1f\00\00\00\1d\00\00\00\02\00\00\00\04\00\00\00\0f\00\00\00\00\00\00\00\08\05\00\00 \00\00\00!\00\00\00\1d\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00\0b\00\00\00\00\00\00\00H\05\00\00\"\00\00\00#\00\00\00\1d\00\00\00\0c\00\00\00\0d\00\00\00\0e\00\00\00\0f\00\00\00\10\00\00\00\11\00\00\00\12\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00\00\00\00\00\80\05\00\00$\00\00\00%\00\00\00\1d\00\00\00\03\00\00\00\04\00\00\00\17\00\00\00\05\00\00\00\18\00\00\00\01\00\00\00\02\00\00\00\06\00\00\00\00\00\00\00\c0\05\00\00&\00\00\00\'\00\00\00\1d\00\00\00\07\00\00\00\08\00\00\00\19\00\00\00\t\00\00\00\1a\00\00\00\03\00\00\00\04\00\00\00\n\00\00\00\00\00\00\00\f8\05\00\00(\00\00\00)\00\00\00\1d\00\00\00\10\00\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00\01\00\00\00\f8\ff\ff\ff\f8\05\00\00\11\00\00\00\12\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00\17\00\00\00\00\00\00\000\06\00\00*\00\00\00+\00\00\00\1d\00\00\00\18\00\00\00 \00\00\00!\00\00\00\"\00\00\00#\00\00\00$\00\00\00\02\00\00\00\f8\ff\ff\ff0\06\00\00\19\00\00\00\1a\00\00\00\1b\00\00\00\1c\00\00\00\1d\00\00\00\1e\00\00\00\1f\00\00\00%\00\00\00H\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00%\00\00\00m\00\00\00/\00\00\00%\00\00\00d\00\00\00/\00\00\00%\00\00\00y\00\00\00%\00\00\00Y\00\00\00-\00\00\00%\00\00\00m\00\00\00-\00\00\00%\00\00\00d\00\00\00%\00\00\00I\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00 \00\00\00%\00\00\00p\00\00\00%\00\00\00H\00\00\00:\00\00\00%\00\00\00M\00\00\00%\00\00\00H\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00S\00\00\00u\00\00\00n\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00M\00\00\00o\00\00\00n\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00T\00\00\00u\00\00\00e\00\00\00s\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00W\00\00\00e\00\00\00d\00\00\00n\00\00\00e\00\00\00s\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00T\00\00\00h\00\00\00u\00\00\00r\00\00\00s\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00F\00\00\00r\00\00\00i\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00S\00\00\00a\00\00\00t\00\00\00u\00\00\00r\00\00\00d\00\00\00a\00\00\00y\00\00\00\00\00\00\00S\00\00\00u\00\00\00n\00\00\00\00\00\00\00M\00\00\00o\00\00\00n\00\00\00\00\00\00\00T\00\00\00u\00\00\00e\00\00\00\00\00\00\00W\00\00\00e\00\00\00d\00\00\00\00\00\00\00T\00\00\00h\00\00\00u\00\00\00\00\00\00\00F\00\00\00r\00\00\00i\00\00\00\00\00\00\00S\00\00\00a\00\00\00t\00\00\00\00\00\00\00J\00\00\00a\00\00\00n\00\00\00u\00\00\00a\00\00\00r\00\00\00y\00\00\00\00\00\00\00F\00\00\00e\00\00\00b\00\00\00r\00\00\00u\00\00\00a\00\00\00r\00\00\00y\00\00\00\00\00\00\00M\00\00\00a\00\00\00r\00\00\00c\00\00\00h\00\00\00\00\00\00\00A\00\00\00p\00\00\00r\00\00\00i\00\00\00l\00\00\00\00\00\00\00M\00\00\00a\00\00\00y\00\00\00\00\00\00\00J\00\00\00u\00\00\00n\00\00\00e\00\00\00\00\00\00\00J\00\00\00u\00\00\00l\00\00\00y\00\00\00\00\00\00\00A\00\00\00u\00\00\00g\00\00\00u\00\00\00s\00\00\00t\00\00\00\00\00\00\00S\00\00\00e\00\00\00p\00\00\00t\00\00\00e\00\00\00m\00\00\00b\00\00\00e\00\00\00r\00\00\00\00\00\00\00O\00\00\00c\00\00\00t\00\00\00o\00\00\00b\00\00\00e\00\00\00r\00\00\00\00\00\00\00N\00\00\00o\00\00\00v\00\00\00e\00\00\00m\00\00\00b\00\00\00e\00\00\00r\00\00\00\00\00\00\00D\00\00\00e\00\00\00c\00\00\00e\00\00\00m\00\00\00b\00\00\00e\00\00\00r\00\00\00\00\00\00\00J\00\00\00a\00\00\00n\00\00\00\00\00\00\00F\00\00\00e\00\00\00b\00\00\00\00\00\00\00M\00\00\00a\00\00\00r\00\00\00\00\00\00\00A\00\00\00p\00\00\00r\00\00\00\00\00\00\00J\00\00\00u\00\00\00n\00\00\00\00\00\00\00J\00\00\00u\00\00\00l\00\00\00\00\00\00\00A\00\00\00u\00\00\00g\00\00\00\00\00\00\00S\00\00\00e\00\00\00p\00\00\00\00\00\00\00O\00\00\00c\00\00\00t\00\00\00\00\00\00\00N\00\00\00o\00\00\00v\00\00\00\00\00\00\00D\00\00\00e\00\00\00c\00\00\00\00\00\00\00A\00\00\00M\00\00\00\00\00\00\00P\00\00\00M\00\00\00\00\00\00\00%\00\00\00a\00\00\00 \00\00\00%\00\00\00b\00\00\00 \00\00\00%\00\00\00d\00\00\00 \00\00\00%\00\00\00H\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00 \00\00\00%\00\00\00Y\00\00\00\00\00\00\00%\00\00\00I\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00 \00\00\00%\00\00\00p\00\00\00\00\00\00\00%\00\00\00m\00\00\00/\00\00\00%\00\00\00d\00\00\00/\00\00\00%\00\00\00y\00\00\00\00\00\00\00%\00\00\00H\00\00\00:\00\00\00%\00\00\00M\00\00\00:\00\00\00%\00\00\00S\00\00\00\00\00\00\00\00\00\00\00`\06\00\00,\00\00\00-\00\00\00\1d\00\00\00\01\00\00\00\00\00\00\00\88\06\00\00.\00\00\00/\00\00\00\1d\00\00\00\02\00\00\00\00\00\00\00\a8\06\00\000\00\00\001\00\00\00\1d\00\00\00 \00\00\00!\00\00\00\07\00\00\00\08\00\00\00\t\00\00\00\n\00\00\00\"\00\00\00\0b\00\00\00\0c\00\00\00\00\00\00\00\d0\06\00\002\00\00\003\00\00\00\1d\00\00\00#\00\00\00$\00\00\00\0d\00\00\00\0e\00\00\00\0f\00\00\00\10\00\00\00%\00\00\00\11\00\00\00\12\00\00\00\00\00\00\00\f0\06\00\004\00\00\005\00\00\00\1d\00\00\00&\00\00\00\'\00\00\00\13\00\00\00\14\00\00\00\15\00\00\00\16\00\00\00(\00\00\00\17\00\00\00\18\00\00\00\00\00\00\00\10\07\00\006\00\00\007\00\00\00\1d\00\00\00)\00\00\00*\00\00\00\19\00\00\00\1a\00\00\00\1b\00\00\00\1c\00\00\00+\00\00\00\1d\00\00\00\1e\00\00\00\00\00\00\000\07\00\008\00\00\009\00\00\00\1d\00\00\00\03\00\00\00\04\00\00\00\00\00\00\00X\07\00\00:\00\00\00;\00\00\00\1d\00\00\00\05\00\00\00\06\00\00\00\00\00\00\00\80\07\00\00<\00\00\00=\00\00\00\1d\00\00\00\01\00\00\00%\00\00\00\00\00\00\00\a8\07\00\00>\00\00\00?\00\00\00\1d\00\00\00\02\00\00\00&\00\00\00\00\00\00\00\d0\07\00\00@\00\00\00A\00\00\00\1d\00\00\00\10\00\00\00\03\00\00\00\1f\00\00\00\00\00\00\00\f8\07\00\00B\00\00\00C\00\00\00\1d\00\00\00\11\00\00\00\04\00\00\00 \00\00\00\00\00\00\00\18\08\00\00D\00\00\00E\00\00\00\1d\00\00\00\03\00\00\00\04\00\00\00\0b\00\00\00,\00\00\00-\00\00\00\0c\00\00\00.\00\00\00\00\00\00\00P\08\00\00D\00\00\00F\00\00\00\1d\00\00\00\03\00\00\00\04\00\00\00\0b\00\00\00,\00\00\00-\00\00\00\0c\00\00\00.\00\00\00\00\00\00\00\80\08\00\00G\00\00\00H\00\00\00\1d\00\00\00\05\00\00\00\06\00\00\00\0d\00\00\00/\00\00\000\00\00\00\0e\00\00\001\00\00\00\00\00\00\00\c0\08\00\00I\00\00\00J\00\00\00\1d\00\00\00\00\00\00\00\d0\08\00\00K\00\00\00L\00\00\00\1d\00\00\00\t\00\00\00\12\00\00\00\n\00\00\00\13\00\00\00\0b\00\00\00\01\00\00\00\14\00\00\00\0f\00\00\00\00\00\00\00\18\t\00\00M\00\00\00N\00\00\00\1d\00\00\002\00\00\003\00\00\00!\00\00\00\"\00\00\00#\00\00\00\00\00\00\00(\t\00\00O\00\00\00P\00\00\00\1d\00\00\004\00\00\005\00\00\00$\00\00\00%\00\00\00&\00\00\00t\00\00\00r\00\00\00u\00\00\00e\00\00\00\00\00\00\00f\00\00\00a\00\00\00l\00\00\00s\00\00\00e\00\00\00\00\00\00\00\00\00\00\00\e8\04\00\00D\00\00\00Q\00\00\00\1d\00\00\00\00\00\00\00\f8\08\00\00D\00\00\00R\00\00\00\1d\00\00\00\15\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\0c\00\00\00\16\00\00\00\0d\00\00\00\17\00\00\00\0e\00\00\00\05\00\00\00\18\00\00\00\10\00\00\00\00\00\00\00`\08\00\00D\00\00\00S\00\00\00\1d\00\00\00\07\00\00\00\08\00\00\00\11\00\00\006\00\00\007\00\00\00\12\00\00\008\00\00\00\00\00\00\00\a0\08\00\00D\00\00\00T\00\00\00\1d\00\00\00\t\00\00\00\n\00\00\00\13\00\00\009\00\00\00:\00\00\00\14\00\00\00;\00\00\00\00\00\00\00(\08\00\00D\00\00\00U\00\00\00\1d\00\00\00\03\00\00\00\04\00\00\00\0b\00\00\00,\00\00\00-\00\00\00\0c\00\00\00.\00\00\00\01\00\00\00\00\00\00\00H\t\00\00V\00\00\00W\00\00\00X\00\00\00Y\00\00\00\19\00\00\00\05\00\00\00\01\00\00\00\05\00\00\00\00\00\00\00X\t\00\00V\00\00\00Z\00\00\00X\00\00\00Y\00\00\00\19\00\00\00\06\00\00\00\02\00\00\00\06\00\00\00\ef@\00\00\00\00\00\00\80\t\00\00[\00\00\00\\\00\00\00<\00\00\00\00\00\00\00\b0\t\00\00V\00\00\00]\00\00\00X\00\00\00Y\00\00\00\19\00\00\00\07\00\00\00\03\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\03 \02 \02 \02 \02 \02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\02\00\01`\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\08\d8\08\d8\08\d8\08\d8\08\d8\08\d8\08\d8\08\d8\08\d8\08\d8\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\08\d5\08\d5\08\d5\08\d5\08\d5\08\d5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\08\c5\04\c0\04\c0\04\c0\04\c0\04\c0\04\c0\08\d6\08\d6\08\d6\08\d6\08\d6\08\d6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\08\c6\04\c0\04\c0\04\c0\04\c0\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00result: \00\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\01\02\03\04\05\06\07\08\t\ff\ff\ff\ff\ff\ff\ff\n\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f !\"#\ff\ff\ff\ff\ff\ff\n\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f !\"#\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\00\01\02\04\07\03\06\05\00\11\00\n\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\t\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\n\11\11\11\03\n\07\00\01\13\t\0b\0b\00\00\t\06\0b\00\00\0b\00\06\11\00\00\00\11\11\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\n\n\11\11\11\00\n\00\00\02\00\t\0b\00\00\00\t\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\04\0d\00\00\00\00\t\0e\00\00\00\00\00\0e\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\00\0f\00\00\00\00\t\10\00\00\00\00\00\10\00\00\10\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\00\n\00\00\00\00\t\0b\00\00\00\00\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\000123456789ABCDEF-+ 0X0x\00T!\"\19\0d\01\02\03\11K\1c\0c\10\04\0b\1d\12\1e\'hnopqb \05\06\0f\13\14\15\1a\08\16\07($\17\18\t\n\0e\1b\1f%#\83\82}&*+<=>?CGJMXYZ[\\]^_`acdefgijklrstyz{|\00Illegal byte sequence\00Domain error\00Result not representable\00Not a tty\00Permission denied\00Operation not permitted\00No such file or directory\00No such process\00File exists\00Value too large for data type\00No space left on device\00Out of memory\00Resource busy\00Interrupted system call\00Resource temporarily unavailable\00Invalid seek\00Cross-device link\00Read-only file system\00Directory not empty\00Connection reset by peer\00Operation timed out\00Connection refused\00Host is down\00Host is unreachable\00Address in use\00Broken pipe\00I/O error\00No such device or address\00Block device required\00No such device\00Not a directory\00Is a directory\00Text file busy\00Exec format error\00Invalid argument\00Argument list too long\00Symbolic link loop\00Filename too long\00Too many open files in system\00No file descriptors available\00Bad file descriptor\00No child process\00Bad address\00File too large\00Too many links\00No locks available\00Resource deadlock would occur\00State not recoverable\00Previous owner died\00Operation canceled\00Function not implemented\00No message of desired type\00Identifier removed\00Device not a stream\00No data available\00Device timeout\00Out of streams resources\00Link has been severed\00Protocol error\00Bad message\00File descriptor in bad state\00Not a socket\00Destination address required\00Message too large\00Protocol wrong type for socket\00Protocol not available\00Protocol not supported\00Socket type not supported\00Not supported\00Protocol family not supported\00Address family not supported by protocol\00Address not available\00Network is down\00Network unreachable\00Connection reset by network\00Connection aborted\00No buffer space available\00Socket is connected\00Socket not connected\00Cannot send after socket shutdown\00Operation already in progress\00Operation in progress\00Stale file handle\00Remote I/O error\00Quota exceeded\00No medium found\00Wrong medium type\00No error information\00\00(null)\00-0X+0X 0X-0x+0x 0x\00inf\00INF\00NAN\00.\00infinity\00nan\00POSIX\00NSt3__29basic_iosIcNS_11char_traitsIcEEEE\00NSt3__28ios_baseE\00NSt3__29basic_iosIwNS_11char_traitsIwEEEE\00NSt3__215basic_streambufIcNS_11char_traitsIcEEEE\00NSt3__215basic_streambufIwNS_11char_traitsIwEEEE\00NSt3__213basic_istreamIcNS_11char_traitsIcEEEE\00NSt3__213basic_istreamIwNS_11char_traitsIwEEEE\00NSt3__213basic_ostreamIcNS_11char_traitsIcEEEE\00NSt3__213basic_ostreamIwNS_11char_traitsIwEEEE\00NSt3__210__stdinbufIcEE\00unsupported locale for standard input\00NSt3__210__stdinbufIwEE\00NSt3__211__stdoutbufIcEE\00NSt3__211__stdoutbufIwEE\00NSt3__27collateIcEE\00NSt3__26locale5facetE\00NSt3__27collateIwEE\00NSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__29__num_getIcEE\00NSt3__214__num_get_baseE\000123456789abcdefABCDEFxX+-pPiInN\00C\00%p\00NSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__29__num_getIwEE\00NSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__29__num_putIcEE\00NSt3__214__num_put_baseE\00%\00\00\00\00\00l\00ll\00L\00%p\00\00\00\00NSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__29__num_putIwEE\00NSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__29time_baseE\00NSt3__220__time_get_c_storageIcEE\00%H:%M:%S%m/%d/%y%Y-%m-%d%I:%M:%S %p%H:%M%H:%M:%SSunday\00Monday\00Tuesday\00Wednesday\00Thursday\00Friday\00Saturday\00Sun\00Mon\00Tue\00Wed\00Thu\00Fri\00Sat\00January\00February\00March\00April\00May\00June\00July\00August\00September\00October\00November\00December\00Jan\00Feb\00Mar\00Apr\00Jun\00Jul\00Aug\00Sep\00Oct\00Nov\00Dec\00AM\00PM\00%a %b %d %H:%M:%S %Y\00%I:%M:%S %p\00%m/%d/%y\00%H:%M:%S\00NSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__220__time_get_c_storageIwEE\00NSt3__28time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__210__time_putE\00NSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__210moneypunctIcLb0EEE\00NSt3__210money_baseE\00NSt3__210moneypunctIcLb1EEE\00NSt3__210moneypunctIwLb0EEE\00NSt3__210moneypunctIwLb1EEE\00NSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__211__money_getIcEE\000123456789\00%Lf\00NSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__211__money_getIwEE\000123456789\00NSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE\00NSt3__211__money_putIcEE\00%.0Lf\00NSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE\00NSt3__211__money_putIwEE\00NSt3__28messagesIcEE\00NSt3__213messages_baseE\00NSt3__28messagesIwEE\00NSt3__216__narrow_to_utf8ILj32EEE\00NSt3__27codecvtIDic11__mbstate_tEE\00NSt3__212codecvt_baseE\00NSt3__217__widen_from_utf8ILj32EEE\00NSt3__27codecvtIcc11__mbstate_tEE\00NSt3__27codecvtIwc11__mbstate_tEE\00NSt3__27codecvtIDsc11__mbstate_tEE\00NSt3__26locale5__impE\00NSt3__25ctypeIcEE\00NSt3__210ctype_baseE\00NSt3__25ctypeIwEE\00NSt3__28numpunctIcEE\00true\00false\00NSt3__28numpunctIwEE\00!\"vector length_error\"\00C:\\Program Files\\Emscripten\\emscripten\\incoming\\system\\include\\libcxx\\vector\00NSt3__214__shared_countE\00!\"basic_string length_error\"\00C:\\Program Files\\Emscripten\\emscripten\\incoming\\system\\include\\libcxx\\string\00__throw_length_error\00!\"allocator::allocate::bad_alloc\"\00C:\\Program Files\\Emscripten\\emscripten\\incoming\\system\\include\\libcxx\\memory\00allocate\00cannot zero out thread value for __cxa_get_globals()\00cannot create pthread key for __cxa_get_globals()\00pthread_once failure in __cxa_get_globals_fast()\00N10__cxxabiv120__si_class_type_infoE\00N10__cxxabiv116__shim_type_infoE\00St9type_info\00N10__cxxabiv117__class_type_infoE\00St9exception\00uncaught\00terminating with %s exception of type %s: %s\00terminating with %s exception of type %s\00terminating with %s foreign exception\00terminating\00terminate_handler unexpectedly returned\00St9bad_alloc\00std::bad_alloc\00N10__cxxabiv119__pointer_type_infoE\00N10__cxxabiv117__pbase_type_infoE\00N10__cxxabiv121__vmi_class_type_infoE") + (export "_main" (func $_main)) + (export "___udivdi3" (func $___udivdi3)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "_fflush" (func $_fflush)) + (export "___cxa_is_pointer_type" (func $___cxa_is_pointer_type)) + (export "_memset" (func $_memset)) + (export "_memcpy" (func $_memcpy)) + (export "___muldi3" (func $___muldi3)) + (export "___uremdi3" (func $___uremdi3)) + (export "_i64Subtract" (func $_i64Subtract)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (export "_i64Add" (func $_i64Add)) + (export "_pthread_self" (func $_pthread_self)) + (export "_pthread_mutex_unlock" (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv)) + (export "_pthread_cond_broadcast" (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv)) + (export "___errno_location" (func $___errno_location)) + (export "___muldsi3" (func $___muldsi3)) + (export "___cxa_can_catch" (func $___cxa_can_catch)) + (export "_free" (func $_free)) + (export "_memmove" (func $_memmove)) + (export "_malloc" (func $_malloc)) + (export "_pthread_mutex_lock" (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv)) + (export "__GLOBAL__I_000101" (func $__GLOBAL__I_000101)) + (export "__GLOBAL__sub_I_iostream_cpp" (func $runPostSets)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_iiiiiiii" (func $dynCall_iiiiiiii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_viiiii" (func $dynCall_viiiii)) + (export "dynCall_iiiiiid" (func $dynCall_iiiiiid)) + (export "dynCall_vi" (func $dynCall_vi)) + (export "dynCall_vii" (func $dynCall_vii)) + (export "dynCall_iiiiiii" (func $dynCall_iiiiiii)) + (export "dynCall_iiiiid" (func $dynCall_iiiiid)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_viii" (func $dynCall_viii)) + (export "dynCall_v" (func $dynCall_v)) + (export "dynCall_iiiiiiiii" (func $dynCall_iiiiiiiii)) + (export "dynCall_iiiii" (func $dynCall_iiiii)) + (export "dynCall_viiiiii" (func $dynCall_viiiiii)) + (export "dynCall_iii" (func $dynCall_iii)) + (export "dynCall_iiiiii" (func $dynCall_iiiiii)) + (export "dynCall_viiii" (func $dynCall_viiii)) + (func $___floatscan (param $0 i32) (param $1 i32) (param $2 i32) (result f64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 f64) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 f64) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 f64) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 f64) + (local $27 i32) + (local $28 i32) + (local $29 f64) + (local $30 f64) + (set_local $24 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 512) + ) + ) + (set_local $12 + (get_local $24) + ) + (block $label$break$L4 + (block $__rjti$13 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-case1 $switch-default + (get_local $1) + ) + ) + (set_local $18 + (i32.const 24) + ) + (set_local $21 + (i32.const -149) + ) + (br $__rjti$13) + ) + (set_local $18 + (i32.const 53) + ) + (set_local $21 + (i32.const -1074) + ) + (br $__rjti$13) + ) + (set_local $18 + (i32.const 53) + ) + (set_local $21 + (i32.const -1074) + ) + (br $__rjti$13) + ) + (set_local $7 + (f64.const 0) + ) + (br $label$break$L4) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 100) + ) + ) + (loop $do-in + (br_if $do-in + (call $_isspace + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + ) + ) + (block $label$break$L13 + (block $switch-default6 + (block $switch-case4 + (br_table $switch-case4 $switch-default6 $switch-case4 $switch-default6 + (i32.sub + (get_local $1) + (i32.const 43) + ) + ) + ) + (set_local $17 + (i32.sub + (i32.const 1) + (i32.shl + (i32.eq + (get_local $1) + (i32.const 45) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $1 + (i32.load8_u + (get_local $1) + ) + ) + (br $label$break$L13) + ) + (block + (set_local $1 + (call $___shgetc + (get_local $0) + ) + ) + (br $label$break$L13) + ) + ) + ) + (set_local $17 + (i32.const 1) + ) + ) + (set_local $4 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (if + (i32.ne + (i32.or + (get_local $1) + (i32.const 32) + ) + (i32.load8_s + (i32.add + (get_local $4) + (i32.const 13217) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $4) + ) + (br $while-out) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 7) + ) + (set_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + (br_if $while-in + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 8) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (block $__rjto$12 + (block $__rjti$12 + (block $switch-default76 + (block $switch-case11 + (block $switch-case10 + (br_table $switch-case11 $switch-default76 $switch-default76 $switch-default76 $switch-default76 $switch-case10 $switch-default76 + (i32.sub + (get_local $1) + (i32.const 3) + ) + ) + ) + (br $__rjto$12) + ) + (br $__rjti$12) + ) + (if + (i32.and + (tee_local $5 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.gt_u + (get_local $1) + (i32.const 3) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 8) + ) + (br $__rjto$12) + (br $__rjti$12) + ) + ) + (block $label$break$L34 + (if + (i32.eqz + (get_local $1) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $4 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.ne + (i32.or + (get_local $1) + (i32.const 32) + ) + (i32.load8_s + (i32.add + (get_local $4) + (i32.const 13226) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $4) + ) + (br $label$break$L34) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 2) + ) + (set_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + (br_if $while-in14 + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 3) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + ) + ) + (block $switch-default75 + (block $switch-case74 + (block $switch-case22 + (br_table $switch-case74 $switch-default75 $switch-default75 $switch-case22 $switch-default75 + (get_local $1) + ) + ) + (if + (i32.eq + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 40) + ) + (set_local $2 + (i32.const 1) + ) + (block + (if + (i32.eqz + (i32.load + (get_local $11) + ) + ) + (block + (set_local $7 + (get_global $nan) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (set_local $7 + (get_global $nan) + ) + (br $label$break$L4) + ) + ) + (loop $while-in19 + (block $while-out18 + (if + (i32.eqz + (i32.or + (i32.lt_u + (i32.add + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65) + ) + (i32.const 26) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.eq + (get_local $1) + (i32.const 95) + ) + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -97) + ) + (i32.const 26) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $2) + ) + (br $while-out18) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in19) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 41) + ) + (block + (set_local $7 + (get_global $nan) + ) + (br $label$break$L4) + ) + ) + (if + (i32.eqz + (tee_local $2 + (i32.eqz + (i32.load + (get_local $11) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 22) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $label$break$L4) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (block + (set_local $7 + (get_global $nan) + ) + (br $label$break$L4) + ) + ) + (loop $while-in21 + (set_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (br_if $while-in21 + (get_local $1) + ) + (set_local $7 + (get_global $nan) + ) + (br $label$break$L4) + ) + ) + (block $do-once23 + (if + (i32.eq + (get_local $3) + (i32.const 48) + ) + (block + (if + (i32.ne + (i32.or + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 32) + ) + (i32.const 120) + ) + (block + (if + (i32.eqz + (i32.load + (get_local $11) + ) + ) + (block + (set_local $1 + (i32.const 48) + ) + (br $do-once23) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (set_local $1 + (i32.const 48) + ) + (br $do-once23) + ) + ) + (set_local $3 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $10 + (i32.load8_u + (get_local $1) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $10 + (call $___shgetc + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $label$continue$L94 + (block $label$break$L94 + (block $switch25 + (block $switch-default28 + (block $switch-case27 + (block $switch-case26 + (br_table $switch-case26 $switch-default28 $switch-case27 $switch-default28 + (i32.sub + (get_local $10) + (i32.const 46) + ) + ) + ) + (br $__rjti$1) + ) + (br $switch25) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $13 + (f64.const 1) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $label$break$L94) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $10 + (i32.load8_u + (get_local $1) + ) + ) + (set_local $3 + (i32.const 1) + ) + (br $label$continue$L94) + ) + (block + (set_local $10 + (call $___shgetc + (get_local $0) + ) + ) + (set_local $3 + (i32.const 1) + ) + (br $label$continue$L94) + ) + ) + ) + ) + (br $__rjto$1) + ) + (if + (i32.eq + (tee_local $10 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 48) + ) + (block + (set_local $8 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (loop $while-in30 + (set_local $10 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (set_local $8 + (call $_i64Add + (get_local $8) + (get_local $16) + (i32.const -1) + (i32.const -1) + ) + ) + (set_local $16 + (get_global $tempRet0) + ) + (br_if $while-in30 + (i32.eq + (get_local $10) + (i32.const 48) + ) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $3 + (i32.const 1) + ) + (set_local $15 + (i32.const 1) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $13 + (f64.const 1) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $15 + (i32.const 1) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $13 + (f64.const 1) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + ) + ) + ) + (loop $while-in32 + (block $while-out31 + (set_local $19 + (i32.or + (get_local $10) + (i32.const 32) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.lt_u + (tee_local $14 + (i32.add + (get_local $10) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $while-out31 + (i32.eqz + (i32.or + (tee_local $22 + (i32.eq + (get_local $10) + (i32.const 46) + ) + ) + (i32.lt_u + (i32.add + (get_local $19) + (i32.const -97) + ) + (i32.const 6) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (get_local $22) + ) + ) + (if + (get_local $15) + (block + (set_local $10 + (i32.const 46) + ) + (br $while-out31) + ) + (block + (set_local $8 + (get_local $5) + ) + (set_local $16 + (get_local $4) + ) + (set_local $15 + (i32.const 1) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $3 + (if i32 + (i32.gt_s + (get_local $10) + (i32.const 57) + ) + (i32.add + (get_local $19) + (i32.const -87) + ) + (get_local $14) + ) + ) + (block $do-once33 + (set_local $20 + (if f64 + (i32.or + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.lt_u + (get_local $5) + (i32.const 8) + ) + ) + ) + (block f64 + (set_local $1 + (i32.add + (get_local $3) + (i32.shl + (get_local $1) + (i32.const 4) + ) + ) + ) + (get_local $13) + ) + (block f64 + (if + (i32.or + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.lt_u + (get_local $5) + (i32.const 14) + ) + ) + ) + (block + (set_local $20 + (tee_local $13 + (f64.mul + (get_local $13) + (f64.const 0.0625) + ) + ) + ) + (set_local $7 + (f64.add + (get_local $7) + (f64.mul + (get_local $13) + (f64.convert_s/i32 + (get_local $3) + ) + ) + ) + ) + (br $do-once33) + ) + ) + (if f64 + (i32.or + (get_local $9) + (i32.eqz + (get_local $3) + ) + ) + (get_local $13) + (block f64 + (set_local $9 + (i32.const 1) + ) + (set_local $7 + (f64.add + (get_local $7) + (f64.mul + (get_local $13) + (f64.const 0.5) + ) + ) + ) + (get_local $13) + ) + ) + ) + ) + ) + ) + (set_local $5 + (call $_i64Add + (get_local $5) + (get_local $4) + (i32.const 1) + (i32.const 0) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (set_local $3 + (i32.const 1) + ) + (set_local $13 + (get_local $20) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (set_local $10 + (i32.load8_u + (get_local $10) + ) + ) + (br $while-in32) + ) + (block + (set_local $10 + (call $___shgetc + (get_local $0) + ) + ) + (br $while-in32) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.eqz + (i32.load + (get_local $11) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $2) + (if + (i32.eqz + (get_local $1) + ) + (block + (i32.store + (get_local $6) + (i32.add + (tee_local $0 + (i32.load + (get_local $6) + ) + ) + (i32.const -1) + ) + ) + (if + (get_local $15) + (i32.store + (get_local $6) + (i32.add + (get_local $0) + (i32.const -2) + ) + ) + ) + ) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + ) + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 0) + ) + ) + (br $label$break$L4) + ) + ) + (if + (i32.or + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.lt_u + (get_local $5) + (i32.const 8) + ) + ) + ) + (block + (set_local $3 + (get_local $5) + ) + (set_local $9 + (get_local $4) + ) + (loop $while-in36 + (set_local $1 + (i32.shl + (get_local $1) + (i32.const 4) + ) + ) + (set_local $3 + (call $_i64Add + (get_local $3) + (get_local $9) + (i32.const 1) + (i32.const 0) + ) + ) + (br_if $while-in36 + (i32.or + (i32.lt_s + (tee_local $9 + (get_global $tempRet0) + ) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $9) + ) + (i32.lt_u + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (i32.or + (get_local $10) + (i32.const 32) + ) + (i32.const 112) + ) + (if i32 + (i32.and + (i32.eqz + (tee_local $3 + (call $_scanexp + (get_local $0) + (get_local $2) + ) + ) + ) + (i32.eq + (tee_local $9 + (get_global $tempRet0) + ) + (i32.const -2147483648) + ) + ) + (block i32 + (if + (i32.eqz + (get_local $2) + ) + (block + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $label$break$L4) + ) + ) + (if i32 + (i32.load + (get_local $11) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (block i32 + (set_local $2 + (get_local $9) + ) + (get_local $3) + ) + ) + (if i32 + (i32.load + (get_local $11) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (call $_i64Add + (call $_i64Add + (call $_bitshift64Shl + (if i32 + (tee_local $3 + (i32.eqz + (get_local $15) + ) + ) + (get_local $5) + (get_local $8) + ) + (if i32 + (get_local $3) + (get_local $4) + (get_local $16) + ) + (i32.const 2) + ) + (get_global $tempRet0) + (i32.const -32) + (i32.const -1) + ) + (get_global $tempRet0) + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (block + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 0) + ) + ) + (br $label$break$L4) + ) + ) + (if + (i32.or + (i32.gt_s + (tee_local $2 + (get_global $tempRet0) + ) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $2) + ) + (i32.gt_u + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $21) + ) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $7 + (f64.mul + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 1797693134862315708145274e284) + ) + (f64.const 1797693134862315708145274e284) + ) + ) + (br $label$break$L4) + ) + ) + (if + (i32.or + (i32.lt_s + (get_local $2) + (tee_local $4 + (i32.shr_s + (i32.shl + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $21) + (i32.const -106) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.and + (i32.eq + (get_local $2) + (get_local $4) + ) + (i32.lt_u + (get_local $0) + (get_local $3) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $7 + (f64.mul + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 2.2250738585072014e-308) + ) + (f64.const 2.2250738585072014e-308) + ) + ) + (br $label$break$L4) + ) + ) + (if + (i32.gt_s + (get_local $1) + (i32.const -1) + ) + (loop $while-in38 + (set_local $1 + (i32.xor + (tee_local $4 + (i32.or + (tee_local $3 + (i32.eqz + (f64.ge + (get_local $7) + (f64.const 0.5) + ) + ) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + (set_local $7 + (f64.add + (get_local $7) + (if f64 + (get_local $3) + (get_local $7) + (f64.add + (get_local $7) + (f64.const -1) + ) + ) + ) + ) + (set_local $0 + (call $_i64Add + (get_local $0) + (get_local $2) + (i32.const -1) + (i32.const -1) + ) + ) + (set_local $2 + (get_global $tempRet0) + ) + (br_if $while-in38 + (i32.gt_s + (get_local $4) + (i32.const -1) + ) + ) + (set_local $3 + (get_local $0) + ) + ) + (set_local $3 + (get_local $0) + ) + ) + (set_local $0 + (call $_i64Add + (get_local $3) + (get_local $2) + (call $_i64Subtract + (i32.const 32) + (i32.const 0) + (get_local $21) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $21) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (get_global $tempRet0) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (if + (i32.or + (i32.gt_s + (i32.const 0) + (tee_local $2 + (get_global $tempRet0) + ) + ) + (i32.and + (i32.eqz + (get_local $2) + ) + (i32.gt_u + (get_local $18) + (get_local $0) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 0) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (set_local $0 + (get_local $18) + ) + ) + (br_if $__rjti$3 + (i32.lt_s + (get_local $0) + (i32.const 53) + ) + ) + (set_local $2 + (get_local $0) + ) + (set_local $13 + (f64.convert_s/i32 + (get_local $17) + ) + ) + (set_local $20 + (f64.const 0) + ) + (br $__rjto$3) + ) + (set_local $2 + (get_local $0) + ) + (set_local $13 + (tee_local $20 + (f64.convert_s/i32 + (get_local $17) + ) + ) + ) + (set_local $20 + (call $_copysignl + (call $_scalbn + (f64.const 1) + (i32.sub + (i32.const 84) + (get_local $0) + ) + ) + (get_local $20) + ) + ) + ) + (if + (f64.eq + (tee_local $7 + (f64.sub + (f64.add + (f64.mul + (get_local $13) + (if f64 + (tee_local $0 + (i32.and + (i32.eqz + (i32.and + (get_local $1) + (i32.const 1) + ) + ) + (i32.and + (f64.ne + (get_local $7) + (f64.const 0) + ) + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + ) + ) + ) + (f64.const 0) + (get_local $7) + ) + ) + (f64.add + (get_local $20) + (f64.mul + (get_local $13) + (f64.convert_u/i32 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ) + ) + ) + (get_local $20) + ) + ) + (f64.const 0) + ) + (i32.store + (call $___errno_location) + (i32.const 34) + ) + ) + (set_local $7 + (call $_scalbnl + (get_local $7) + (get_local $3) + ) + ) + (br $label$break$L4) + ) + (set_local $1 + (get_local $3) + ) + ) + ) + (set_local $28 + (i32.sub + (i32.const 0) + (tee_local $27 + (i32.add + (get_local $21) + (get_local $18) + ) + ) + ) + ) + (set_local $4 + (i32.const 0) + ) + (block $__rjto$6 + (block $__rjti$6 + (loop $label$continue$L184 + (block $label$break$L184 + (block $switch39 + (block $switch-default42 + (block $switch-case41 + (block $switch-case40 + (br_table $switch-case40 $switch-default42 $switch-case41 $switch-default42 + (i32.sub + (get_local $1) + (i32.const 46) + ) + ) + ) + (br $__rjti$6) + ) + (br $switch39) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (br $label$break$L184) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $1 + (i32.load8_u + (get_local $1) + ) + ) + (set_local $4 + (i32.const 1) + ) + (br $label$continue$L184) + ) + (block + (set_local $1 + (call $___shgetc + (get_local $0) + ) + ) + (set_local $4 + (i32.const 1) + ) + (br $label$continue$L184) + ) + ) + ) + ) + (br $__rjto$6) + ) + (if + (i32.eq + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 48) + ) + (block + (set_local $3 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in44 + (set_local $3 + (call $_i64Add + (get_local $3) + (get_local $8) + (i32.const -1) + (i32.const -1) + ) + ) + (set_local $8 + (get_global $tempRet0) + ) + (br_if $while-in44 + (i32.eq + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 48) + ) + ) + (set_local $4 + (i32.const 1) + ) + (set_local $10 + (i32.const 1) + ) + ) + ) + (block + (set_local $3 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (i32.const 1) + ) + ) + ) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (block $do-once50 + (block $__rjti$11 + (block $__rjti$10 + (block $__rjti$9 + (block $__rjti$8 + (block $__rjti$7 + (if + (i32.or + (tee_local $23 + (i32.eq + (get_local $1) + (i32.const 46) + ) + ) + (i32.lt_u + (tee_local $22 + (i32.add + (get_local $1) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (block + (set_local $25 + (i32.add + (get_local $12) + (i32.const 496) + ) + ) + (set_local $19 + (get_local $1) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $1 + (get_local $3) + ) + (set_local $3 + (get_local $8) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (loop $label$continue$L205 + (block $label$break$L205 + (block $do-once46 + (if + (get_local $23) + (if + (get_local $10) + (br $label$break$L205) + (block + (set_local $1 + (get_local $5) + ) + (set_local $3 + (get_local $9) + ) + (set_local $10 + (i32.const 1) + ) + ) + ) + (block + (set_local $14 + (call $_i64Add + (get_local $5) + (get_local $9) + (i32.const 1) + (i32.const 0) + ) + ) + (set_local $9 + (get_global $tempRet0) + ) + (set_local $23 + (i32.ne + (get_local $19) + (i32.const 48) + ) + ) + (if + (i32.ge_s + (get_local $15) + (i32.const 125) + ) + (block + (if + (i32.eqz + (get_local $23) + ) + (block + (set_local $5 + (get_local $14) + ) + (br $do-once46) + ) + ) + (i32.store + (get_local $25) + (i32.or + (i32.load + (get_local $25) + ) + (i32.const 1) + ) + ) + (set_local $5 + (get_local $14) + ) + (br $do-once46) + ) + ) + (set_local $4 + (i32.add + (get_local $12) + (i32.shl + (get_local $15) + (i32.const 2) + ) + ) + ) + (if + (get_local $8) + (set_local $22 + (i32.add + (i32.add + (get_local $19) + (i32.const -48) + ) + (i32.mul + (i32.load + (get_local $4) + ) + (i32.const 10) + ) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $22) + ) + (set_local $5 + (get_local $14) + ) + (set_local $4 + (i32.const 1) + ) + (if + (tee_local $19 + (i32.eq + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + (set_local $8 + (i32.const 0) + ) + ) + (set_local $15 + (i32.add + (get_local $19) + (get_local $15) + ) + ) + (if + (get_local $23) + (set_local $16 + (get_local $14) + ) + ) + ) + ) + ) + (if + (i32.or + (tee_local $23 + (i32.eq + (tee_local $14 + (if i32 + (i32.lt_u + (tee_local $14 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $11) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $14) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 46) + ) + ) + (i32.lt_u + (tee_local $22 + (i32.add + (get_local $14) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (block + (set_local $19 + (get_local $14) + ) + (br $label$continue$L205) + ) + (block + (set_local $19 + (get_local $1) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $4) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$7) + ) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $4 + (i32.ne + (get_local $4) + (i32.const 0) + ) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$8) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $19 + (get_local $3) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $22 + (get_local $8) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $23 + (get_local $4) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + ) + (set_local $3 + (if i32 + (tee_local $4 + (i32.eqz + (get_local $10) + ) + ) + (get_local $5) + (get_local $19) + ) + ) + (set_local $4 + (if i32 + (get_local $4) + (get_local $9) + (get_local $22) + ) + ) + (if + (i32.eqz + (i32.and + (i32.eq + (i32.or + (get_local $14) + (i32.const 32) + ) + (i32.const 101) + ) + (tee_local $8 + (i32.ne + (get_local $23) + (i32.const 0) + ) + ) + ) + ) + (if + (i32.gt_s + (get_local $14) + (i32.const -1) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (set_local $4 + (get_local $8) + ) + (br $__rjti$8) + ) + (block + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$9) + ) + ) + ) + (set_local $0 + (call $_i64Add + (tee_local $0 + (if i32 + (i32.and + (i32.eqz + (tee_local $8 + (call $_scanexp + (get_local $0) + (get_local $2) + ) + ) + ) + (i32.eq + (tee_local $10 + (get_global $tempRet0) + ) + (i32.const -2147483648) + ) + ) + (block i32 + (if + (i32.eqz + (get_local $2) + ) + (block + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $do-once50) + ) + ) + (if i32 + (i32.load + (get_local $11) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $2 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (block i32 + (set_local $2 + (get_local $10) + ) + (get_local $8) + ) + ) + ) + (get_local $2) + (get_local $3) + (get_local $4) + ) + ) + (set_local $3 + (get_global $tempRet0) + ) + (set_local $2 + (get_local $15) + ) + (br $__rjti$11) + ) + (if + (i32.load + (get_local $11) + ) + (block + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + (br_if $__rjti$10 + (i32.eqz + (get_local $4) + ) + ) + (set_local $0 + (get_local $2) + ) + (set_local $2 + (get_local $15) + ) + (br $__rjti$11) + ) + (block + (set_local $8 + (get_local $4) + ) + (br $__rjti$9) + ) + ) + (br $do-once50) + ) + (br_if $__rjti$10 + (i32.eqz + (get_local $8) + ) + ) + (set_local $0 + (get_local $2) + ) + (set_local $2 + (get_local $15) + ) + (br $__rjti$11) + ) + (i32.store + (call $___errno_location) + (i32.const 22) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $do-once50) + ) + (if + (i32.eqz + (tee_local $4 + (i32.load + (get_local $12) + ) + ) + ) + (block + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 0) + ) + ) + (br $do-once50) + ) + ) + (if + (i32.and + (i32.or + (i32.lt_s + (get_local $9) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $9) + ) + (i32.lt_u + (get_local $5) + (i32.const 10) + ) + ) + ) + (i32.and + (i32.eq + (get_local $0) + (get_local $5) + ) + (i32.eq + (get_local $3) + (get_local $9) + ) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $18) + (i32.const 30) + ) + (i32.eqz + (i32.shr_u + (get_local $4) + (get_local $18) + ) + ) + ) + (block + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.convert_u/i32 + (get_local $4) + ) + ) + ) + (br $do-once50) + ) + ) + ) + (if + (i32.or + (i32.gt_s + (get_local $3) + (tee_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (tee_local $4 + (i32.div_s + (get_local $21) + (i32.const -2) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.and + (i32.eq + (get_local $3) + (get_local $5) + ) + (i32.gt_u + (get_local $0) + (get_local $4) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $7 + (f64.mul + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 1797693134862315708145274e284) + ) + (f64.const 1797693134862315708145274e284) + ) + ) + (br $do-once50) + ) + ) + (if + (i32.or + (i32.lt_s + (get_local $3) + (tee_local $5 + (i32.shr_s + (i32.shl + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $21) + (i32.const -106) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.and + (i32.eq + (get_local $3) + (get_local $5) + ) + (i32.lt_u + (get_local $0) + (get_local $4) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $7 + (f64.mul + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.const 2.2250738585072014e-308) + ) + (f64.const 2.2250738585072014e-308) + ) + ) + (br $do-once50) + ) + ) + (if + (get_local $1) + (block + (if + (i32.lt_s + (get_local $1) + (i32.const 9) + ) + (block + (set_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $12) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $4 + (get_local $1) + ) + (loop $while-in53 + (set_local $1 + (i32.mul + (get_local $3) + (i32.const 10) + ) + ) + (if + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $3 + (get_local $1) + ) + (br $while-in53) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $1) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $16) + (i32.const 9) + ) + (if + (i32.and + (i32.le_s + (get_local $16) + (get_local $0) + ) + (i32.lt_s + (get_local $0) + (i32.const 18) + ) + ) + (block + (if + (i32.eq + (get_local $0) + (i32.const 9) + ) + (block + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.convert_u/i32 + (i32.load + (get_local $12) + ) + ) + ) + ) + (br $do-once50) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 9) + ) + (block + (set_local $7 + (f64.div + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.convert_u/i32 + (i32.load + (get_local $12) + ) + ) + ) + (f64.convert_s/i32 + (i32.load + (i32.add + (i32.shl + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 2) + ) + (i32.const 6280) + ) + ) + ) + ) + ) + (br $do-once50) + ) + ) + (if + (i32.or + (i32.gt_s + (tee_local $1 + (i32.add + (i32.add + (get_local $18) + (i32.const 27) + ) + (i32.mul + (get_local $0) + (i32.const -3) + ) + ) + ) + (i32.const 30) + ) + (i32.eqz + (i32.shr_u + (tee_local $3 + (i32.load + (get_local $12) + ) + ) + (get_local $1) + ) + ) + ) + (block + (set_local $7 + (f64.mul + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (f64.convert_u/i32 + (get_local $3) + ) + ) + (f64.convert_s/i32 + (i32.load + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 6208) + ) + ) + ) + ) + ) + (br $do-once50) + ) + ) + ) + ) + ) + (set_local $0 + (if i32 + (tee_local $1 + (i32.rem_s + (get_local $0) + (i32.const 9) + ) + ) + (block i32 + (set_local $9 + (i32.load + (i32.add + (i32.shl + (i32.sub + (i32.const 0) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $0) + (i32.const -1) + ) + (get_local $1) + (i32.add + (get_local $1) + (i32.const 9) + ) + ) + ) + ) + (i32.const 2) + ) + (i32.const 6280) + ) + ) + ) + (if + (get_local $2) + (block + (set_local $16 + (i32.div_s + (i32.const 1000000000) + (get_local $9) + ) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (loop $while-in55 + (set_local $8 + (i32.add + (i32.div_u + (tee_local $10 + (i32.load + (tee_local $15 + (i32.add + (get_local $12) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + ) + (get_local $9) + ) + (get_local $3) + ) + ) + (i32.store + (get_local $15) + (get_local $8) + ) + (set_local $3 + (i32.mul + (i32.rem_u + (get_local $10) + (get_local $9) + ) + (get_local $16) + ) + ) + (set_local $8 + (i32.and + (i32.eq + (get_local $5) + (get_local $1) + ) + (i32.eqz + (get_local $8) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (if + (get_local $8) + (set_local $0 + (i32.add + (get_local $0) + (i32.const -9) + ) + ) + ) + (if + (get_local $8) + (set_local $1 + (i32.and + (get_local $5) + (i32.const 127) + ) + ) + ) + (br_if $while-in55 + (i32.ne + (get_local $5) + (get_local $2) + ) + ) + ) + (if + (get_local $3) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $3) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + ) + (block + (set_local $1 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $4 + (i32.add + (i32.sub + (i32.const 9) + (get_local $4) + ) + (get_local $0) + ) + ) + (get_local $2) + ) + (block i32 + (set_local $1 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $4 + (get_local $0) + ) + (get_local $2) + ) + ) + ) + (loop $label$continue$L284 + (block $label$break$L284 + (set_local $16 + (i32.lt_s + (get_local $4) + (i32.const 18) + ) + ) + (set_local $15 + (i32.eq + (get_local $4) + (i32.const 18) + ) + ) + (set_local $10 + (i32.add + (get_local $12) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + (loop $while-in57 + (if + (i32.eqz + (get_local $16) + ) + (block + (if + (i32.eqz + (get_local $15) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $label$break$L284) + ) + ) + (if + (i32.ge_u + (i32.load + (get_local $10) + ) + (i32.const 9007199) + ) + (block + (set_local $3 + (i32.const 18) + ) + (br $label$break$L284) + ) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 127) + ) + ) + (loop $while-in59 + (set_local $3 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (tee_local $14 + (i32.add + (get_local $12) + (i32.shl + (tee_local $8 + (i32.and + (get_local $5) + (i32.const 127) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 0) + (i32.const 29) + ) + (get_global $tempRet0) + (get_local $3) + (i32.const 0) + ) + ) + (set_local $3 + (if i32 + (i32.or + (i32.gt_u + (tee_local $5 + (get_global $tempRet0) + ) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $5) + ) + (i32.gt_u + (get_local $3) + (i32.const 1000000000) + ) + ) + ) + (block i32 + (set_local $9 + (call $___udivdi3 + (get_local $3) + (get_local $5) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $5 + (call $___uremdi3 + (get_local $3) + (get_local $5) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (get_local $9) + ) + (block i32 + (set_local $5 + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $5) + ) + (if + (i32.eqz + (i32.or + (i32.ne + (get_local $8) + (i32.and + (i32.add + (get_local $0) + (i32.const 127) + ) + (i32.const 127) + ) + ) + (tee_local $9 + (i32.eq + (get_local $8) + (get_local $1) + ) + ) + ) + ) + (set_local $0 + (if i32 + (get_local $5) + (get_local $0) + (get_local $8) + ) + ) + ) + (if + (get_local $9) + (set_local $5 + (get_local $3) + ) + (block + (set_local $5 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (br $while-in59) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const -29) + ) + ) + (br_if $while-in57 + (i32.eqz + (get_local $5) + ) + ) + (set_local $3 + (get_local $2) + ) + ) + (if + (i32.eq + (tee_local $1 + (i32.and + (i32.add + (get_local $1) + (i32.const 127) + ) + (i32.const 127) + ) + ) + (get_local $0) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $12) + (i32.shl + (i32.and + (i32.add + (get_local $0) + (i32.const 126) + ) + (i32.const 127) + ) + (i32.const 2) + ) + ) + ) + (i32.or + (i32.load + (get_local $2) + ) + (i32.load + (i32.add + (get_local $12) + (i32.shl + (tee_local $0 + (i32.and + (i32.add + (get_local $0) + (i32.const 127) + ) + (i32.const 127) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (get_local $5) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 9) + ) + ) + (br $label$continue$L284) + ) + ) + (block $__rjto$5 + (block $__rjti$5 + (loop $label$continue$L302 + (block $label$break$L302 + (set_local $4 + (i32.and + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 127) + ) + ) + (set_local $15 + (i32.add + (get_local $12) + (i32.shl + (i32.and + (i32.add + (get_local $0) + (i32.const 127) + ) + (i32.const 127) + ) + (i32.const 2) + ) + ) + ) + (loop $while-in61 + (set_local $9 + (i32.eq + (get_local $3) + (i32.const 18) + ) + ) + (set_local $16 + (if i32 + (i32.gt_s + (get_local $3) + (i32.const 27) + ) + (i32.const 9) + (i32.const 1) + ) + ) + (set_local $8 + (i32.xor + (get_local $9) + (i32.const 1) + ) + ) + (loop $while-in63 + (block $__rjto$4 + (block $__rjti$4 + (br_if $__rjti$4 + (tee_local $10 + (i32.eq + (tee_local $5 + (i32.and + (get_local $1) + (i32.const 127) + ) + ) + (get_local $0) + ) + ) + ) + (br_if $__rjti$4 + (i32.lt_u + (tee_local $14 + (i32.load + (i32.add + (get_local $12) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + (i32.const 9007199) + ) + ) + (br_if $__rjto$4 + (i32.gt_u + (get_local $14) + (i32.const 9007199) + ) + ) + (br_if $__rjti$4 + (i32.eq + (tee_local $14 + (i32.and + (i32.add + (get_local $1) + (i32.const 1) + ) + (i32.const 127) + ) + ) + (get_local $0) + ) + ) + (br_if $__rjti$4 + (i32.lt_u + (tee_local $14 + (i32.load + (i32.add + (get_local $12) + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + ) + (i32.const 254740991) + ) + ) + (if + (i32.eqz + (i32.or + (i32.gt_u + (get_local $14) + (i32.const 254740991) + ) + (get_local $8) + ) + ) + (block + (set_local $3 + (get_local $5) + ) + (br $label$break$L302) + ) + ) + (br $__rjto$4) + ) + (br_if $__rjti$5 + (get_local $9) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (get_local $16) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $0) + ) + (block + (set_local $1 + (get_local $0) + ) + (br $while-in63) + ) + ) + ) + (set_local $10 + (i32.add + (i32.shl + (i32.const 1) + (get_local $16) + ) + (i32.const -1) + ) + ) + (set_local $14 + (i32.shr_u + (i32.const 1000000000) + (get_local $16) + ) + ) + (set_local $5 + (get_local $1) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $8 + (get_local $1) + ) + (loop $while-in67 + (set_local $1 + (i32.add + (i32.shr_u + (tee_local $22 + (i32.load + (tee_local $19 + (i32.add + (get_local $12) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + ) + ) + ) + (get_local $16) + ) + (get_local $9) + ) + ) + (i32.store + (get_local $19) + (get_local $1) + ) + (set_local $9 + (i32.mul + (i32.and + (get_local $22) + (get_local $10) + ) + (get_local $14) + ) + ) + (set_local $1 + (i32.and + (i32.eq + (get_local $8) + (get_local $5) + ) + (i32.eqz + (get_local $1) + ) + ) + ) + (set_local $8 + (i32.and + (i32.add + (get_local $8) + (i32.const 1) + ) + (i32.const 127) + ) + ) + (if + (get_local $1) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -9) + ) + ) + ) + (set_local $1 + (if i32 + (get_local $1) + (get_local $8) + (get_local $5) + ) + ) + (if + (i32.ne + (get_local $8) + (get_local $0) + ) + (block + (set_local $5 + (get_local $1) + ) + (br $while-in67) + ) + ) + ) + (br_if $while-in61 + (i32.eqz + (get_local $9) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (get_local $15) + (i32.or + (i32.load + (get_local $15) + ) + (i32.const 1) + ) + ) + (br $while-in61) + ) + ) + ) + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (get_local $9) + ) + (set_local $0 + (get_local $4) + ) + (br $label$continue$L302) + ) + ) + (br $__rjto$5) + ) + (if + (get_local $10) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (i32.add + (get_local $4) + (i32.const -1) + ) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $3 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + (set_local $7 + (f64.convert_u/i32 + (i32.load + (i32.add + (get_local $12) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $4 + (i32.and + (i32.add + (get_local $1) + (i32.const 1) + ) + (i32.const 127) + ) + ) + (get_local $0) + ) + (i32.store + (i32.add + (get_local $12) + (i32.shl + (i32.add + (tee_local $3 + (i32.and + (i32.add + (get_local $1) + (i32.const 2) + ) + (i32.const 127) + ) + ) + (i32.const -1) + ) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $3 + (get_local $0) + ) + ) + (set_local $13 + (f64.mul + (tee_local $20 + (f64.convert_s/i32 + (get_local $17) + ) + ) + (f64.add + (f64.mul + (get_local $7) + (f64.const 1e9) + ) + (f64.convert_u/i32 + (i32.load + (i32.add + (get_local $12) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (if i32 + (tee_local $4 + (i32.lt_s + (tee_local $5 + (i32.sub + (tee_local $8 + (i32.add + (get_local $2) + (i32.const 53) + ) + ) + (get_local $21) + ) + ) + (get_local $18) + ) + ) + (tee_local $18 + (if i32 + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 0) + (get_local $5) + ) + ) + (get_local $18) + ) + (i32.const 53) + ) + (block + (set_local $26 + (tee_local $29 + (call $_copysignl + (call $_scalbn + (f64.const 1) + (i32.sub + (i32.const 105) + (get_local $18) + ) + ) + (get_local $13) + ) + ) + ) + (set_local $7 + (tee_local $30 + (call $_fmodl + (get_local $13) + (call $_scalbn + (f64.const 1) + (i32.sub + (i32.const 53) + (get_local $18) + ) + ) + ) + ) + ) + (set_local $13 + (f64.add + (get_local $29) + (f64.sub + (get_local $13) + (get_local $30) + ) + ) + ) + ) + (block + (set_local $26 + (f64.const 0) + ) + (set_local $7 + (f64.const 0) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + (block $do-once68 + (if + (i32.ne + (tee_local $9 + (i32.and + (i32.add + (get_local $1) + (i32.const 2) + ) + (i32.const 127) + ) + ) + (get_local $3) + ) + (block + (block $do-once70 + (set_local $7 + (if f64 + (i32.lt_u + (tee_local $9 + (i32.load + (i32.add + (get_local $12) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (i32.const 500000000) + ) + (block f64 + (if + (i32.eqz + (get_local $9) + ) + (br_if $do-once70 + (i32.eq + (i32.and + (i32.add + (get_local $1) + (i32.const 3) + ) + (i32.const 127) + ) + (get_local $3) + ) + ) + ) + (f64.add + (f64.mul + (get_local $20) + (f64.const 0.25) + ) + (get_local $7) + ) + ) + (block f64 + (if + (i32.gt_u + (get_local $9) + (i32.const 500000000) + ) + (block + (set_local $7 + (f64.add + (f64.mul + (get_local $20) + (f64.const 0.75) + ) + (get_local $7) + ) + ) + (br $do-once70) + ) + ) + (if f64 + (i32.eq + (i32.and + (i32.add + (get_local $1) + (i32.const 3) + ) + (i32.const 127) + ) + (get_local $3) + ) + (f64.add + (f64.mul + (get_local $20) + (f64.const 0.5) + ) + (get_local $7) + ) + (f64.add + (f64.mul + (get_local $20) + (f64.const 0.75) + ) + (get_local $7) + ) + ) + ) + ) + ) + ) + (br_if $do-once68 + (i32.le_s + (i32.sub + (i32.const 53) + (get_local $18) + ) + (i32.const 1) + ) + ) + (br_if $do-once68 + (f64.ne + (call $_fmodl + (get_local $7) + (f64.const 1) + ) + (f64.const 0) + ) + ) + (set_local $7 + (f64.add + (get_local $7) + (f64.const 1) + ) + ) + ) + ) + ) + (set_local $13 + (f64.sub + (f64.add + (get_local $13) + (get_local $7) + ) + (get_local $26) + ) + ) + (block $do-once72 + (if + (i32.gt_s + (i32.and + (get_local $8) + (i32.const 2147483647) + ) + (i32.sub + (i32.const -2) + (get_local $27) + ) + ) + (block + (if + (f64.ge + (f64.abs + (get_local $13) + ) + (f64.const 9007199254740992) + ) + (block + (if + (i32.and + (get_local $4) + (i32.eq + (get_local $18) + (get_local $5) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (set_local $13 + (f64.mul + (get_local $13) + (f64.const 0.5) + ) + ) + ) + ) + (if + (i32.le_s + (i32.add + (get_local $2) + (i32.const 50) + ) + (get_local $28) + ) + (br_if $do-once72 + (i32.eqz + (i32.and + (f64.ne + (get_local $7) + (f64.const 0) + ) + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 34) + ) + ) + ) + ) + (set_local $7 + (call $_scalbnl + (get_local $13) + (get_local $2) + ) + ) + ) + (br $label$break$L4) + ) + (if + (i32.load + (get_local $11) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 22) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $7 + (f64.const 0) + ) + (br $label$break$L4) + ) + (if + (i32.eqz + (tee_local $0 + (i32.eqz + (i32.load + (get_local $11) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.and + (i32.ne + (get_local $2) + (i32.const 0) + ) + (i32.gt_u + (get_local $1) + (i32.const 3) + ) + ) + (loop $do-in78 + (if + (i32.eqz + (get_local $0) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (br_if $do-in78 + (i32.gt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $7 + (f64.mul + (f64.convert_s/i32 + (get_local $17) + ) + (get_global $inf) + ) + ) + ) + (set_global $STACKTOP + (get_local $24) + ) + (get_local $7) + ) + (func $_malloc (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $13 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $18 + (get_local $13) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $12 + (i32.shr_u + (tee_local $6 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $14 + (i32.shr_u + (tee_local $5 + (if i32 + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $7 + (i32.load + (tee_local $1 + (i32.add + (tee_local $5 + (i32.load + (tee_local $2 + (i32.add + (tee_local $3 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $14) + ) + ) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $7) + ) + (i32.store + (i32.const 17664) + (i32.and + (get_local $6) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store + (get_local $2) + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (tee_local $0 + (i32.load + (i32.const 17672) + ) + ) + ) + (block + (if + (get_local $12) + (block + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (tee_local $2 + (i32.and + (i32.shl + (get_local $12) + (get_local $14) + ) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $8 + (i32.load + (tee_local $7 + (i32.add + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (tee_local $9 + (i32.add + (i32.shl + (tee_local $12 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $2) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + ) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (get_local $8) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (get_local $6) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $12) + ) + (i32.const -1) + ) + ) + ) + (set_local $4 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store + (get_local $2) + (get_local $8) + ) + (set_local $4 + (i32.load + (i32.const 17672) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $9 + (i32.add + (get_local $10) + (get_local $5) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $12) + (i32.const 3) + ) + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $9) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $4) + (block + (set_local $12 + (i32.load + (i32.const 17684) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $3 + (get_local $2) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $2) + (get_local $0) + ) + ) + (set_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $3) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 17672) + (get_local $5) + ) + (i32.store + (i32.const 17684) + (get_local $9) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 17668) + ) + ) + (block + (set_local $3 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $1 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $3) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $3) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $9 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (if + (tee_local $7 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (get_local $4) + ) + ) + (set_local $4 + (get_local $3) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (get_local $7) + (set_local $1 + (get_local $0) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $12 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $9) + (tee_local $10 + (i32.add + (get_local $9) + (get_local $5) + ) + ) + ) + (call $_abort) + ) + (set_local $6 + (i32.load offset=24 + (get_local $9) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $9) + ) + ) + (get_local $9) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in7) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $8 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $9) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $9) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $9) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $4) + ) + (set_local $8 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $9) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $9) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $9) + ) + (i32.store + (get_local $0) + (get_local $8) + ) + (i32.store offset=20 + (get_local $6) + (get_local $8) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $8) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $0 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $9) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $9) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $9) + (i32.or + (tee_local $0 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $9) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $7) + ) + (get_local $7) + ) + (if + (tee_local $0 + (i32.load + (i32.const 17672) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 17684) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $1) + ) + (set_local $2 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17672) + (get_local $7) + ) + (i32.store + (i32.const 17684) + (get_local $10) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $4 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $15 + (i32.load + (i32.const 17668) + ) + ) + (block + (set_local $16 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $4) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $4) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $1 + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (if + (tee_local $3 + (i32.load + (i32.add + (i32.shl + (get_local $16) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (set_local $17 + (i32.shl + (get_local $4) + (if i32 + (i32.eq + (get_local $16) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $16) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $5 + (i32.sub + (tee_local $8 + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + ) + (get_local $4) + ) + ) + (get_local $1) + ) + (if + (i32.eq + (get_local $8) + (get_local $4) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + (br $__rjti$3) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.eqz + (tee_local $5 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (i32.eq + (get_local $5) + (tee_local $3 + (i32.load + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $17) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $5) + ) + ) + (br_if $__rjti$2 + (tee_local $5 + (i32.eqz + (get_local $3) + ) + ) + ) + (set_local $17 + (i32.shl + (get_local $17) + (i32.xor + (get_local $5) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $2) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $2 + (i32.and + (get_local $15) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $16) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $4) + ) + (br $do-once) + ) + ) + (set_local $5 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (get_local $2) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $2 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $2) + (get_local $5) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $5) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + ) + (br_if $__rjti$3 + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (if + (tee_local $5 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $2) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $3) + ) + ) + (if + (get_local $5) + (set_local $0 + (get_local $2) + ) + ) + (if + (tee_local $3 + (i32.load offset=16 + (get_local $2) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $2 + (i32.load offset=20 + (get_local $2) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (if + (get_local $3) + (if + (i32.lt_u + (get_local $2) + (i32.sub + (i32.load + (i32.const 17672) + ) + (get_local $4) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (tee_local $9 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $3) + (tee_local $8 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $10 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $5 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in20) + ) + ) + (if + (tee_local $5 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $9) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $6 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $9) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $5) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $6 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $0) + (get_local $6) + ) + (i32.store offset=20 + (get_local $10) + (get_local $6) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $6) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $0 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $10) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $6) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $2) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (tee_local $0 + (i32.add + (get_local $2) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $2) + ) + (get_local $2) + ) + (set_local $0 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $14 + (get_local $1) + ) + (set_local $12 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $14 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $12 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $8) + ) + (i32.store offset=12 + (get_local $12) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $12) + ) + (i32.store offset=12 + (get_local $8) + (get_local $2) + ) + (br $do-once25) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $5) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 17668) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17668) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $4) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (set_local $5 + (i32.shl + (get_local $2) + (if i32 + (i32.eq + (get_local $5) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $8) + ) + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $4) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 17672) + ) + ) + (get_local $0) + ) + (block + (set_local $3 + (i32.load + (i32.const 17684) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 17684) + (tee_local $1 + (i32.add + (get_local $3) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17672) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $2) + ) + (get_local $2) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 17672) + (i32.const 0) + ) + (i32.store + (i32.const 17684) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 17676) + ) + ) + (get_local $0) + ) + (block + (i32.store + (i32.const 17676) + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17688) + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 17688) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 18136) + ) + ) + (block + (i32.store + (i32.const 18144) + (i32.const 4096) + ) + (i32.store + (i32.const 18140) + (i32.const 4096) + ) + (i32.store + (i32.const 18148) + (i32.const -1) + ) + (i32.store + (i32.const 18152) + (i32.const -1) + ) + (i32.store + (i32.const 18156) + (i32.const 0) + ) + (i32.store + (i32.const 18108) + (i32.const 0) + ) + (i32.store + (get_local $18) + (tee_local $1 + (i32.xor + (i32.and + (get_local $18) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + (i32.store + (i32.const 18136) + (get_local $1) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $8 + (i32.add + (tee_local $1 + (i32.load + (i32.const 18144) + ) + ) + (tee_local $14 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $6 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (i32.const 18104) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 18096) + ) + ) + (get_local $5) + ) + ) + (get_local $2) + ) + (i32.gt_u + (get_local $1) + (get_local $3) + ) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 18108) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L276 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 17688) + ) + ) + ) + ) + (set_local $4 + (i32.const 18112) + ) + (loop $while-in32 + (block $while-out31 + (if + (i32.le_u + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (get_local $2) + ) + (br_if $while-out31 + (i32.gt_u + (i32.add + (get_local $1) + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + (get_local $2) + ) + ) + ) + (br_if $while-in32 + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.and + (i32.sub + (get_local $8) + (i32.load + (i32.const 17676) + ) + ) + (get_local $6) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $2) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $3) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $2) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L276) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $2 + (if i32 + (i32.and + (tee_local $3 + (i32.add + (tee_local $4 + (i32.load + (i32.const 18140) + ) + ) + (i32.const -1) + ) + ) + (tee_local $2 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $2) + ) + (i32.and + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $6 + (i32.add + (tee_local $4 + (i32.load + (i32.const 18096) + ) + ) + (get_local $2) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $2) + (get_local $0) + ) + (i32.lt_u + (get_local $2) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $3 + (i32.load + (i32.const 18104) + ) + ) + (br_if $label$break$L276 + (i32.or + (i32.le_u + (get_local $6) + (get_local $4) + ) + (i32.gt_u + (get_local $6) + (get_local $3) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $3 + (call $_sbrk + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $2) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L276) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $12) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (i32.sub + (get_local $14) + (get_local $1) + ) + (tee_local $2 + (i32.load + (i32.const 18144) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $2) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L276) + ) + (set_local $2 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + ) + (set_local $2 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $3) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $3) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 18108) + (i32.or + (i32.load + (i32.const 18108) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $2 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 18096) + (tee_local $3 + (i32.add + (i32.load + (i32.const 18096) + ) + (get_local $2) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (i32.load + (i32.const 18100) + ) + ) + (i32.store + (i32.const 18100) + (get_local $3) + ) + ) + (block $do-once38 + (if + (tee_local $6 + (i32.load + (i32.const 17688) + ) + ) + (block + (set_local $3 + (i32.const 18112) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $do-in41 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $12 + (i32.load + (get_local $3) + ) + ) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $do-in41 + (tee_local $3 + (i32.load offset=8 + (get_local $3) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $3) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $12) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (set_local $3 + (i32.add + (get_local $6) + (tee_local $1 + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.load + (i32.const 17676) + ) + ) + ) + (i32.store + (i32.const 17688) + (get_local $3) + ) + (i32.store + (i32.const 17676) + (get_local $1) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17692) + (i32.load + (i32.const 18152) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 17680) + ) + ) + ) + (block + (i32.store + (i32.const 17680) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $1) + (get_local $2) + ) + ) + (set_local $3 + (i32.const 18112) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in43 + (if + (i32.eq + (i32.load + (get_local $3) + ) + (get_local $12) + ) + (block + (set_local $5 + (get_local $3) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in43 + (tee_local $3 + (i32.load offset=8 + (get_local $3) + ) + ) + ) + (set_local $4 + (i32.const 18112) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $3) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 18112) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (set_local $11 + (i32.add + (tee_local $8 + (i32.add + (get_local $1) + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $5 + (i32.sub + (i32.sub + (tee_local $7 + (i32.add + (get_local $12) + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (get_local $8) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $7) + (get_local $6) + ) + (block + (i32.store + (i32.const 17676) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17676) + ) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 17688) + (get_local $11) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 17684) + ) + ) + (block + (i32.store + (i32.const 17672) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17672) + ) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 17684) + (get_local $11) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once44) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if i32 + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block i32 + (set_local $12 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L328 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $3 + (i32.load offset=12 + (get_local $7) + ) + ) + (block $do-once47 + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $7) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once47 + (i32.eq + (i32.load offset=12 + (get_local $2) + ) + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L328) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $3) + (get_local $0) + ) + (set_local $19 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (set_local $19 + (get_local $0) + ) + (br $do-once49) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $3) + ) + (i32.store + (get_local $19) + (get_local $2) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $7) + ) + ) + (block $do-once51 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $7) + ) + ) + (get_local $7) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $do-once51) + ) + ) + ) + (loop $while-in54 + (if + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $3) + ) + (br $while-in54) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $3) + ) + (br $while-in54) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $10 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $7) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $3) + ) + (set_local $10 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $7) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $7) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (br_if $do-once55 + (get_local $10) + ) + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L328) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $7) + ) + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store offset=20 + (get_local $6) + (get_local $10) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (get_local $10) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (tee_local $1 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $10) + (get_local $6) + ) + (if + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $10) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $10) + ) + ) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $10) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $10) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $12) + (get_local $5) + ) + ) + (i32.add + (get_local $7) + (get_local $12) + ) + ) + (get_local $7) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $5) + ) + (get_local $5) + ) + (set_local $0 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (block + (set_local $20 + (get_local $1) + ) + (set_local $9 + (get_local $0) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $20 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $20) + (get_local $11) + ) + (i32.store offset=12 + (get_local $9) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $9) + ) + (i32.store offset=12 + (get_local $11) + (get_local $2) + ) + (br $do-once44) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $3 + (block $do-once61 i32 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (block i32 + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + (i32.store offset=28 + (get_local $11) + (get_local $3) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 17668) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17668) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $2) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once44) + ) + ) + (set_local $3 + (i32.shl + (get_local $5) + (if i32 + (i32.eq + (get_local $3) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (block $__rjti$6 + (loop $while-in64 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (br_if $__rjti$6 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $3) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $3 + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in64) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $0) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once44) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $3) + (get_local $11) + ) + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (i32.store offset=12 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $11) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out65 + (i32.gt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in66) + ) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $3) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $10 + (i32.add + (if i32 + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (if i32 + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $5) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (tee_local $9 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (tee_local $4 + (get_local $6) + ) + (get_local $4) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 17688) + (tee_local $12 + (i32.add + (get_local $1) + (tee_local $5 + (if i32 + (i32.and + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $5) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (i32.const 17676) + (tee_local $5 + (i32.sub + (i32.add + (get_local $2) + (i32.const -40) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $12) + (get_local $5) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17692) + (i32.load + (i32.const 18152) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $10) + (i32.load + (i32.const 18112) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.load + (i32.const 18116) + ) + ) + (i32.store offset=8 + (get_local $10) + (i32.load + (i32.const 18120) + ) + ) + (i32.store offset=12 + (get_local $10) + (i32.load + (i32.const 18124) + ) + ) + (i32.store + (i32.const 18112) + (get_local $1) + ) + (i32.store + (i32.const 18116) + (get_local $2) + ) + (i32.store + (i32.const 18124) + (i32.const 0) + ) + (i32.store + (i32.const 18120) + (get_local $10) + ) + (set_local $1 + (i32.add + (get_local $4) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $4) + (get_local $6) + ) + (block + (i32.store + (get_local $5) + (i32.and + (i32.load + (get_local $5) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $4) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $11 + (get_local $2) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $2) + (get_local $1) + ) + ) + (set_local $11 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once38) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $4 + (if i32 + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $1) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $2) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $2) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $2 + (i32.load + (i32.const 17668) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17668) + (i32.or + (get_local $2) + (get_local $1) + ) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $3) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once38) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (if i32 + (i32.eq + (get_local $4) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (block $__rjti$8 + (loop $while-in70 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (br_if $__rjti$8 + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $2) + ) + (br $while-in70) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once38) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $2) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $3 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $3) + ) + ) + (i32.store + (i32.const 17680) + (get_local $1) + ) + ) + (i32.store + (i32.const 18112) + (get_local $1) + ) + (i32.store + (i32.const 18116) + (get_local $2) + ) + (i32.store + (i32.const 18124) + (i32.const 0) + ) + (i32.store + (i32.const 17700) + (i32.load + (i32.const 18136) + ) + ) + (i32.store + (i32.const 17696) + (i32.const -1) + ) + (set_local $4 + (i32.const 0) + ) + (loop $do-in + (i32.store offset=12 + (tee_local $3 + (i32.add + (i32.shl + (get_local $4) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (get_local $3) + ) + (i32.store offset=8 + (get_local $3) + (get_local $3) + ) + (br_if $do-in + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 17688) + (tee_local $3 + (i32.add + (get_local $1) + (tee_local $1 + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (i32.const 17676) + (tee_local $1 + (i32.sub + (i32.add + (get_local $2) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17692) + (i32.load + (i32.const 18152) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 17676) + ) + ) + (get_local $0) + ) + (block + (i32.store + (i32.const 17676) + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17688) + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 17688) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (set_global $STACKTOP + (get_local $13) + ) + (i32.const 0) + ) + (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 f64) + (local $20 f64) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (set_local $21 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $17 + (get_local $25) + ) + (set_local $38 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $32 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $40 + (tee_local $24 + (i32.add + (tee_local $16 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $41 + (i32.add + (get_local $16) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $39 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $45 + (i32.sub + (i32.const 0) + (tee_local $30 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $34 + (i32.add + (tee_local $16 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $16) + (i32.const 11) + ) + ) + (set_local $46 + (i32.sub + (tee_local $31 + (get_local $34) + ) + (get_local $30) + ) + ) + (set_local $47 + (i32.sub + (i32.const -2) + (get_local $30) + ) + ) + (set_local $48 + (i32.add + (get_local $31) + (i32.const 2) + ) + ) + (set_local $50 + (i32.add + (tee_local $49 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $33 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (block $label$break$L345 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $15) + (i32.const -1) + ) + (set_local $15 + (if i32 + (i32.gt_s + (get_local $6) + (i32.sub + (i32.const 2147483647) + (get_local $15) + ) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $6) + (get_local $15) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $11 + (i32.load8_s + (get_local $1) + ) + ) + ) + ) + (set_local $6 + (get_local $1) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $11) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $11 + (get_local $6) + ) + (br $__rjti$1) + ) + (set_local $11 + (get_local $6) + ) + (set_local $5 + (get_local $6) + ) + (br $label$break$L9) + ) + (set_local $11 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (if + (i32.ne + (i32.load8_s offset=1 + (get_local $11) + ) + (i32.const 37) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $label$break$L12) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $5) + (get_local $1) + ) + ) + (if + (get_local $32) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (get_local $6) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $5) + (get_local $1) + ) + (block + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + (set_local $5 + (if i32 + (i32.lt_u + (tee_local $12 + (i32.add + (tee_local $13 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block i32 + (set_local $13 + (i32.load8_s + (tee_local $11 + (if i32 + (tee_local $5 + (i32.eq + (i32.load8_s offset=2 + (get_local $11) + ) + (i32.const 36) + ) + ) + (i32.add + (get_local $11) + (i32.const 3) + ) + (get_local $10) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (set_local $12 + (i32.const -1) + ) + ) + (if i32 + (get_local $5) + (i32.const 1) + (get_local $16) + ) + ) + (block i32 + (set_local $12 + (i32.const -1) + ) + (set_local $11 + (get_local $10) + ) + (get_local $16) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $7 + (i32.shr_s + (i32.shl + (get_local $13) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $16 + (get_local $13) + ) + (set_local $10 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $7) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $13 + (get_local $16) + ) + (set_local $16 + (get_local $10) + ) + (br $label$break$L25) + ) + ) + (set_local $10 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $16) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $10) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $7 + (tee_local $16 + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $13 + (get_local $16) + ) + (set_local $16 + (get_local $10) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $5 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $10 + (i32.add + (i32.load8_s + (tee_local $13 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $11) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $10) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 3) + ) + ) + (set_local $13 + (i32.load + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $13) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + (br $__rjto$0 + (i32.const 1) + ) + ) + (if + (get_local $5) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $11 + (get_local $13) + ) + (set_local $13 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $10 + (i32.load + (tee_local $11 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (set_local $11 + (get_local $13) + ) + (set_local $13 + (get_local $10) + ) + (i32.const 0) + ) + ) + (set_local $16 + (if i32 + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (block i32 + (set_local $10 + (i32.or + (get_local $16) + (i32.const 8192) + ) + ) + (set_local $13 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (get_local $5) + ) + (block i32 + (set_local $10 + (get_local $16) + ) + (get_local $5) + ) + ) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.add + (i32.shr_s + (i32.shl + (get_local $13) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $13 + (i32.const 0) + ) + (loop $while-in8 + (set_local $13 + (i32.add + (i32.mul + (get_local $13) + (i32.const 10) + ) + (get_local $10) + ) + ) + (br_if $while-in8 + (i32.lt_u + (tee_local $10 + (i32.add + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (if + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (get_local $5) + ) + (set_local $13 + (i32.const 0) + ) + ) + ) + ) + ) + (block $label$break$L46 + (if + (i32.eq + (i32.load8_s + (get_local $11) + ) + (i32.const 46) + ) + (block + (if + (i32.ne + (tee_local $5 + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $7) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (get_local $8) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (set_local $11 + (get_local $7) + ) + (br $label$break$L46) + ) + ) + (loop $while-in11 + (set_local $5 + (i32.add + (i32.mul + (get_local $5) + (i32.const 10) + ) + (get_local $7) + ) + ) + (br_if $while-in11 + (i32.lt_u + (tee_local $7 + (i32.add + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br $label$break$L46) + ) + ) + ) + (if + (i32.lt_u + (tee_local $5 + (i32.add + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $11) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (set_local $5 + (i32.load + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $7) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (br $label$break$L46) + ) + ) + ) + (if + (get_local $16) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $11 + (if i32 + (get_local $32) + (block i32 + (set_local $5 + (i32.load + (tee_local $11 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (get_local $7) + ) + (block i32 + (set_local $5 + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + ) + (set_local $5 + (i32.const -1) + ) + ) + ) + (set_local $7 + (get_local $11) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $9 + (i32.add + (i32.load8_s + (get_local $7) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $11 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $9 + (i32.and + (tee_local $14 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $8) + (i32.const 58) + ) + (i32.const 10795) + ) + (get_local $9) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $7 + (get_local $11) + ) + (set_local $8 + (get_local $9) + ) + (br $while-in13) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $14) + (i32.const 255) + ) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $18 + (i32.gt_s + (get_local $12) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $14) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $18) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $18) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $12) + (i32.const 2) + ) + ) + (get_local $9) + ) + (set_local $14 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $12) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $9 + (get_local $17) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $14) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $15 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg + (get_local $17) + (get_local $9) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + ) + (if + (i32.and + (i32.ne + (get_local $8) + (i32.const 0) + ) + (i32.eq + (i32.and + (tee_local $9 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 15) + ) + (i32.const 3) + ) + ) + (set_local $9 + (i32.and + (get_local $9) + (i32.const -33) + ) + ) + ) + (set_local $7 + (i32.and + (get_local $10) + (i32.const -65537) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 8192) + ) + (set_local $10 + (get_local $7) + ) + ) + (block $__rjto$8 + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (get_local $9) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $8) + ) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $1 + (i32.load + (get_local $17) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $15) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $1 + (i32.load + (get_local $17) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $15) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $1 + (i32.or + (get_local $10) + (i32.const 8) + ) + ) + (if + (i32.le_u + (get_local $5) + (i32.const 8) + ) + (set_local $5 + (i32.const 8) + ) + ) + (set_local $9 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $1 + (get_local $10) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $6 + (i32.load + (tee_local $1 + (get_local $17) + ) + ) + ) + ) + (i32.eqz + (tee_local $7 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + (set_local $7 + (get_local $24) + ) + (block + (set_local $1 + (get_local $24) + ) + (loop $while-in32 + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $6) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $6 + (call $_bitshift64Lshr + (get_local $6) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 8) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $1 + (get_local $10) + ) + (if + (i32.le_s + (get_local $5) + (tee_local $10 + (i32.sub + (get_local $40) + (get_local $7) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$8) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $1 + (get_local $10) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $1 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.load offset=4 + (get_local $6) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $7 + (get_local $17) + ) + (tee_local $1 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $1) + (get_local $6) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (tee_local $6 + (get_global $tempRet0) + ) + ) + (set_local $7 + (i32.const 1) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$4) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 2048) + ) + (block + (set_local $7 + (i32.const 1) + ) + (set_local $8 + (i32.const 11276) + ) + (br $__rjti$4) + ) + (block + (set_local $7 + (tee_local $8 + (i32.and + (get_local $10) + (i32.const 1) + ) + ) + ) + (set_local $8 + (if i32 + (get_local $8) + (i32.const 11277) + (i32.const 11275) + ) + ) + (br $__rjti$4) + ) + ) + ) + (set_local $1 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + (set_local $6 + (i32.load offset=4 + (get_local $6) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$4) + ) + (i32.store8 + (get_local $41) + (i32.load + (get_local $17) + ) + ) + (set_local $1 + (get_local $41) + ) + (set_local $10 + (get_local $7) + ) + (set_local $9 + (i32.const 1) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (set_local $6 + (get_local $24) + ) + (br $__rjto$8) + ) + (set_local $6 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (if + (i32.eqz + (tee_local $6 + (i32.load + (get_local $17) + ) + ) + ) + (set_local $6 + (i32.const 13177) + ) + ) + (br $__rjti$5) + ) + (i32.store + (get_local $39) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $17) + (get_local $39) + ) + (set_local $6 + (get_local $39) + ) + (set_local $7 + (i32.const -1) + ) + (br $__rjti$6) + ) + (set_local $6 + (i32.load + (get_local $17) + ) + ) + (if + (get_local $5) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (i32.const 0) + (get_local $10) + ) + (set_local $1 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $19 + (f64.load + (get_local $17) + ) + ) + (i32.store + (get_local $21) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $19) + ) + (set_local $28 + (if i32 + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block i32 + (set_local $19 + (f64.neg + (get_local $19) + ) + ) + (set_local $26 + (i32.const 1) + ) + (i32.const 13184) + ) + (if i32 + (i32.and + (get_local $10) + (i32.const 2048) + ) + (block i32 + (set_local $26 + (i32.const 1) + ) + (i32.const 13187) + ) + (block i32 + (set_local $26 + (tee_local $1 + (i32.and + (get_local $10) + (i32.const 1) + ) + ) + ) + (if i32 + (get_local $1) + (i32.const 13190) + (i32.const 13185) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $19) + ) + (block $do-once49 + (if + (i32.or + (i32.lt_u + (tee_local $1 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block + (if + (tee_local $1 + (f64.ne + (tee_local $20 + (f64.mul + (call $_frexpl + (get_local $19) + (get_local $21) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $21) + (i32.add + (i32.load + (get_local $21) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $23 + (i32.or + (get_local $9) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (if + (tee_local $12 + (i32.and + (get_local $9) + (i32.const 32) + ) + ) + (set_local $28 + (i32.add + (get_local $28) + (i32.const 9) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.gt_u + (get_local $5) + (i32.const 11) + ) + (i32.eqz + (tee_local $1 + (i32.sub + (i32.const 12) + (get_local $5) + ) + ) + ) + ) + ) + (block + (set_local $19 + (f64.const 8) + ) + (loop $while-in54 + (set_local $19 + (f64.mul + (get_local $19) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + (set_local $20 + (if f64 + (i32.eq + (i32.load8_s + (get_local $28) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $19) + (f64.sub + (f64.neg + (get_local $20) + ) + (get_local $19) + ) + ) + ) + (f64.sub + (f64.add + (get_local $20) + (get_local $19) + ) + (get_local $19) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $1 + (call $_fmt_u + (tee_local $1 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load + (get_local $21) + ) + ) + (i32.const 0) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + (get_local $6) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $1 + (get_local $42) + ) + ) + ) + (set_local $8 + (i32.or + (get_local $26) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $1) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $6) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $7 + (i32.add + (get_local $1) + (i32.const -2) + ) + ) + (i32.add + (get_local $9) + (i32.const 15) + ) + ) + (set_local $9 + (i32.lt_s + (get_local $5) + (i32.const 1) + ) + ) + (set_local $14 + (i32.eqz + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $1 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $1) + (i32.or + (i32.load8_u + (i32.add + (tee_local $6 + (i32.trunc_s/f64 + (get_local $20) + ) + ) + (i32.const 11259) + ) + ) + (get_local $12) + ) + ) + (set_local $20 + (f64.mul + (f64.sub + (get_local $20) + (f64.convert_s/i32 + (get_local $6) + ) + ) + (f64.const 16) + ) + ) + (set_local $1 + (block $do-once57 i32 + (if i32 + (i32.eq + (i32.sub + (tee_local $6 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (get_local $30) + ) + (i32.const 1) + ) + (block i32 + (drop + (br_if $do-once57 + (get_local $6) + (i32.and + (get_local $14) + (i32.and + (get_local $9) + (f64.eq + (get_local $20) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 46) + ) + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (get_local $6) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $20) + (f64.const 0) + ) + ) + ) + (set_local $6 + (get_local $7) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $5 + (i32.add + (tee_local $9 + (if i32 + (i32.and + (i32.ne + (get_local $5) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $47) + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.sub + (i32.add + (get_local $48) + (get_local $5) + ) + (get_local $6) + ) + (i32.add + (i32.sub + (get_local $46) + (get_local $6) + ) + (get_local $1) + ) + ) + ) + (get_local $8) + ) + ) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $28) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $13) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $30) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $1) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $9) + (i32.add + (get_local $1) + (tee_local $1 + (i32.sub + (get_local $31) + (get_local $6) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $1) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $5) + (get_local $13) + ) + (set_local $13 + (get_local $5) + ) + ) + (br $do-once49) + ) + ) + (if + (get_local $1) + (block + (i32.store + (get_local $21) + (tee_local $1 + (i32.add + (i32.load + (get_local $21) + ) + (i32.const -28) + ) + ) + ) + (set_local $20 + (f64.mul + (get_local $20) + (f64.const 268435456) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $21) + ) + ) + ) + (set_local $7 + (tee_local $6 + (if i32 + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (get_local $49) + (get_local $50) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $1 + (i32.trunc_s/f64 + (get_local $20) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $20 + (f64.mul + (f64.sub + (get_local $20) + (f64.convert_u/i32 + (get_local $1) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $8 + (i32.load + (get_local $21) + ) + ) + (i32.const 0) + ) + (block + (set_local $1 + (get_local $6) + ) + (loop $while-in62 + (set_local $14 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 29) + ) + (i32.const 29) + (get_local $8) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $12 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $1) + ) + (block + (set_local $8 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $12) + (call $___uremdi3 + (tee_local $8 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $12) + ) + (i32.const 0) + (get_local $14) + ) + (get_global $tempRet0) + (get_local $8) + (i32.const 0) + ) + ) + (tee_local $18 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $8 + (call $___udivdi3 + (get_local $8) + (get_local $18) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $12 + (i32.add + (get_local $12) + (i32.const -4) + ) + ) + (get_local $1) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $8) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + (get_local $8) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $1) + ) + (if + (i32.eqz + (i32.load + (tee_local $8 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $8) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $21) + (tee_local $8 + (i32.sub + (i32.load + (get_local $21) + ) + (get_local $14) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $8) + (i32.const 0) + ) + ) + ) + ) + (set_local $1 + (get_local $6) + ) + ) + (set_local $18 + (if i32 + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 6) + (get_local $5) + ) + ) + (if + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + (block + (set_local $14 + (i32.add + (i32.div_s + (i32.add + (get_local $18) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $27 + (i32.eq + (get_local $23) + (i32.const 102) + ) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (if + (i32.gt_s + (tee_local $8 + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (i32.const 9) + ) + (set_local $8 + (i32.const 9) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $1) + (get_local $5) + ) + (block + (set_local $29 + (i32.add + (i32.shl + (i32.const 1) + (get_local $8) + ) + (i32.const -1) + ) + ) + (set_local $36 + (i32.shr_u + (i32.const 1000000000) + (get_local $8) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + (loop $while-in74 + (i32.store + (get_local $12) + (i32.add + (i32.shr_u + (tee_local $37 + (i32.load + (get_local $12) + ) + ) + (get_local $8) + ) + (get_local $7) + ) + ) + (set_local $7 + (i32.mul + (i32.and + (get_local $37) + (get_local $29) + ) + (get_local $36) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $12 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $7) + ) + ) + (i32.store + (get_local $5) + (get_local $7) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (tee_local $7 + (if i32 + (get_local $27) + (get_local $6) + (get_local $1) + ) + ) + ) + (i32.const 2) + ) + (get_local $14) + ) + (set_local $5 + (i32.add + (get_local $7) + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $21) + (tee_local $8 + (i32.add + (i32.load + (get_local $21) + ) + (get_local $8) + ) + ) + ) + (br_if $while-in70 + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + ) + (set_local $12 + (get_local $5) + ) + ) + ) + (set_local $12 + (get_local $7) + ) + ) + (set_local $27 + (get_local $6) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $1) + (get_local $12) + ) + (block + (set_local $5 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $1) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $8 + (i32.load + (get_local $1) + ) + ) + (i32.const 10) + ) + ) + (set_local $7 + (i32.const 10) + ) + (loop $while-in78 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $8) + (tee_local $7 + (i32.mul + (get_local $7) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (set_local $36 + (i32.eq + (get_local $23) + (i32.const 103) + ) + ) + (set_local $37 + (i32.ne + (get_local $18) + (i32.const 0) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.add + (i32.sub + (get_local $18) + (if i32 + (i32.ne + (get_local $23) + (i32.const 102) + ) + (get_local $5) + (i32.const 0) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (get_local $37) + (get_local $36) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $12) + (get_local $27) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block + (set_local $7 + (i32.add + (i32.add + (get_local $6) + (i32.shl + (i32.div_s + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + (if + (i32.lt_s + (tee_local $14 + (i32.add + (i32.rem_s + (get_local $8) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $8 + (i32.const 10) + ) + (loop $while-in80 + (set_local $8 + (i32.mul + (get_local $8) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $14 + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $8 + (i32.const 10) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $29 + (i32.eq + (i32.add + (get_local $7) + (i32.const 4) + ) + (get_local $12) + ) + ) + (i32.eqz + (tee_local $14 + (i32.rem_u + (tee_local $23 + (i32.load + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + ) + (block + (set_local $20 + (if f64 + (i32.and + (i32.div_u + (get_local $23) + (get_local $8) + ) + (i32.const 1) + ) + (f64.const 9007199254740994) + (f64.const 9007199254740992) + ) + ) + (set_local $19 + (if f64 + (i32.lt_u + (get_local $14) + (tee_local $51 + (i32.div_s + (get_local $8) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (if f64 + (i32.and + (get_local $29) + (i32.eq + (get_local $14) + (get_local $51) + ) + ) + (f64.const 1) + (f64.const 1.5) + ) + ) + ) + (block $do-once83 + (if + (get_local $26) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $28) + ) + (i32.const 45) + ) + ) + (set_local $20 + (f64.neg + (get_local $20) + ) + ) + (set_local $19 + (f64.neg + (get_local $19) + ) + ) + ) + ) + ) + (i32.store + (get_local $7) + (tee_local $14 + (i32.sub + (get_local $23) + (get_local $14) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $20) + (get_local $19) + ) + (get_local $20) + ) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (get_local $14) + (get_local $8) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $7) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $1) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $5 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $1) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $14 + (i32.load + (get_local $1) + ) + ) + (i32.const 10) + ) + ) + (set_local $8 + (i32.const 10) + ) + (loop $while-in88 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $14) + (tee_local $8 + (i32.mul + (get_local $8) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $14 + (get_local $1) + ) + (set_local $8 + (get_local $5) + ) + (if + (i32.le_u + (get_local $12) + (tee_local $1 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + (set_local $1 + (get_local $12) + ) + ) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $8 + (get_local $5) + ) + (set_local $1 + (get_local $12) + ) + ) + ) + (set_local $23 + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $1) + (get_local $14) + ) + (block + (set_local $29 + (i32.const 0) + ) + (set_local $7 + (get_local $1) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + ) + (block + (set_local $29 + (i32.const 1) + ) + (set_local $7 + (get_local $1) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (br $while-in90) + ) + ) + ) + ) + (block $do-once91 + (set_local $12 + (if i32 + (get_local $36) + (block i32 + (set_local $1 + (if i32 + (i32.and + (i32.gt_s + (tee_local $1 + (i32.add + (i32.xor + (get_local $37) + (i32.const 1) + ) + (get_local $18) + ) + ) + (get_local $8) + ) + (i32.gt_s + (get_local $8) + (i32.const -5) + ) + ) + (block i32 + (set_local $5 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (i32.sub + (i32.add + (get_local $1) + (i32.const -1) + ) + (get_local $8) + ) + ) + (block i32 + (set_local $5 + (i32.add + (get_local $9) + (i32.const -2) + ) + ) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + (br_if $do-once91 + (tee_local $12 + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + (block $do-once93 + (if + (get_local $29) + (block + (if + (i32.eqz + (tee_local $12 + (i32.load + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (i32.rem_u + (get_local $12) + (i32.const 10) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $18 + (i32.const 10) + ) + (set_local $9 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (i32.rem_u + (get_local $12) + (tee_local $18 + (i32.mul + (get_local $18) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $9 + (i32.const 9) + ) + ) + ) + (set_local $12 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $7) + (get_local $27) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if i32 + (i32.eq + (i32.or + (get_local $5) + (i32.const 32) + ) + (i32.const 102) + ) + (block i32 + (if + (i32.ge_s + (get_local $1) + (if i32 + (i32.lt_s + (tee_local $9 + (i32.sub + (get_local $12) + (get_local $9) + ) + ) + (i32.const 0) + ) + (tee_local $9 + (i32.const 0) + ) + (get_local $9) + ) + ) + (set_local $1 + (get_local $9) + ) + ) + (i32.const 0) + ) + (block i32 + (if + (i32.ge_s + (get_local $1) + (if i32 + (i32.lt_s + (tee_local $9 + (i32.sub + (i32.add + (get_local $12) + (get_local $8) + ) + (get_local $9) + ) + ) + (i32.const 0) + ) + (tee_local $9 + (i32.const 0) + ) + (get_local $9) + ) + ) + (set_local $1 + (get_local $9) + ) + ) + (i32.const 0) + ) + ) + ) + (block i32 + (set_local $5 + (get_local $9) + ) + (set_local $1 + (get_local $18) + ) + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + ) + ) + (if + (tee_local $27 + (i32.eq + (i32.or + (get_local $5) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block + (set_local $5 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 0) + ) + (get_local $8) + (i32.const 0) + ) + ) + (set_local $8 + (i32.const 0) + ) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $31) + (tee_local $9 + (call $_fmt_u + (if i32 + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + (get_local $23) + (tee_local $23 + (get_local $8) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $23) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $31) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $9) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $9) + (i32.const -2) + ) + ) + (get_local $5) + ) + (set_local $5 + (i32.sub + (get_local $31) + (get_local $8) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $18 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $26) + (i32.const 1) + ) + (get_local $1) + ) + (i32.ne + (tee_local $23 + (i32.or + (get_local $1) + (get_local $12) + ) + ) + (i32.const 0) + ) + ) + (get_local $5) + ) + ) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $28) + (get_local $26) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $13) + (get_local $18) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $27) + (block + (set_local $8 + (tee_local $9 + (if i32 + (i32.gt_u + (get_local $14) + (get_local $6) + ) + (get_local $6) + (get_local $14) + ) + ) + ) + (loop $while-in102 + (set_local $5 + (call $_fmt_u + (i32.load + (get_local $8) + ) + (i32.const 0) + (get_local $33) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $8) + (get_local $9) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $5) + (get_local $33) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.sub + (get_local $5) + (get_local $30) + ) + ) + ) + (loop $while-in106 + (br_if $while-in106 + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.sub + (get_local $43) + (get_local $5) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (get_local $6) + ) + (block + (set_local $8 + (get_local $5) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $23) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 13215) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $1) + (i32.const 0) + ) + (i32.lt_u + (get_local $5) + (get_local $7) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $33) + ) + ) + (get_local $22) + ) + (block + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.sub + (get_local $6) + (get_local $30) + ) + ) + ) + (loop $while-in112 + (br_if $while-in112 + (i32.gt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (if i32 + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (i32.const 9) + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $7) + ) + ) + (block + (set_local $1 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $1 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $1) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (if + (i32.eqz + (get_local $29) + ) + (set_local $7 + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_s + (get_local $1) + (i32.const -1) + ) + (block + (set_local $12 + (i32.eqz + (get_local $12) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $5 + (get_local $14) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $1 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $33) + ) + ) + (get_local $33) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $1 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $5) + (get_local $14) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $12) + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 13215) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $1) + (get_local $22) + ) + ) + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.add + (get_local $1) + (get_local $45) + ) + ) + ) + (loop $while-in118 + (br_if $while-in118 + (i32.gt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $9 + (i32.sub + (get_local $43) + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (if i32 + (i32.gt_s + (get_local $6) + (get_local $9) + ) + (get_local $9) + (get_local $6) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $7) + ) + (i32.gt_s + (tee_local $6 + (i32.sub + (get_local $6) + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $1 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $1) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (i32.sub + (get_local $31) + (get_local $8) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $18) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $18) + (get_local $13) + ) + (set_local $13 + (get_local $18) + ) + ) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $6 + (i32.add + (if i32 + (tee_local $8 + (i32.or + (f64.ne + (get_local $19) + (get_local $19) + ) + (i32.const 0) + ) + ) + (tee_local $26 + (i32.const 0) + ) + (get_local $26) + ) + (i32.const 3) + ) + ) + (get_local $7) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $28) + (get_local $26) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $5 + (i32.ne + (i32.and + (get_local $9) + (i32.const 32) + ) + (i32.const 0) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (if i32 + (get_local $8) + (if i32 + (get_local $5) + (i32.const 13226) + (i32.const 13211) + ) + (if i32 + (get_local $5) + (i32.const 13203) + (i32.const 13207) + ) + ) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $6) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $6) + (get_local $13) + ) + (set_local $13 + (get_local $6) + ) + ) + ) + ) + ) + (set_local $6 + (get_local $13) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $9 + (get_local $5) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (set_local $6 + (get_local $24) + ) + (br $__rjto$8) + ) + (set_local $8 + (i32.and + (get_local $9) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $10 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + ) + (i32.eqz + (tee_local $7 + (i32.load offset=4 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $24) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$8) + ) + (block + (set_local $6 + (get_local $24) + ) + (loop $while-in123 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $10) + (i32.const 15) + ) + (i32.const 11259) + ) + ) + (get_local $8) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $10 + (call $_bitshift64Lshr + (get_local $10) + (get_local $7) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + (if + (i32.or + (i32.eqz + (i32.and + (get_local $1) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $10 + (get_local $17) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $10) + ) + ) + ) + ) + (block + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (br $__rjti$8) + ) + (block + (set_local $7 + (i32.const 2) + ) + (set_local $8 + (i32.add + (i32.shr_s + (get_local $9) + (i32.const 4) + ) + (i32.const 11275) + ) + ) + (br $__rjti$8) + ) + ) + ) + ) + (br $__rjto$8) + ) + (set_local $6 + (call $_fmt_u + (get_local $1) + (get_local $6) + (get_local $24) + ) + ) + (set_local $1 + (get_local $10) + ) + (br $__rjti$8) + ) + (set_local $1 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (set_local $9 + (if i32 + (tee_local $14 + (i32.eqz + (tee_local $12 + (call $_memchr + (get_local $6) + (i32.const 0) + (get_local $5) + ) + ) + ) + ) + (get_local $5) + (i32.sub + (get_local $12) + (get_local $6) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 11275) + ) + (set_local $6 + (if i32 + (get_local $14) + (i32.add + (get_local $6) + (get_local $5) + ) + (get_local $12) + ) + ) + (br $__rjto$8) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $8) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $5 + (call $_wctomb + (get_local $38) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $5) + (i32.sub + (get_local $7) + (get_local $1) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (tee_local $1 + (i32.add + (get_local $5) + (get_local $1) + ) + ) + ) + (block + (set_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (br $while-in125) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $1) + (get_local $10) + ) + (if + (get_local $1) + (block + (set_local $5 + (i32.const 0) + ) + (loop $while-in127 + (br_if $__rjti$7 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $__rjti$7 + (i32.gt_s + (tee_local $5 + (i32.add + (tee_local $7 + (call $_wctomb + (get_local $38) + (get_local $7) + ) + ) + (get_local $5) + ) + ) + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $38) + (get_local $7) + (get_local $0) + ) + ) + ) + (br_if $__rjti$7 + (i32.ge_u + (get_local $5) + (get_local $1) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $while-in127) + ) + ) + (block + (set_local $1 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + (br $__rjto$8) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $1) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (set_local $6 + (if i32 + (i32.gt_s + (get_local $13) + (get_local $1) + ) + (get_local $13) + (get_local $1) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $10 + (if i32 + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (i32.and + (get_local $1) + (i32.const -65537) + ) + (get_local $1) + ) + ) + (set_local $6 + (if i32 + (i32.or + (get_local $5) + (tee_local $9 + (i32.or + (i32.ne + (i32.load + (tee_local $1 + (get_local $17) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + ) + (block i32 + (set_local $1 + (get_local $6) + ) + (set_local $9 + (if i32 + (i32.gt_s + (get_local $5) + (tee_local $6 + (i32.add + (i32.xor + (get_local $9) + (i32.const 1) + ) + (i32.sub + (get_local $40) + (get_local $6) + ) + ) + ) + ) + (get_local $5) + (get_local $6) + ) + ) + (get_local $24) + ) + (block i32 + (set_local $1 + (get_local $24) + ) + (set_local $9 + (i32.const 0) + ) + (get_local $24) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (if i32 + (i32.lt_s + (get_local $13) + (tee_local $5 + (i32.add + (get_local $7) + (if i32 + (i32.lt_s + (get_local $9) + (tee_local $12 + (i32.sub + (get_local $6) + (get_local $1) + ) + ) + ) + (tee_local $9 + (get_local $12) + ) + (get_local $9) + ) + ) + ) + ) + (get_local $5) + (get_local $13) + ) + ) + (get_local $5) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $7) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $9) + (get_local $12) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L345) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $16) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $15 + (i32.const 1) + ) + (br $label$break$L345) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L345) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $15 + (i32.const 1) + ) + ) + (set_local $15 + (i32.const 1) + ) + ) + ) + (set_local $15 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $15) + ) + (func $__ZNSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIwEERNS_10unique_ptrIwPFvPvEEERPwSM_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (result i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (set_local $16 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 512) + ) + ) + (set_local $29 + (i32.add + (get_local $16) + (i32.const 500) + ) + ) + (set_local $37 + (i32.add + (get_local $16) + (i32.const 72) + ) + ) + (set_local $38 + (i32.add + (get_local $16) + (i32.const 68) + ) + ) + (set_local $15 + (i32.add + (get_local $16) + (i32.const 44) + ) + ) + (set_local $17 + (i32.add + (get_local $16) + (i32.const 32) + ) + ) + (set_local $18 + (i32.add + (get_local $16) + (i32.const 20) + ) + ) + (set_local $19 + (i32.add + (get_local $16) + (i32.const 8) + ) + ) + (set_local $32 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + (set_local $33 + (get_local $16) + ) + (i32.store + (tee_local $30 + (i32.add + (get_local $16) + (i32.const 496) + ) + ) + (get_local $10) + ) + (i32.store + (tee_local $23 + (i32.add + (get_local $16) + (i32.const 88) + ) + ) + (tee_local $10 + (i32.add + (get_local $16) + (i32.const 96) + ) + ) + ) + (i32.store + (tee_local $40 + (i32.add + (get_local $23) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $24 + (i32.add + (get_local $16) + (i32.const 80) + ) + ) + (get_local $10) + ) + (i32.store + (tee_local $31 + (i32.add + (get_local $16) + (i32.const 76) + ) + ) + (i32.add + (get_local $10) + (i32.const 400) + ) + ) + (i32.store + (tee_local $22 + (i32.add + (get_local $16) + (i32.const 56) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $22) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $22) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $22) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $15) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $15) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $15) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $17) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $17) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $17) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.store + (get_local $18) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $18) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $18) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (i32.store + (get_local $19) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $19) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $19) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $19) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__211__money_getIwE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_SJ_Ri + (get_local $2) + (get_local $3) + (get_local $29) + (get_local $37) + (get_local $38) + (get_local $22) + (get_local $15) + (get_local $17) + (get_local $18) + (get_local $32) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $8) + ) + ) + (set_local $25 + (i32.add + (get_local $17) + (i32.const 11) + ) + ) + (set_local $34 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (set_local $26 + (i32.add + (get_local $18) + (i32.const 11) + ) + ) + (set_local $35 + (i32.add + (get_local $18) + (i32.const 4) + ) + ) + (set_local $39 + (i32.ne + (i32.and + (get_local $4) + (i32.const 512) + ) + (i32.const 0) + ) + ) + (set_local $27 + (i32.add + (get_local $15) + (i32.const 11) + ) + ) + (set_local $36 + (i32.add + (get_local $15) + (i32.const 4) + ) + ) + (set_local $41 + (i32.add + (get_local $19) + (i32.const 11) + ) + ) + (set_local $42 + (i32.add + (get_local $19) + (i32.const 4) + ) + ) + (set_local $43 + (i32.add + (get_local $29) + (i32.const 3) + ) + ) + (set_local $44 + (i32.add + (get_local $22) + (i32.const 11) + ) + ) + (set_local $45 + (i32.add + (get_local $22) + (i32.const 4) + ) + ) + (set_local $2 + (get_local $10) + ) + (set_local $20 + (i32.const 0) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $0 + (block $label$break$L315 i32 + (block $__rjti$15 + (block $__rjti$14 + (block $__rjti$13 + (block $__rjti$12 + (block $__rjti$11 + (block $__rjti$10 + (block $__rjti$9 + (loop $label$continue$L21 + (if + (i32.ge_u + (get_local $20) + (i32.const 4) + ) + (block + (set_local $3 + (get_local $2) + ) + (br $__rjti$15) + ) + ) + (set_local $10 + (if i32 + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $10 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$6 + (block $__rjti$6 + (br_if $__rjti$6 + (i32.eqz + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $11 + (if i32 + (i32.eq + (tee_local $11 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$6) + ) + (if + (i32.eqz + (get_local $10) + ) + (block + (set_local $3 + (get_local $2) + ) + (br $__rjti$15) + ) + ) + ) + (br $__rjto$6) + ) + (if + (get_local $10) + (block + (set_local $3 + (get_local $2) + ) + (br $__rjti$15) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (block $label$break$L280 + (block $__rjti$7 + (block $switch-default + (block $switch-case38 + (block $switch-case22 + (block $switch-case12 + (block $switch-case11 + (block $switch-case + (br_table $switch-case11 $switch-case $switch-case22 $switch-case12 $switch-case38 $switch-default + (i32.load8_s + (i32.add + (get_local $29) + (get_local $20) + ) + ) + ) + ) + (if + (i32.eq + (get_local $20) + (i32.const 3) + ) + (set_local $3 + (get_local $4) + ) + (block + (br_if $__rjti$9 + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $7) + (i32.const 8192) + (tee_local $10 + (if i32 + (i32.eq + (tee_local $11 + (i32.load offset=12 + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $7) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw + (get_local $19) + (tee_local $10 + (if i32 + (i32.eq + (tee_local $11 + (i32.load + (tee_local $12 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (block i32 + (i32.store + (get_local $12) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + ) + ) + (set_local $10 + (get_local $3) + ) + (br $__rjti$7) + ) + ) + (br $label$break$L280) + ) + (if + (i32.eq + (get_local $20) + (i32.const 3) + ) + (set_local $3 + (get_local $4) + ) + (block + (set_local $10 + (get_local $3) + ) + (br $__rjti$7) + ) + ) + (br $label$break$L280) + ) + (set_local $3 + (if i32 + (i32.eq + (tee_local $14 + (if i32 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (get_local $25) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + ) + (i32.sub + (i32.const 0) + (tee_local $21 + (if i32 + (i32.lt_s + (tee_local $10 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $35) + ) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + ) + ) + ) + (get_local $4) + (block i32 + (set_local $13 + (i32.eq + (tee_local $11 + (i32.load offset=12 + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + ) + ) + (tee_local $12 + (i32.load offset=16 + (get_local $10) + ) + ) + ) + ) + (if + (i32.or + (tee_local $14 + (i32.eqz + (get_local $14) + ) + ) + (i32.eqz + (get_local $21) + ) + ) + (block + (set_local $3 + (if i32 + (get_local $13) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + (if + (get_local $14) + (block + (if + (i32.ne + (get_local $3) + (i32.load + (if i32 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $18) + ) + (get_local $18) + ) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + ) + (if + (i32.eq + (tee_local $12 + (i32.load + (tee_local $11 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $3 + (i32.load8_s + (get_local $26) + ) + ) + ) + (i32.store + (get_local $11) + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (set_local $3 + (if i32 + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $35) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (get_local $18) + (get_local $4) + ) + ) + (br $label$break$L280) + ) + ) + (if + (i32.ne + (get_local $3) + (i32.load + (if i32 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (get_local $25) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $17) + ) + (get_local $17) + ) + ) + ) + (block + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + ) + (if + (i32.eq + (tee_local $12 + (i32.load + (tee_local $11 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $3 + (i32.load8_s + (get_local $25) + ) + ) + ) + (i32.store + (get_local $11) + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + ) + (set_local $3 + (if i32 + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (get_local $17) + (get_local $4) + ) + ) + (br $label$break$L280) + ) + ) + (if + (get_local $13) + (block + (set_local $13 + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $3 + (i32.load8_s + (get_local $25) + ) + ) + (set_local $10 + (tee_local $12 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $11 + (i32.load offset=12 + (get_local $12) + ) + ) + (set_local $12 + (i32.load offset=16 + (get_local $12) + ) + ) + ) + (set_local $13 + (i32.load + (get_local $11) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $12 + (i32.eq + (get_local $11) + (get_local $12) + ) + ) + (if + (i32.eq + (get_local $13) + (i32.load + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $17) + ) + (get_local $17) + ) + ) + ) + (block + (if + (get_local $12) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $3 + (i32.load8_s + (get_local $25) + ) + ) + ) + (i32.store + (get_local $14) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + ) + (set_local $3 + (if i32 + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (get_local $17) + (get_local $4) + ) + ) + (br $label$break$L280) + ) + ) + (br_if $__rjti$10 + (i32.ne + (tee_local $3 + (if i32 + (get_local $12) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + (i32.load + (if i32 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $18) + ) + (get_local $18) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $12 + (i32.load + (tee_local $11 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $3 + (i32.load8_s + (get_local $26) + ) + ) + ) + (i32.store + (get_local $11) + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (if i32 + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $3) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $35) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (get_local $18) + (get_local $4) + ) + ) + ) + ) + (br $label$break$L280) + ) + (if + (i32.eqz + (i32.or + (i32.lt_u + (get_local $20) + (i32.const 2) + ) + (i32.ne + (get_local $4) + (i32.const 0) + ) + ) + ) + (if + (i32.eqz + (i32.or + (get_local $39) + (i32.and + (i32.eq + (get_local $20) + (i32.const 2) + ) + (i32.ne + (i32.load8_s + (get_local $43) + ) + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L280) + ) + ) + ) + (set_local $13 + (i32.load + (get_local $15) + ) + ) + (set_local $11 + (if i32 + (i32.lt_s + (tee_local $12 + (i32.load8_s + (get_local $27) + ) + ) + (i32.const 0) + ) + (get_local $13) + (get_local $15) + ) + ) + (block $label$break$L107 + (if + (get_local $20) + (if + (i32.lt_s + (i32.load8_u + (i32.add + (get_local $29) + (i32.add + (get_local $20) + (i32.const -1) + ) + ) + ) + (i32.const 2) + ) + (block + (set_local $10 + (get_local $11) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (tee_local $11 + (get_local $10) + ) + (i32.add + (if i32 + (tee_local $14 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (get_local $13) + (get_local $15) + ) + (i32.shl + (if i32 + (get_local $14) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $11 + (get_local $10) + ) + (br $while-out14) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $7) + (i32.const 8192) + (i32.load + (get_local $11) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $7) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (set_local $12 + (i32.load8_s + (get_local $27) + ) + ) + (set_local $13 + (i32.load + (get_local $15) + ) + ) + (set_local $10 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (br $while-in15) + ) + ) + (br $__rjto$0) + ) + (set_local $12 + (i32.load8_s + (get_local $27) + ) + ) + (set_local $13 + (i32.load + (get_local $15) + ) + ) + (set_local $11 + (get_local $10) + ) + ) + (if + (i32.gt_u + (tee_local $21 + (i32.shr_s + (i32.sub + (get_local $11) + (tee_local $14 + (tee_local $10 + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (get_local $13) + (get_local $15) + ) + ) + ) + ) + (i32.const 2) + ) + ) + (tee_local $28 + (if i32 + (tee_local $46 + (i32.lt_s + (tee_local $28 + (i32.load8_s + (get_local $41) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $42) + ) + (i32.and + (get_local $28) + (i32.const 255) + ) + ) + ) + ) + (block + (set_local $10 + (get_local $3) + ) + (set_local $11 + (get_local $14) + ) + ) + (block + (set_local $21 + (i32.add + (tee_local $28 + (i32.add + (if i32 + (get_local $46) + (i32.load + (get_local $19) + ) + (get_local $19) + ) + (i32.shl + (get_local $28) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.sub + (i32.const 0) + (get_local $21) + ) + (i32.const 2) + ) + ) + ) + (loop $while-in17 + (if + (i32.eq + (get_local $21) + (get_local $28) + ) + (block + (set_local $10 + (get_local $3) + ) + (br $label$break$L107) + ) + ) + (if + (i32.ne + (i32.load + (get_local $21) + ) + (i32.load + (get_local $10) + ) + ) + (block + (set_local $10 + (get_local $3) + ) + (set_local $11 + (get_local $14) + ) + (br $label$break$L107) + ) + (block + (set_local $10 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $21 + (i32.add + (get_local $21) + (i32.const 4) + ) + ) + (br $while-in17) + ) + ) + ) + ) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + (set_local $10 + (get_local $3) + ) + ) + ) + (loop $label$continue$L121 + (block $label$break$L121 + (if + (i32.eq + (get_local $11) + (tee_local $12 + (i32.add + (if i32 + (tee_local $14 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $12) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (get_local $13) + (get_local $15) + ) + (i32.shl + (if i32 + (get_local $14) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (block + (set_local $11 + (get_local $12) + ) + (br $label$break$L121) + ) + ) + (set_local $12 + (if i32 + (tee_local $12 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $12 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $12) + ) + ) + (i32.load offset=16 + (get_local $12) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $12) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $12) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $3) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$1) + ) + (if + (i32.xor + (get_local $12) + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $14 + (get_local $10) + ) + ) + (br $label$break$L121) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (br $__rjti$1) + ) + ) + (br $__rjto$1) + ) + (br_if $label$break$L121 + (get_local $12) + ) + (set_local $14 + (i32.const 0) + ) + ) + (br_if $label$break$L121 + (i32.ne + (tee_local $10 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.load + (get_local $11) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (i32.load + (tee_local $12 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $12) + (i32.add + (get_local $13) + (i32.const 4) + ) + ) + ) + (set_local $10 + (get_local $3) + ) + (set_local $12 + (i32.load8_s + (get_local $27) + ) + ) + (set_local $13 + (i32.load + (get_local $15) + ) + ) + (set_local $3 + (get_local $14) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (br $label$continue$L121) + ) + ) + (if + (get_local $39) + (if + (i32.eq + (get_local $11) + (i32.add + (if i32 + (tee_local $10 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (get_local $27) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $15) + ) + (get_local $15) + ) + (i32.shl + (if i32 + (get_local $10) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjti$11) + ) + (set_local $3 + (get_local $4) + ) + ) + (br $label$break$L280) + ) + (set_local $14 + (i32.load + (get_local $38) + ) + ) + (set_local $10 + (get_local $3) + ) + (set_local $11 + (get_local $3) + ) + (set_local $3 + (i32.const 0) + ) + (loop $label$continue$L158 + (block $label$break$L158 + (set_local $12 + (if i32 + (tee_local $12 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $12 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $12) + ) + ) + (i32.load offset=16 + (get_local $12) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $12) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $12) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (br_if $__rjti$2 + (i32.eqz + (get_local $11) + ) + ) + (if + (i32.eq + (tee_local $11 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $11) + ) + ) + (i32.load offset=16 + (get_local $11) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $11) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $11) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (br $__rjti$2) + ) + (if + (i32.xor + (get_local $12) + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $11 + (get_local $10) + ) + (set_local $12 + (get_local $10) + ) + ) + (br $label$break$L158) + ) + ) + (br $__rjto$2) + ) + (br_if $label$break$L158 + (get_local $12) + ) + (set_local $11 + (get_local $10) + ) + (set_local $12 + (i32.const 0) + ) + ) + (set_local $3 + (if i32 + (call_indirect $FUNCSIG$iiii + (get_local $7) + (i32.const 2048) + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $7) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (block i32 + (if + (i32.eq + (tee_local $10 + (i32.load + (get_local $9) + ) + ) + (i32.load + (get_local $30) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $8) + (get_local $9) + (get_local $30) + ) + (set_local $10 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (i32.store + (get_local $10) + (get_local $13) + ) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (block i32 + (set_local $10 + (i32.load8_s + (get_local $44) + ) + ) + (if + (i32.eqz + (i32.and + (i32.eq + (get_local $13) + (get_local $14) + ) + (if i32 + (get_local $3) + (i32.ne + (if i32 + (i32.lt_s + (get_local $10) + (i32.const 0) + ) + (i32.load + (get_local $45) + ) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $10 + (get_local $11) + ) + (br $label$break$L158) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (get_local $31) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $23) + (get_local $24) + (get_local $31) + ) + (set_local $2 + (i32.load + (get_local $24) + ) + ) + ) + ) + (i32.store + (get_local $24) + (tee_local $10 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $3) + ) + (set_local $2 + (get_local $10) + ) + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (tee_local $21 + (i32.load + (tee_local $13 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $10 + (get_local $11) + ) + (set_local $11 + (get_local $12) + ) + (br $label$continue$L158) + ) + (block + (i32.store + (get_local $13) + (i32.add + (get_local $21) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $11) + ) + (set_local $11 + (get_local $12) + ) + (br $label$continue$L158) + ) + ) + ) + ) + (if + (if i32 + (get_local $3) + (i32.ne + (i32.load + (get_local $23) + ) + (get_local $2) + ) + (i32.const 0) + ) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (get_local $31) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $23) + (get_local $24) + (get_local $31) + ) + (set_local $2 + (i32.load + (get_local $24) + ) + ) + ) + ) + (i32.store + (get_local $24) + (tee_local $12 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $3) + ) + ) + (set_local $12 + (get_local $2) + ) + ) + (block $label$break$L207 + (if + (i32.gt_s + (tee_local $11 + (i32.load + (get_local $32) + ) + ) + (i32.const 0) + ) + (block + (set_local $2 + (if i32 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $2 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $2) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$4 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $10) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$4) + ) + (if + (get_local $2) + (set_local $3 + (get_local $10) + ) + (br $__rjti$12) + ) + ) + (br $__rjto$4) + ) + (br_if $__rjti$12 + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + ) + (br_if $__rjti$12 + (i32.ne + (tee_local $2 + (if i32 + (i32.eq + (tee_local $10 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.load + (get_local $37) + ) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $10 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (block i32 + (drop + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $10 + (get_local $11) + ) + (get_local $3) + ) + (block i32 + (i32.store + (get_local $10) + (i32.add + (get_local $13) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $11) + ) + (get_local $3) + ) + ) + ) + (loop $while-in33 + (br_if $label$break$L207 + (i32.le_s + (get_local $10) + (i32.const 0) + ) + ) + (set_local $11 + (if i32 + (tee_local $11 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $11 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $11) + ) + ) + (i32.load offset=16 + (get_local $11) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $11) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $11) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (br_if $__rjti$3 + (i32.eqz + (get_local $3) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (br $__rjti$3) + ) + (if + (i32.xor + (get_local $11) + (i32.eqz + (get_local $2) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $11 + (get_local $2) + ) + ) + (br $__rjti$13) + ) + ) + (br $__rjto$3) + ) + (br_if $__rjti$13 + (get_local $11) + ) + (set_local $3 + (get_local $2) + ) + (set_local $11 + (i32.const 0) + ) + ) + (br_if $__rjti$13 + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $7) + (i32.const 2048) + (tee_local $2 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $7) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $9) + ) + (i32.load + (get_local $30) + ) + ) + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $8) + (get_local $9) + (get_local $30) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (tee_local $13 + (i32.load + (get_local $9) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $13) + (get_local $2) + ) + (i32.store + (get_local $32) + (tee_local $10 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $14 + (i32.load + (tee_local $13 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $11) + ) + (br $while-in33) + ) + (block + (i32.store + (get_local $13) + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $11) + ) + (br $while-in33) + ) + ) + ) + ) + ) + ) + (br_if $__rjti$14 + (i32.eq + (i32.load + (get_local $9) + ) + (i32.load + (get_local $8) + ) + ) + ) + (set_local $2 + (get_local $12) + ) + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + (loop $while-in41 + (set_local $11 + (if i32 + (tee_local $11 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $11 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (get_local $11) + ) + ) + (i32.load offset=16 + (get_local $11) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $11) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $11) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$5 + (block $__rjti$5 + (if + (get_local $3) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$5) + ) + (if + (i32.xor + (get_local $11) + (i32.eqz + (get_local $10) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $11 + (get_local $10) + ) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (br $__rjti$5) + ) + ) + (br $__rjto$5) + ) + (if + (get_local $11) + (block + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + (set_local $11 + (i32.const 0) + ) + ) + ) + (if + (call_indirect $FUNCSIG$iiii + (get_local $7) + (i32.const 8192) + (tee_local $10 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $7) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (block + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw + (get_local $19) + (tee_local $10 + (if i32 + (i32.eq + (tee_local $12 + (i32.load + (tee_local $13 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (block i32 + (i32.store + (get_local $13) + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + ) + ) + (set_local $10 + (get_local $3) + ) + (set_local $3 + (get_local $11) + ) + (br $while-in41) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $label$break$L280) + ) + ) + ) + ) + (set_local $20 + (i32.add + (get_local $20) + (i32.const 1) + ) + ) + (set_local $4 + (get_local $3) + ) + (br $label$continue$L21) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + (block $label$break$L317 + (if + (get_local $4) + (block + (set_local $8 + (i32.add + (get_local $4) + (i32.const 11) + ) + ) + (set_local $9 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (set_local $2 + (i32.const 1) + ) + (loop $label$continue$L319 + (block $label$break$L319 + (br_if $label$break$L317 + (i32.ge_u + (get_local $2) + (tee_local $6 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (get_local $8) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + (set_local $6 + (if i32 + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $7) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$8 + (block $__rjti$8 + (br_if $__rjti$8 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $1) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $7 + (if i32 + (i32.eq + (tee_local $10 + (i32.load offset=12 + (get_local $7) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$8) + ) + (br_if $label$break$L319 + (i32.eqz + (get_local $6) + ) + ) + ) + (br $__rjto$8) + ) + (br_if $label$break$L319 + (get_local $6) + ) + ) + (br_if $label$break$L319 + (i32.ne + (tee_local $7 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $7) + ) + ) + ) + (i32.load + (i32.add + (tee_local $6 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $8) + ) + (i32.const 0) + ) + (i32.load + (get_local $4) + ) + (get_local $4) + ) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (if + (i32.eq + (tee_local $10 + (i32.load + (tee_local $7 + (i32.add + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L319) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (br $label$continue$L319) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L315 + (i32.const 0) + ) + ) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (i32.load + (get_local $23) + ) + ) + (get_local $3) + ) + (i32.const 1) + (block i32 + (i32.store + (get_local $33) + (i32.const 0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $22) + (get_local $0) + (get_local $3) + (get_local $33) + ) + (if i32 + (i32.load + (get_local $33) + ) + (block i32 + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $19) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $22) + ) + (set_local $1 + (i32.load + (get_local $23) + ) + ) + (i32.store + (get_local $23) + (i32.const 0) + ) + (if + (get_local $1) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $40) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $16) + ) + (get_local $0) + ) + (func $__ZNSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIcEERNS_10unique_ptrIcPFvPvEEERPcSM_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (result i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (set_local $14 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 512) + ) + ) + (set_local $28 + (i32.add + (get_local $14) + (i32.const 500) + ) + ) + (set_local $38 + (i32.add + (get_local $14) + (i32.const 497) + ) + ) + (set_local $39 + (i32.add + (get_local $14) + (i32.const 496) + ) + ) + (set_local $15 + (i32.add + (get_local $14) + (i32.const 44) + ) + ) + (set_local $16 + (i32.add + (get_local $14) + (i32.const 32) + ) + ) + (set_local $17 + (i32.add + (get_local $14) + (i32.const 20) + ) + ) + (set_local $18 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + (set_local $31 + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + (set_local $32 + (get_local $14) + ) + (i32.store + (tee_local $29 + (i32.add + (get_local $14) + (i32.const 88) + ) + ) + (get_local $10) + ) + (i32.store + (tee_local $22 + (i32.add + (get_local $14) + (i32.const 80) + ) + ) + (tee_local $10 + (i32.add + (get_local $14) + (i32.const 96) + ) + ) + ) + (i32.store + (tee_local $41 + (i32.add + (get_local $22) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $24 + (i32.add + (get_local $14) + (i32.const 72) + ) + ) + (get_local $10) + ) + (i32.store + (tee_local $30 + (i32.add + (get_local $14) + (i32.const 68) + ) + ) + (i32.add + (get_local $10) + (i32.const 400) + ) + ) + (i32.store + (tee_local $21 + (i32.add + (get_local $14) + (i32.const 56) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $21) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $21) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $21) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $15) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $15) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $15) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $16) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $16) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $16) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $16) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.store + (get_local $17) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $17) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $17) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (i32.store + (get_local $18) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $18) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $18) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $11) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__211__money_getIcE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_SF_Ri + (get_local $2) + (get_local $3) + (get_local $28) + (get_local $38) + (get_local $39) + (get_local $21) + (get_local $15) + (get_local $16) + (get_local $17) + (get_local $31) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $8) + ) + ) + (set_local $25 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $26 + (i32.add + (get_local $16) + (i32.const 11) + ) + ) + (set_local $33 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + (set_local $27 + (i32.add + (get_local $17) + (i32.const 11) + ) + ) + (set_local $34 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (set_local $40 + (i32.ne + (i32.and + (get_local $4) + (i32.const 512) + ) + (i32.const 0) + ) + ) + (set_local $35 + (i32.add + (get_local $15) + (i32.const 11) + ) + ) + (set_local $36 + (i32.add + (get_local $15) + (i32.const 4) + ) + ) + (set_local $42 + (i32.add + (get_local $18) + (i32.const 11) + ) + ) + (set_local $43 + (i32.add + (get_local $18) + (i32.const 4) + ) + ) + (set_local $44 + (i32.add + (get_local $28) + (i32.const 3) + ) + ) + (set_local $45 + (i32.add + (get_local $21) + (i32.const 11) + ) + ) + (set_local $46 + (i32.add + (get_local $21) + (i32.const 4) + ) + ) + (set_local $2 + (get_local $10) + ) + (set_local $20 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $0 + (block $label$break$L294 i32 + (block $__rjti$15 + (block $__rjti$14 + (block $__rjti$13 + (block $__rjti$12 + (block $__rjti$11 + (block $__rjti$10 + (block $__rjti$9 + (loop $label$continue$L21 + (br_if $__rjti$15 + (i32.ge_u + (get_local $20) + (i32.const 4) + ) + ) + (if + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (set_local $4 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.const 0) + ) + ) + (set_local $7 + (i32.eqz + (get_local $4) + ) + ) + (block $__rjto$6 + (block $__rjti$6 + (br_if $__rjti$6 + (i32.eqz + (tee_local $4 + (i32.load + (get_local $1) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (get_local $7) + (br $__rjto$6) + (br $__rjti$15) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$6) + ) + (br_if $__rjti$15 + (i32.eqz + (get_local $7) + ) + ) + ) + (br $__rjto$6) + ) + (br_if $__rjti$15 + (get_local $7) + ) + (set_local $4 + (i32.const 0) + ) + ) + (block $label$break$L262 + (block $__rjti$7 + (block $switch-default + (block $switch-case38 + (block $switch-case22 + (block $switch-case12 + (block $switch-case11 + (block $switch-case + (br_table $switch-case11 $switch-case $switch-case22 $switch-case12 $switch-case38 $switch-default + (i32.load8_s + (i32.add + (get_local $28) + (get_local $20) + ) + ) + ) + ) + (if + (i32.ne + (get_local $20) + (i32.const 3) + ) + (block + (br_if $__rjti$9 + (i32.le_s + (i32.shr_s + (i32.shl + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $10 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $10) + ) + ) + ) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $25) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $18) + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $10 + (i32.load + (tee_local $11 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (block i32 + (i32.store + (get_local $11) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $10) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (set_local $7 + (get_local $4) + ) + (br $__rjti$7) + ) + ) + (br $label$break$L262) + ) + (if + (i32.ne + (get_local $20) + (i32.const 3) + ) + (block + (set_local $7 + (get_local $4) + ) + (br $__rjti$7) + ) + ) + (br $label$break$L262) + ) + (if + (i32.ne + (tee_local $13 + (if i32 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $33) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (i32.sub + (i32.const 0) + (tee_local $19 + (if i32 + (i32.lt_s + (tee_local $7 + (i32.load8_s + (get_local $27) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (set_local $12 + (i32.eq + (tee_local $10 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (tee_local $11 + (i32.load offset=16 + (get_local $7) + ) + ) + ) + ) + (if + (i32.or + (tee_local $13 + (i32.eqz + (get_local $13) + ) + ) + (i32.eqz + (get_local $19) + ) + ) + (block + (set_local $4 + (i32.and + (tee_local $4 + (if i32 + (get_local $12) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $10) + ) + ) + ) + (i32.const 255) + ) + ) + (if + (get_local $13) + (block + (br_if $label$break$L262 + (i32.ne + (i32.and + (get_local $4) + (i32.const 255) + ) + (i32.load8_u + (if i32 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $27) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $17) + ) + (get_local $17) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $11 + (i32.load + (tee_local $10 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (i32.load8_s + (get_local $27) + ) + ) + ) + (i32.store + (get_local $10) + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (if + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (set_local $3 + (get_local $17) + ) + ) + (br $label$break$L262) + ) + ) + (if + (i32.ne + (i32.and + (get_local $4) + (i32.const 255) + ) + (i32.load8_u + (if i32 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $16) + ) + (get_local $16) + ) + ) + ) + (block + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (br $label$break$L262) + ) + ) + (if + (i32.eq + (tee_local $11 + (i32.load + (tee_local $10 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (i32.load8_s + (get_local $26) + ) + ) + ) + (i32.store + (get_local $10) + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (if + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $33) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (set_local $3 + (get_local $16) + ) + ) + (br $label$break$L262) + ) + ) + (if + (get_local $12) + (block + (set_local $12 + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (i32.load8_s + (get_local $26) + ) + ) + (set_local $7 + (tee_local $11 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $10 + (i32.load offset=12 + (get_local $11) + ) + ) + (set_local $11 + (i32.load offset=16 + (get_local $11) + ) + ) + ) + (set_local $12 + (i32.load8_u + (get_local $10) + ) + ) + ) + (set_local $13 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (set_local $11 + (i32.eq + (get_local $10) + (get_local $11) + ) + ) + (if + (i32.eq + (i32.and + (get_local $12) + (i32.const 255) + ) + (i32.load8_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $16) + ) + (get_local $16) + ) + ) + ) + (block + (if + (get_local $11) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (i32.load8_s + (get_local $26) + ) + ) + ) + (i32.store + (get_local $13) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (if + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $33) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (set_local $3 + (get_local $16) + ) + ) + (br $label$break$L262) + ) + ) + (br_if $__rjti$10 + (i32.ne + (i32.and + (tee_local $4 + (if i32 + (get_local $11) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $10) + ) + ) + ) + (i32.const 255) + ) + (i32.load8_u + (if i32 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $27) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $17) + ) + (get_local $17) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $11 + (i32.load + (tee_local $10 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (i32.load8_s + (get_local $27) + ) + ) + ) + (i32.store + (get_local $10) + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 1) + ) + (if + (i32.gt_u + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $34) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (i32.const 1) + ) + (set_local $3 + (get_local $17) + ) + ) + ) + ) + (br $label$break$L262) + ) + (if + (i32.eqz + (i32.or + (i32.lt_u + (get_local $20) + (i32.const 2) + ) + (i32.ne + (get_local $3) + (i32.const 0) + ) + ) + ) + (if + (i32.eqz + (i32.or + (get_local $40) + (i32.and + (i32.eq + (get_local $20) + (i32.const 2) + ) + (i32.ne + (i32.load8_s + (get_local $44) + ) + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L262) + ) + ) + ) + (set_local $10 + (i32.load + (get_local $15) + ) + ) + (set_local $12 + (tee_local $13 + (if i32 + (tee_local $7 + (i32.lt_s + (tee_local $11 + (i32.load8_s + (get_local $35) + ) + ) + (i32.const 0) + ) + ) + (get_local $10) + (get_local $15) + ) + ) + ) + (block $label$break$L104 + (if + (get_local $20) + (if + (i32.lt_s + (i32.load8_u + (i32.add + (get_local $28) + (i32.add + (get_local $20) + (i32.const -1) + ) + ) + ) + (i32.const 2) + ) + (block + (set_local $23 + (i32.add + (get_local $13) + (if i32 + (get_local $7) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + (set_local $7 + (get_local $12) + ) + (loop $while-in15 + (block $while-out14 + (if + (i32.eq + (tee_local $19 + (get_local $7) + ) + (get_local $23) + ) + (block + (set_local $19 + (get_local $7) + ) + (br $while-out14) + ) + ) + (if + (i32.le_s + (tee_local $37 + (i32.load8_s + (get_local $19) + ) + ) + (i32.const -1) + ) + (block + (set_local $19 + (get_local $7) + ) + (br $while-out14) + ) + ) + (if + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $25) + ) + (i32.shl + (get_local $37) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + (block + (set_local $7 + (i32.add + (get_local $19) + (i32.const 1) + ) + ) + (br $while-in15) + ) + (set_local $19 + (get_local $7) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $7 + (i32.sub + (get_local $19) + (get_local $12) + ) + ) + (tee_local $23 + (if i32 + (tee_local $37 + (i32.lt_s + (tee_local $23 + (i32.load8_s + (get_local $42) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $43) + ) + (i32.and + (get_local $23) + (i32.const 255) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $13 + (get_local $10) + ) + (set_local $10 + (get_local $12) + ) + ) + (block + (set_local $7 + (i32.add + (tee_local $23 + (i32.add + (if i32 + (get_local $37) + (i32.load + (get_local $18) + ) + (get_local $18) + ) + (get_local $23) + ) + ) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (loop $while-in17 + (if + (i32.eq + (get_local $7) + (get_local $23) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $13 + (get_local $10) + ) + (set_local $10 + (get_local $19) + ) + (br $label$break$L104) + ) + ) + (if + (i32.ne + (i32.load8_s + (get_local $7) + ) + (i32.load8_s + (get_local $13) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $13 + (get_local $10) + ) + (set_local $10 + (get_local $12) + ) + (br $label$break$L104) + ) + (block + (set_local $13 + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in17) + ) + ) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $13 + (get_local $10) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $13 + (get_local $10) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + ) + (loop $label$continue$L118 + (block $label$break$L118 + (if + (i32.eq + (get_local $10) + (tee_local $11 + (i32.add + (if i32 + (tee_local $12 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $11) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (get_local $13) + (get_local $15) + ) + (if i32 + (get_local $12) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (set_local $10 + (get_local $11) + ) + (br $label$break$L118) + ) + ) + (if + (tee_local $11 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $11) + ) + (i32.load offset=16 + (get_local $11) + ) + ) + (set_local $11 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $11) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $11) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $11 + (i32.const 0) + ) + ) + (set_local $11 + (i32.eqz + (get_local $11) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $4) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (get_local $11) + (block + (set_local $11 + (get_local $7) + ) + (br $__rjto$0) + ) + (br $label$break$L118) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$0) + ) + (if + (i32.xor + (get_local $11) + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $11 + (get_local $7) + ) + (set_local $4 + (get_local $7) + ) + ) + (br $label$break$L118) + ) + ) + (br $__rjto$0) + ) + (br_if $label$break$L118 + (get_local $11) + ) + (set_local $11 + (get_local $7) + ) + (set_local $4 + (i32.const 0) + ) + ) + (br_if $label$break$L118 + (i32.ne + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + (i32.load8_u + (get_local $10) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (i32.load + (tee_local $12 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $12) + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + ) + (set_local $7 + (get_local $11) + ) + (set_local $11 + (i32.load8_s + (get_local $35) + ) + ) + (set_local $13 + (i32.load + (get_local $15) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br $label$continue$L118) + ) + ) + (if + (get_local $40) + (br_if $__rjti$11 + (i32.ne + (get_local $10) + (i32.add + (if i32 + (tee_local $7 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $35) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $15) + ) + (get_local $15) + ) + (if i32 + (get_local $7) + (i32.load + (get_local $36) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (br $label$break$L262) + ) + (set_local $13 + (i32.load8_s + (get_local $39) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $11 + (get_local $4) + ) + (set_local $4 + (i32.const 0) + ) + (loop $label$continue$L151 + (block $label$break$L151 + (if + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $10) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (set_local $10 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $10 + (i32.const 0) + ) + ) + (set_local $10 + (i32.eqz + (get_local $10) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $11) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $11) + ) + (i32.load offset=16 + (get_local $11) + ) + ) + (if + (get_local $10) + (block + (set_local $10 + (get_local $7) + ) + (br $__rjto$1) + ) + (br $label$break$L151) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $11) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $11) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$1) + ) + (if + (i32.xor + (get_local $10) + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $11 + (get_local $7) + ) + ) + (br $label$break$L151) + ) + ) + (br $__rjto$1) + ) + (br_if $label$break$L151 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (set_local $11 + (i32.const 0) + ) + ) + (set_local $4 + (block $__rjto$2 i32 + (block $__rjti$2 + (br_if $__rjti$2 + (i32.le_s + (i32.shr_s + (i32.shl + (tee_local $12 + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $25) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 2048) + ) + ) + ) + (if + (i32.eq + (tee_local $7 + (i32.load + (get_local $9) + ) + ) + (i32.load + (get_local $29) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIcEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $8) + (get_local $9) + (get_local $29) + ) + (set_local $7 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $7) + (get_local $12) + ) + (br $__rjto$2 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.load8_s + (get_local $45) + ) + ) + (if + (i32.eqz + (i32.and + (i32.eq + (i32.shr_s + (i32.shl + (get_local $12) + (i32.const 24) + ) + (i32.const 24) + ) + (get_local $13) + ) + (if i32 + (get_local $4) + (i32.ne + (if i32 + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (i32.load + (get_local $46) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $7 + (get_local $10) + ) + (br $label$break$L151) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (get_local $30) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $22) + (get_local $24) + (get_local $30) + ) + (set_local $2 + (i32.load + (get_local $24) + ) + ) + ) + ) + (i32.store + (get_local $24) + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (set_local $2 + (get_local $7) + ) + (i32.const 0) + ) + ) + (if + (i32.eq + (tee_local $19 + (i32.load + (tee_local $12 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $7 + (get_local $10) + ) + (br $label$continue$L151) + ) + (block + (i32.store + (get_local $12) + (i32.add + (get_local $19) + (i32.const 1) + ) + ) + (set_local $7 + (get_local $10) + ) + (br $label$continue$L151) + ) + ) + ) + ) + (if + (if i32 + (get_local $4) + (i32.ne + (i32.load + (get_local $22) + ) + (get_local $2) + ) + (i32.const 0) + ) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (get_local $30) + ) + ) + (block + (call $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $22) + (get_local $24) + (get_local $30) + ) + (set_local $2 + (i32.load + (get_local $24) + ) + ) + ) + ) + (i32.store + (get_local $24) + (tee_local $11 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + ) + (set_local $11 + (get_local $2) + ) + ) + (block $label$break$L198 + (if + (i32.gt_s + (tee_local $10 + (i32.load + (get_local $31) + ) + ) + (i32.const 0) + ) + (block + (if + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $2) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + (set_local $2 + (i32.eqz + (get_local $2) + ) + ) + (set_local $4 + (block $__rjto$4 i32 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (get_local $7) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$4) + ) + ) + ) + (br_if $__rjti$12 + (i32.eqz + (get_local $2) + ) + ) + (br $__rjto$4 + (get_local $7) + ) + ) + (br_if $__rjti$12 + (get_local $2) + ) + (i32.const 0) + ) + ) + (br_if $__rjti$12 + (i32.ne + (i32.and + (tee_local $2 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $7) + ) + ) + ) + (i32.const 255) + ) + (i32.load8_u + (get_local $38) + ) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (tee_local $12 + (i32.load + (tee_local $7 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (block i32 + (drop + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (get_local $4) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + ) + (loop $while-in33 + (br_if $label$break$L198 + (i32.le_s + (get_local $10) + (i32.const 0) + ) + ) + (if + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (set_local $7 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + (set_local $7 + (i32.eqz + (get_local $7) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (br_if $__rjti$3 + (i32.eqz + (get_local $4) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (get_local $7) + (block + (set_local $7 + (get_local $2) + ) + (br $__rjto$3) + ) + (br $__rjti$13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (br $__rjti$3) + ) + (if + (i32.xor + (get_local $7) + (i32.eqz + (get_local $2) + ) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $4 + (get_local $2) + ) + ) + (br $__rjti$13) + ) + ) + (br $__rjto$3) + ) + (br_if $__rjti$13 + (get_local $7) + ) + (set_local $7 + (get_local $2) + ) + (set_local $4 + (i32.const 0) + ) + ) + (br_if $__rjti$13 + (i32.le_s + (i32.shr_s + (i32.shl + (i32.and + (tee_local $2 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $12) + ) + ) + ) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $__rjti$13 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $25) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 2048) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $9) + ) + (i32.load + (get_local $29) + ) + ) + (call $__ZNSt3__219__double_or_nothingIcEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ + (get_local $8) + (get_local $9) + (get_local $29) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (tee_local $12 + (i32.load offset=12 + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $12) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (tee_local $12 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $12) + (get_local $2) + ) + (i32.store + (get_local $31) + (tee_local $10 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (i32.load + (tee_local $12 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $2) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $2 + (get_local $7) + ) + (br $while-in33) + ) + (block + (i32.store + (get_local $12) + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + (set_local $2 + (get_local $7) + ) + (br $while-in33) + ) + ) + ) + ) + ) + ) + (br_if $__rjti$14 + (i32.eq + (i32.load + (get_local $9) + ) + (i32.load + (get_local $8) + ) + ) + ) + (set_local $2 + (get_local $11) + ) + (br $label$break$L262) + ) + (br $label$break$L262) + ) + (loop $while-in41 + (if + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $10) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (set_local $10 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $10 + (i32.const 0) + ) + ) + (set_local $10 + (i32.eqz + (get_local $10) + ) + ) + (block $__rjto$5 + (block $__rjti$5 + (br_if $__rjti$5 + (i32.eqz + (get_local $4) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (if + (get_local $10) + (block + (set_local $10 + (get_local $7) + ) + (br $__rjto$5) + ) + (br $label$break$L262) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$5) + ) + (if + (i32.xor + (get_local $10) + (i32.eqz + (get_local $7) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (set_local $4 + (get_local $7) + ) + ) + (br $label$break$L262) + ) + ) + (br $__rjto$5) + ) + (br_if $label$break$L262 + (get_local $10) + ) + (set_local $10 + (get_local $7) + ) + (set_local $4 + (i32.const 0) + ) + ) + (br_if $label$break$L262 + (i32.le_s + (i32.shr_s + (i32.shl + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $11 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $11) + ) + ) + ) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $label$break$L262 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $25) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $18) + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $11 + (i32.load + (tee_local $12 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (block i32 + (i32.store + (get_local $12) + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $11) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (set_local $7 + (get_local $10) + ) + (br $while-in41) + ) + ) + (set_local $20 + (i32.add + (get_local $20) + (i32.const 1) + ) + ) + (br $label$continue$L21) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + (block $label$break$L296 + (if + (get_local $3) + (block + (set_local $7 + (i32.add + (get_local $3) + (i32.const 11) + ) + ) + (set_local $9 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $4 + (i32.const 1) + ) + (loop $label$continue$L298 + (block $label$break$L298 + (br_if $label$break$L296 + (i32.ge_u + (get_local $4) + (tee_local $6 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + (if + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (set_local $6 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $6) + ) + ) + (block $__rjto$8 + (block $__rjti$8 + (br_if $__rjti$8 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $1) + ) + ) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$8) + ) + ) + ) + (br_if $label$break$L298 + (i32.eqz + (get_local $8) + ) + ) + (br $__rjto$8) + ) + (br_if $label$break$L298 + (get_local $8) + ) + ) + (br_if $label$break$L298 + (i32.ne + (i32.and + (tee_local $8 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $8) + ) + ) + ) + (i32.const 255) + ) + (i32.load8_u + (i32.add + (tee_local $6 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $7) + ) + (i32.const 0) + ) + (i32.load + (get_local $3) + ) + (get_local $3) + ) + ) + (get_local $4) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (if + (i32.eq + (tee_local $10 + (i32.load + (tee_local $8 + (i32.add + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L298) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br $label$continue$L298) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$break$L294 + (i32.const 0) + ) + ) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (i32.load + (get_local $22) + ) + ) + (get_local $2) + ) + (i32.const 1) + (block i32 + (i32.store + (get_local $32) + (i32.const 0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $21) + (get_local $0) + (get_local $2) + (get_local $32) + ) + (if i32 + (i32.load + (get_local $32) + ) + (block i32 + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $16) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $21) + ) + (set_local $1 + (i32.load + (get_local $22) + ) + ) + (i32.store + (get_local $22) + (i32.const 0) + ) + (if + (get_local $1) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $41) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $14) + ) + (get_local $0) + ) + (func $_vfscanf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 f64) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (set_local $17 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $28 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $23 + (i32.add + (get_local $17) + (i32.const 16) + ) + ) + (set_local $22 + (i32.add + (get_local $17) + (i32.const 8) + ) + ) + (set_local $11 + (i32.add + (get_local $17) + (i32.const 33) + ) + ) + (set_local $26 + (get_local $17) + ) + (set_local $27 + (i32.add + (get_local $17) + (i32.const 32) + ) + ) + (block $label$break$L4 + (if + (tee_local $5 + (i32.load8_s + (get_local $1) + ) + ) + (block + (set_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 100) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (set_local $19 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $20 + (i32.add + (get_local $11) + (i32.const 10) + ) + ) + (set_local $29 + (i32.add + (get_local $11) + (i32.const 33) + ) + ) + (set_local $30 + (i32.add + (get_local $22) + (i32.const 4) + ) + ) + (set_local $31 + (i32.add + (get_local $11) + (i32.const 46) + ) + ) + (set_local $32 + (i32.add + (get_local $11) + (i32.const 94) + ) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (block $__rjti$1 + (loop $label$continue$L6 + (block $label$break$L6 + (block $label$break$L8 + (set_local $4 + (if i32 + (call $_isspace + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (block i32 + (loop $while-in117 + (if + (call $_isspace + (i32.load8_u + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (br $while-in117) + ) + ) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (loop $do-in119 + (br_if $do-in119 + (call $_isspace + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.load + (get_local $13) + ) + (i32.store + (get_local $8) + (tee_local $5 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (set_local $5 + (i32.load + (get_local $8) + ) + ) + ) + (i32.sub + (i32.add + (i32.add + (i32.load + (get_local $18) + ) + (get_local $4) + ) + (get_local $5) + ) + (i32.load + (get_local $19) + ) + ) + ) + (block i32 + (block $label$break$L10 + (if + (tee_local $7 + (i32.eq + (i32.load8_s + (get_local $1) + ) + (i32.const 37) + ) + ) + (block + (if + (i32.lt_u + (i32.add + (tee_local $12 + (i32.and + (tee_local $5 + (i32.load8_s + (tee_local $1 + (block $label$break$L12 i32 + (block $switch-default + (block $switch-case3 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-case3 $switch-default + (i32.sub + (tee_local $12 + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (i32.const 37) + ) + ) + ) + (br $label$break$L10) + ) + (set_local $7 + (i32.const 0) + ) + (br $label$break$L12 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.add + (i32.and + (get_local $12) + (i32.const 255) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=2 + (get_local $1) + ) + (i32.const 36) + ) + (block + (i32.store + (get_local $23) + (i32.load + (get_local $2) + ) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in + (set_local $7 + (i32.load + (tee_local $12 + (i32.and + (i32.add + (i32.load + (get_local $23) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $23) + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 1) + ) + (block + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (br $while-in) + ) + ) + ) + (br $label$break$L12 + (i32.add + (get_local $1) + (i32.const 3) + ) + ) + ) + ) + ) + (set_local $7 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + (block + (set_local $5 + (get_local $12) + ) + (set_local $12 + (i32.const 0) + ) + (loop $while-in5 + (set_local $12 + (i32.add + (i32.add + (i32.mul + (get_local $12) + (i32.const 10) + ) + (i32.const -48) + ) + (get_local $5) + ) + ) + (br_if $while-in5 + (i32.lt_u + (i32.add + (tee_local $5 + (i32.and + (tee_local $3 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + ) + (set_local $5 + (get_local $3) + ) + ) + ) + (set_local $12 + (i32.const 0) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 109) + ) + (block i32 + (set_local $9 + (i32.load8_u + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (i32.ne + (get_local $7) + (i32.const 0) + ) + ) + (block i32 + (set_local $9 + (get_local $5) + ) + (set_local $3 + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (block $switch6 + (block $switch-default34 + (block $switch-case13 + (block $switch-case12 + (block $switch-case10 + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (br_table $switch-case13 $switch-default34 $switch-case13 $switch-default34 $switch-case13 $switch-case13 $switch-case13 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-case12 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-case13 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-case13 $switch-default34 $switch-default34 $switch-case13 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-default34 $switch-case13 $switch-default34 $switch-case13 $switch-case13 $switch-case13 $switch-case13 $switch-case13 $switch-case7 $switch-case13 $switch-case9 $switch-default34 $switch-case8 $switch-default34 $switch-case13 $switch-case13 $switch-case13 $switch-default34 $switch-default34 $switch-case13 $switch-case10 $switch-case13 $switch-default34 $switch-default34 $switch-case13 $switch-default34 $switch-case10 $switch-default34 + (i32.sub + (i32.and + (get_local $9) + (i32.const 255) + ) + (i32.const 65) + ) + ) + ) + (if + (tee_local $9 + (i32.eq + (i32.load8_s + (get_local $1) + ) + (i32.const 104) + ) + ) + (set_local $1 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + (set_local $3 + (if i32 + (get_local $9) + (i32.const -2) + (i32.const -1) + ) + ) + (br $switch6) + ) + (if + (tee_local $9 + (i32.eq + (i32.load8_s + (get_local $1) + ) + (i32.const 108) + ) + ) + (set_local $1 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + ) + (set_local $3 + (if i32 + (get_local $9) + (i32.const 3) + (i32.const 1) + ) + ) + (br $switch6) + ) + (set_local $3 + (i32.const 3) + ) + (br $switch6) + ) + (set_local $3 + (i32.const 1) + ) + (br $switch6) + ) + (set_local $3 + (i32.const 2) + ) + (br $switch6) + ) + (set_local $1 + (get_local $3) + ) + (set_local $3 + (i32.const 0) + ) + (br $switch6) + ) + (br $__rjti$2) + ) + (if + (tee_local $21 + (i32.eq + (i32.and + (tee_local $9 + (i32.load8_u + (get_local $1) + ) + ) + (i32.const 47) + ) + (i32.const 3) + ) + ) + (set_local $9 + (i32.or + (get_local $9) + (i32.const 32) + ) + ) + ) + (set_local $16 + (if i32 + (get_local $21) + (i32.const 1) + (get_local $3) + ) + ) + (block $switch35 + (block $switch-default46 + (block $switch-case45 + (block $switch-case37 + (block $switch-case36 + (br_table $switch-case37 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-case36 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-default46 $switch-case45 $switch-default46 + (i32.sub + (get_local $9) + (i32.const 91) + ) + ) + ) + (set_local $21 + (get_local $4) + ) + (if + (i32.lt_s + (get_local $12) + (i32.const 1) + ) + (set_local $12 + (i32.const 1) + ) + ) + (br $switch35) + ) + (set_local $21 + (get_local $4) + ) + (br $switch35) + ) + (br_if $label$break$L8 + (i32.eqz + (get_local $7) + ) + ) + (block $switch-default44 + (block $switch-case43 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (br_table $switch-case39 $switch-case40 $switch-case41 $switch-case42 $switch-default44 $switch-case43 $switch-default44 + (i32.sub + (get_local $16) + (i32.const -2) + ) + ) + ) + (i32.store8 + (get_local $7) + (get_local $4) + ) + (br $label$break$L8) + ) + (i32.store16 + (get_local $7) + (get_local $4) + ) + (br $label$break$L8) + ) + (i32.store + (get_local $7) + (get_local $4) + ) + (br $label$break$L8) + ) + (i32.store + (get_local $7) + (get_local $4) + ) + (br $label$break$L8) + ) + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store offset=4 + (get_local $7) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $4) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L8) + ) + (br $label$break$L8) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (loop $do-in + (br_if $do-in + (call $_isspace + (tee_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $3) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.load + (get_local $13) + ) + (i32.store + (get_local $8) + (tee_local $3 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $8) + ) + ) + ) + (set_local $21 + (i32.sub + (i32.add + (i32.add + (i32.load + (get_local $18) + ) + (get_local $4) + ) + (get_local $3) + ) + (i32.load + (get_local $19) + ) + ) + ) + ) + (call $___shlim + (get_local $0) + (get_local $12) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $8) + ) + ) + (tee_local $4 + (i32.load + (get_local $13) + ) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (block + (br_if $__rjti$2 + (i32.lt_s + (call $___shgetc + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $4 + (i32.load + (get_local $13) + ) + ) + ) + ) + (if + (get_local $4) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (block $label$break$L169 + (block $__rjti$0 + (block $switch-default107 + (block $switch-case94 + (block $switch-case93 + (block $switch-case91 + (block $switch-case90 + (block $switch-case87 + (block $switch-case49 + (br_table $switch-case94 $switch-default107 $switch-default107 $switch-default107 $switch-case94 $switch-case94 $switch-case94 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-case87 $switch-default107 $switch-default107 $switch-case49 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-case94 $switch-default107 $switch-case49 $switch-case91 $switch-case94 $switch-case94 $switch-case94 $switch-default107 $switch-case93 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-default107 $switch-case90 $switch-case87 $switch-default107 $switch-default107 $switch-case49 $switch-default107 $switch-case91 $switch-default107 $switch-default107 $switch-case87 $switch-default107 + (i32.sub + (get_local $9) + (i32.const 65) + ) + ) + ) + (set_local $24 + (i32.eq + (get_local $9) + (i32.const 99) + ) + ) + (block $label$break$L70 + (if + (i32.eq + (i32.or + (get_local $9) + (i32.const 16) + ) + (i32.const 115) + ) + (block + (drop + (call $_memset + (get_local $11) + (i32.const -1) + (i32.const 257) + ) + ) + (i32.store8 + (get_local $11) + (i32.const 0) + ) + (if + (i32.eq + (get_local $9) + (i32.const 115) + ) + (block + (i32.store8 + (get_local $29) + (i32.const 0) + ) + (i32.store8 + (get_local $20) + (i32.const 0) + ) + (i32.store8 offset=1 + (get_local $20) + (i32.const 0) + ) + (i32.store8 offset=2 + (get_local $20) + (i32.const 0) + ) + (i32.store8 offset=3 + (get_local $20) + (i32.const 0) + ) + (i32.store8 offset=4 + (get_local $20) + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $9 + (tee_local $14 + (i32.eq + (i32.load8_s + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 94) + ) + ) + ) + (drop + (call $_memset + (get_local $11) + (get_local $14) + (i32.const 257) + ) + ) + (i32.store8 + (get_local $11) + (i32.const 0) + ) + (block $switch52 + (block $switch-default55 + (block $switch-case54 + (block $switch-case53 + (br_table $switch-case53 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-default55 $switch-case54 $switch-default55 + (i32.sub + (i32.load8_s + (tee_local $1 + (if i32 + (get_local $14) + (i32.add + (get_local $1) + (i32.const 2) + ) + (get_local $3) + ) + ) + ) + (i32.const 45) + ) + ) + ) + (i32.store8 + (get_local $31) + (tee_local $9 + (i32.xor + (get_local $9) + (i32.const 1) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $switch52) + ) + (i32.store8 + (get_local $32) + (tee_local $9 + (i32.xor + (get_local $9) + (i32.const 1) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $switch52) + ) + (set_local $9 + (i32.xor + (get_local $9) + (i32.const 1) + ) + ) + ) + (loop $while-in57 + (block $label$break$L81 + (block $switch-default69 + (block $switch-case68 + (block $switch-case61 + (block $switch-case60 + (br_table $switch-case60 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-case68 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-default69 $switch-case61 $switch-default69 + (tee_local $3 + (i32.load8_s + (get_local $1) + ) + ) + ) + ) + (br $__rjti$2) + ) + (br $label$break$L70) + ) + (block $switch-default65 + (block $switch-case63 + (br_table $switch-case63 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-default65 $switch-case63 $switch-default65 + (tee_local $3 + (i32.load8_s + (tee_local $14 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $3 + (i32.const 45) + ) + (br $label$break$L81) + ) + (set_local $1 + (if i32 + (i32.lt_s + (tee_local $1 + (i32.load8_u + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (block i32 + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (loop $do-in67 + (i32.store8 + (i32.add + (get_local $11) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (get_local $9) + ) + (br_if $do-in67 + (i32.lt_s + (get_local $1) + (i32.and + (tee_local $3 + (i32.load8_s + (get_local $14) + ) + ) + (i32.const 255) + ) + ) + ) + ) + (get_local $14) + ) + (get_local $14) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $11) + (i32.add + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 1) + ) + ) + (get_local $9) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in57) + ) + ) + ) + ) + (set_local $3 + (if i32 + (get_local $24) + (i32.add + (get_local $12) + (i32.const 1) + ) + (i32.const 31) + ) + ) + (set_local $14 + (i32.ne + (get_local $5) + (i32.const 0) + ) + ) + (block $label$break$L89 + (if + (tee_local $16 + (i32.eq + (get_local $16) + (i32.const 1) + ) + ) + (block + (if + (get_local $14) + (if + (i32.eqz + (tee_local $10 + (call $_malloc + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + (set_local $10 + (get_local $7) + ) + ) + (i32.store + (get_local $22) + (i32.const 0) + ) + (i32.store + (get_local $30) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $4 + (get_local $3) + ) + (loop $label$continue$L95 + (block $label$break$L95 + (set_local $9 + (i32.eqz + (get_local $10) + ) + ) + (loop $while-in72 + (loop $label$continue$L99 + (block $label$break$L99 + (br_if $label$break$L95 + (i32.eqz + (i32.load8_s + (i32.add + (get_local $11) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $3) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $27) + (get_local $3) + ) + (block $switch73 + (block $switch-default76 + (block $switch-case75 + (block $switch-case74 + (br_table $switch-case75 $switch-case74 $switch-default76 + (i32.sub + (call $_mbrtowc + (get_local $26) + (get_local $27) + (i32.const 1) + (get_local $22) + ) + (i32.const -2) + ) + ) + ) + (set_local $6 + (i32.const 0) + ) + (br $__rjti$2) + ) + (br $switch73) + ) + (br $label$break$L99) + ) + (br $label$continue$L99) + ) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.add + (get_local $10) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.load + (get_local $26) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (br_if $while-in72 + (i32.eqz + (i32.and + (get_local $14) + (i32.eq + (get_local $6) + (get_local $4) + ) + ) + ) + ) + ) + (if + (tee_local $9 + (call $_realloc + (get_local $10) + (i32.shl + (tee_local $3 + (i32.or + (i32.shl + (get_local $4) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $6 + (get_local $4) + ) + (set_local $4 + (get_local $3) + ) + (set_local $10 + (get_local $9) + ) + (br $label$continue$L95) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + ) + ) + (if + (call $_mbsinit + (get_local $22) + ) + (block + (set_local $4 + (get_local $6) + ) + (set_local $6 + (i32.const 0) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + ) + (block + (if + (get_local $14) + (block + (if + (tee_local $6 + (call $_malloc + (get_local $3) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $10 + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + (loop $while-in78 + (loop $do-in80 + (if + (i32.eqz + (i32.load8_s + (i32.add + (get_local $11) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $3) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + ) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $label$break$L89) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (get_local $4) + ) + (get_local $3) + ) + (br_if $do-in80 + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $10) + ) + ) + ) + (if + (tee_local $9 + (call $_realloc + (get_local $6) + (tee_local $3 + (i32.or + (i32.shl + (get_local $10) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $10) + ) + (set_local $10 + (get_local $3) + ) + (set_local $6 + (get_local $9) + ) + (br $while-in78) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + ) + ) + ) + (if + (get_local $7) + (block + (set_local $6 + (get_local $4) + ) + (set_local $4 + (i32.const 0) + ) + (loop $while-in84 + (if + (i32.load8_s + (i32.add + (get_local $11) + (i32.add + (tee_local $6 + (if i32 + (i32.lt_u + (tee_local $10 + (i32.load + (get_local $8) + ) + ) + (get_local $6) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $10) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store8 + (i32.add + (get_local $7) + (get_local $4) + ) + (get_local $6) + ) + (set_local $6 + (i32.load + (get_local $13) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (br $while-in84) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $10 + (i32.const 0) + ) + (br $label$break$L89) + ) + ) + ) + ) + (loop $while-in82 + (if + (i32.load8_s + (i32.add + (get_local $11) + (i32.add + (tee_local $6 + (if i32 + (i32.lt_u + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (get_local $4) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $6) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (block + (set_local $4 + (i32.load + (get_local $13) + ) + ) + (br $while-in82) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $10 + (i32.const 0) + ) + (br $label$break$L89) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.load + (get_local $13) + ) + (i32.store + (get_local $8) + (tee_local $3 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $8) + ) + ) + ) + (br_if $label$break$L6 + (i32.eqz + (tee_local $3 + (i32.add + (i32.sub + (get_local $3) + (i32.load + (get_local $19) + ) + ) + (i32.load + (get_local $18) + ) + ) + ) + ) + ) + (br_if $label$break$L6 + (i32.eqz + (i32.or + (i32.eq + (get_local $3) + (get_local $12) + ) + (i32.xor + (get_local $24) + (i32.const 1) + ) + ) + ) + ) + (if + (get_local $14) + (if + (get_local $16) + (i32.store + (get_local $7) + (get_local $10) + ) + (i32.store + (get_local $7) + (get_local $6) + ) + ) + ) + (if + (i32.eqz + (get_local $24) + ) + (block + (if + (get_local $10) + (i32.store + (i32.add + (get_local $10) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L169) + ) + ) + (i32.store8 + (i32.add + (get_local $6) + (get_local $4) + ) + (i32.const 0) + ) + ) + ) + (br $label$break$L169) + ) + (set_local $4 + (i32.const 16) + ) + (br $__rjti$0) + ) + (set_local $4 + (i32.const 8) + ) + (br $__rjti$0) + ) + (set_local $4 + (i32.const 10) + ) + (br $__rjti$0) + ) + (set_local $4 + (i32.const 0) + ) + (br $__rjti$0) + ) + (set_local $25 + (call $___floatscan + (get_local $0) + (get_local $16) + (i32.const 0) + ) + ) + (br_if $label$break$L6 + (i32.eq + (i32.load + (get_local $18) + ) + (i32.sub + (i32.load + (get_local $19) + ) + (i32.load + (get_local $8) + ) + ) + ) + ) + (if + (get_local $7) + (block + (block $switch-default105 + (block $switch-case104 + (block $switch-case103 + (block $switch-case102 + (br_table $switch-case102 $switch-case103 $switch-case104 $switch-default105 + (get_local $16) + ) + ) + (f32.store + (get_local $7) + (f32.demote/f64 + (get_local $25) + ) + ) + (br $label$break$L169) + ) + (f64.store + (get_local $7) + (get_local $25) + ) + (br $label$break$L169) + ) + (f64.store + (get_local $7) + (get_local $25) + ) + (br $label$break$L169) + ) + (br $label$break$L169) + ) + ) + (br $label$break$L169) + ) + (br $label$break$L169) + ) + (set_local $4 + (call $___intscan + (get_local $0) + (get_local $4) + (i32.const 0) + (i32.const -1) + (i32.const -1) + ) + ) + (br_if $label$break$L6 + (i32.eq + (i32.load + (get_local $18) + ) + (i32.sub + (i32.load + (get_local $19) + ) + (i32.load + (get_local $8) + ) + ) + ) + ) + (if + (i32.and + (i32.ne + (get_local $7) + (i32.const 0) + ) + (i32.eq + (get_local $9) + (i32.const 112) + ) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (br $label$break$L169) + ) + ) + (if + (get_local $7) + (block $switch-default115 + (block $switch-case114 + (block $switch-case113 + (block $switch-case112 + (block $switch-case111 + (block $switch-case110 + (br_table $switch-case110 $switch-case111 $switch-case112 $switch-case113 $switch-default115 $switch-case114 $switch-default115 + (i32.sub + (get_local $16) + (i32.const -2) + ) + ) + ) + (i32.store8 + (get_local $7) + (get_local $4) + ) + (br $label$break$L169) + ) + (i32.store16 + (get_local $7) + (get_local $4) + ) + (br $label$break$L169) + ) + (i32.store + (get_local $7) + (get_local $4) + ) + (br $label$break$L169) + ) + (i32.store + (get_local $7) + (get_local $4) + ) + (br $label$break$L169) + ) + (i32.store + (tee_local $5 + (get_local $7) + ) + (get_local $4) + ) + (i32.store offset=4 + (get_local $5) + (get_global $tempRet0) + ) + ) + ) + ) + (set_local $15 + (i32.add + (i32.ne + (get_local $7) + (i32.const 0) + ) + (get_local $15) + ) + ) + (set_local $4 + (i32.sub + (i32.add + (i32.add + (i32.load + (get_local $18) + ) + (get_local $21) + ) + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $19) + ) + ) + ) + (br $label$break$L8) + ) + ) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (br_if $__rjti$1 + (i32.ne + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block i32 + (i32.store + (get_local $8) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.load8_u + (tee_local $1 + (i32.add + (get_local $1) + (get_local $7) + ) + ) + ) + ) + ) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + ) + ) + (br_if $label$continue$L6 + (tee_local $5 + (i32.load8_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + (br $label$break$L4) + ) + ) + (br $__rjto$3) + ) + (if + (i32.load + (get_local $13) + ) + (i32.store + (get_local $8) + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (br_if $label$break$L4 + (i32.or + (get_local $15) + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + (br $__rjti$3) + ) + (br_if $__rjti$3 + (i32.eqz + (get_local $15) + ) + ) + (br $__rjto$3) + ) + (set_local $15 + (i32.const -1) + ) + ) + (if + (get_local $5) + (block + (call $_free + (get_local $6) + ) + (call $_free + (get_local $10) + ) + ) + ) + ) + (set_local $15 + (i32.const 0) + ) + ) + ) + (if + (get_local $28) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $0) + ) + ) + (set_global $STACKTOP + (get_local $17) + ) + (get_local $15) + ) + (func $_free (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 17684) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 17672) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 17688) + ) + ) + (block + (i32.store + (i32.const 17676) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17676) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17688) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 17684) + ) + ) + (return) + ) + (i32.store + (i32.const 17684) + (i32.const 0) + ) + (i32.store + (i32.const 17672) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 17684) + ) + ) + (block + (i32.store + (i32.const 17672) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17672) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17684) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 17684) + ) + ) + (block + (i32.store + (i32.const 17672) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17668) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (if i32 + (i32.eq + (get_local $5) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 17668) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 17696) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17696) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 18120) + ) + ) + (loop $while-in17 + (if + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 17696) + (i32.const -1) + ) + ) + (func $___intscan (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (block $label$break$L1 + (set_local $4 + (if i32 + (i32.gt_u + (get_local $1) + (i32.const 36) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.const 22) + ) + (set_local $3 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $7 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 100) + ) + ) + (loop $do-in + (br_if $do-in + (call $_isspace + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + ) + ) + ) + (block $label$break$L11 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (get_local $5) + (i32.const 43) + ) + ) + ) + (set_local $13 + (i32.shr_s + (i32.shl + (i32.eq + (get_local $5) + (i32.const 45) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (if + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $5 + (i32.load8_u + (get_local $5) + ) + ) + (br $label$break$L11) + ) + (block + (set_local $5 + (call $___shgetc + (get_local $0) + ) + ) + (br $label$break$L11) + ) + ) + ) + (set_local $13 + (i32.const 0) + ) + ) + (set_local $6 + (i32.eqz + (get_local $1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (if + (i32.and + (i32.eq + (i32.or + (get_local $1) + (i32.const 16) + ) + (i32.const 16) + ) + (i32.eq + (get_local $5) + (i32.const 48) + ) + ) + (block + (if + (i32.ne + (i32.or + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 32) + ) + (i32.const 120) + ) + (if + (get_local $6) + (block + (set_local $1 + (i32.const 8) + ) + (set_local $2 + (get_local $5) + ) + (br $__rjti$1) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $__rjti$0) + ) + ) + ) + (if + (i32.gt_s + (i32.load8_u + (i32.add + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 10530) + ) + ) + (i32.const 15) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.eqz + (i32.load + (get_local $10) + ) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (if + (get_local $1) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L1) + ) + (block + (set_local $1 + (i32.const 16) + ) + (set_local $2 + (get_local $5) + ) + (br $__rjti$1) + ) + ) + ) + (if + (i32.lt_u + (i32.load8_u + (i32.add + (get_local $5) + (i32.const 10530) + ) + ) + (if i32 + (get_local $6) + (tee_local $1 + (i32.const 10) + ) + (get_local $1) + ) + ) + (set_local $2 + (get_local $5) + ) + (block + (if + (i32.load + (get_local $10) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (call $___shlim + (get_local $0) + (i32.const 0) + ) + (i32.store + (call $___errno_location) + (i32.const 22) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + ) + ) + (br_if $__rjti$1 + (i32.ne + (get_local $1) + (i32.const 10) + ) + ) + (set_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $2) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block i32 + (set_local $2 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (set_local $1 + (i32.add + (i32.mul + (get_local $1) + (i32.const 10) + ) + (get_local $2) + ) + ) + (br_if $while-in + (i32.and + (i32.lt_u + (tee_local $2 + (i32.add + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (i32.lt_u + (get_local $1) + (i32.const 429496729) + ) + ) + ) + ) + (set_local $6 + (get_local $1) + ) + (i32.const 0) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (set_local $5 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $2 + (get_local $6) + ) + (set_local $6 + (get_local $8) + ) + (loop $while-in4 + (block $while-out3 + (set_local $11 + (call $___muldi3 + (get_local $2) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (br_if $while-out3 + (i32.or + (i32.gt_u + (tee_local $12 + (get_global $tempRet0) + ) + (tee_local $8 + (i32.xor + (tee_local $9 + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (i32.const -1) + ) + ) + ) + (i32.and + (i32.eq + (get_local $12) + (get_local $8) + ) + (i32.gt_u + (get_local $11) + (i32.xor + (get_local $6) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $2 + (call $_i64Add + (get_local $11) + (get_local $12) + (get_local $6) + (get_local $9) + ) + ) + (set_local $1 + (get_global $tempRet0) + ) + (br_if $while-in4 + (i32.and + (i32.lt_u + (tee_local $6 + (i32.add + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 429496729) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 429496729) + ) + (i32.lt_u + (get_local $2) + (i32.const -1717986918) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.le_u + (get_local $6) + (i32.const 9) + ) + (block + (set_local $6 + (i32.const 10) + ) + (br $__rjti$2) + ) + ) + ) + (set_local $2 + (get_local $6) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (i32.and + (i32.add + (get_local $1) + (i32.const -1) + ) + (get_local $1) + ) + ) + (block + (set_local $14 + (i32.load8_s + (i32.add + (i32.and + (i32.shr_u + (i32.mul + (get_local $1) + (i32.const 23) + ) + (i32.const 5) + ) + (i32.const 7) + ) + (i32.const 10786) + ) + ) + ) + (set_local $8 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.load8_s + (i32.add + (get_local $2) + (i32.const 10530) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $1) + ) + (block i32 + (set_local $2 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.and + (i32.lt_u + (tee_local $2 + (i32.or + (get_local $5) + (i32.shl + (get_local $2) + (get_local $14) + ) + ) + ) + (i32.const 134217728) + ) + (i32.lt_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.load8_s + (i32.add + (tee_local $8 + (if i32 + (i32.lt_u + (tee_local $6 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $6) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 10530) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $1) + ) + ) + (br $while-in7) + (set_local $5 + (get_local $8) + ) + ) + ) + (set_local $9 + (i32.const 0) + ) + (get_local $2) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $5 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + (set_local $12 + (call $_bitshift64Lshr + (i32.const -1) + (i32.const -1) + (get_local $14) + ) + ) + (if + (i32.or + (i32.ge_u + (i32.and + (get_local $6) + (i32.const 255) + ) + (get_local $1) + ) + (i32.or + (i32.gt_u + (get_local $9) + (tee_local $11 + (get_global $tempRet0) + ) + ) + (i32.and + (i32.eq + (get_local $9) + (get_local $11) + ) + (i32.gt_u + (get_local $8) + (get_local $12) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $2 + (get_local $8) + ) + (set_local $1 + (get_local $9) + ) + (br $__rjti$2) + ) + (set_local $2 + (get_local $9) + ) + ) + (loop $while-in9 + (set_local $2 + (call $_bitshift64Shl + (get_local $8) + (get_local $2) + (get_local $14) + ) + ) + (set_local $5 + (get_global $tempRet0) + ) + (set_local $9 + (if i32 + (i32.lt_u + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $8) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (set_local $8 + (i32.or + (i32.and + (get_local $6) + (i32.const 255) + ) + (get_local $2) + ) + ) + (if + (i32.or + (i32.ge_u + (tee_local $6 + (i32.load8_u + (i32.add + (get_local $9) + (i32.const 10530) + ) + ) + ) + (get_local $1) + ) + (i32.or + (i32.gt_u + (get_local $5) + (get_local $11) + ) + (i32.and + (i32.eq + (get_local $5) + (get_local $11) + ) + (i32.gt_u + (get_local $8) + (get_local $12) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $2 + (get_local $8) + ) + (set_local $1 + (get_local $5) + ) + (set_local $5 + (get_local $9) + ) + (br $__rjti$2) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-in9) + ) + ) + ) + ) + ) + (set_local $8 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.load8_s + (i32.add + (get_local $2) + (i32.const 10530) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $1) + ) + (block i32 + (set_local $2 + (i32.const 0) + ) + (loop $while-in11 + (if + (i32.and + (i32.lt_u + (tee_local $2 + (i32.add + (get_local $5) + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + ) + (i32.const 119304647) + ) + (i32.lt_u + (tee_local $5 + (i32.and + (tee_local $6 + (i32.load8_s + (i32.add + (tee_local $8 + (if i32 + (i32.lt_u + (tee_local $6 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $6) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 10530) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $1) + ) + ) + (br $while-in11) + (set_local $5 + (get_local $8) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + (i32.const 0) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $5 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + (if + (i32.lt_u + (i32.and + (get_local $6) + (i32.const 255) + ) + (get_local $1) + ) + (block + (set_local $12 + (call $___udivdi3 + (i32.const -1) + (i32.const -1) + (get_local $1) + (i32.const 0) + ) + ) + (set_local $14 + (get_global $tempRet0) + ) + (set_local $2 + (get_local $9) + ) + (loop $while-in13 + (if + (i32.or + (i32.gt_u + (get_local $8) + (get_local $14) + ) + (i32.and + (i32.eq + (get_local $8) + (get_local $14) + ) + (i32.gt_u + (get_local $2) + (get_local $12) + ) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$2) + ) + ) + (set_local $11 + (call $___muldi3 + (get_local $2) + (get_local $8) + (get_local $1) + (i32.const 0) + ) + ) + (if + (i32.or + (i32.gt_u + (tee_local $9 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $9) + (i32.const -1) + ) + (i32.gt_u + (get_local $11) + (i32.xor + (tee_local $6 + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.const -1) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$2) + ) + ) + (set_local $2 + (call $_i64Add + (get_local $6) + (i32.const 0) + (get_local $11) + (get_local $9) + ) + ) + (set_local $8 + (get_global $tempRet0) + ) + (br_if $while-in13 + (i32.lt_u + (tee_local $6 + (i32.load8_u + (i32.add + (tee_local $5 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $5) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 10530) + ) + ) + ) + (get_local $1) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$2) + ) + ) + (block + (set_local $6 + (get_local $1) + ) + (set_local $2 + (get_local $9) + ) + (set_local $1 + (get_local $8) + ) + (br $__rjti$2) + ) + ) + (br $__rjto$2) + ) + (if + (i32.lt_u + (i32.load8_u + (i32.add + (get_local $5) + (i32.const 10530) + ) + ) + (get_local $6) + ) + (block + (loop $do-in15 + (br_if $do-in15 + (i32.lt_u + (i32.load8_u + (i32.add + (tee_local $1 + (if i32 + (i32.lt_u + (tee_local $1 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $1) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 10530) + ) + ) + (get_local $6) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $1 + (get_local $4) + ) + (set_local $2 + (get_local $3) + ) + (if + (i32.and + (get_local $3) + (i32.const 1) + ) + (set_local $13 + (i32.const 0) + ) + ) + ) + ) + ) + (if + (i32.load + (get_local $10) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.lt_u + (get_local $1) + (get_local $4) + ) + (i32.and + (i32.eq + (get_local $1) + (get_local $4) + ) + (i32.lt_u + (get_local $2) + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.eqz + (i32.or + (i32.or + (i32.ne + (i32.and + (get_local $3) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.ne + (get_local $13) + (i32.const 0) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (set_local $3 + (call $_i64Add + (get_local $3) + (get_local $4) + (i32.const -1) + (i32.const -1) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (br $label$break$L1) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (get_local $4) + ) + (i32.and + (i32.eq + (get_local $1) + (get_local $4) + ) + (i32.gt_u + (get_local $2) + (get_local $3) + ) + ) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 34) + ) + (br $label$break$L1) + ) + ) + ) + ) + (set_local $3 + (call $_i64Subtract + (i32.xor + (get_local $2) + (get_local $13) + ) + (i32.xor + (get_local $1) + (tee_local $0 + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (get_local $13) + (get_local $0) + ) + ) + (get_global $tempRet0) + ) + ) + ) + ) + (set_global $tempRet0 + (get_local $4) + ) + (get_local $3) + ) + (func $_dispose_chunk (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (set_local $7 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (block $do-once + (if + (i32.and + (tee_local $2 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 1) + ) + (block + (set_local $4 + (get_local $0) + ) + (set_local $3 + (get_local $1) + ) + ) + (block + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $2) + (i32.const 3) + ) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.add + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (tee_local $12 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $10) + (get_local $1) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 17684) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 17672) + (get_local $0) + ) + (i32.store + (get_local $3) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $10) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $10) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $2) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $2) + ) + ) + (tee_local $1 + (i32.add + (i32.shl + (get_local $6) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $3) + ) + (get_local $2) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $3) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $6) + ) + (i32.const -1) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (set_local $5 + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $11 + (i32.load offset=24 + (get_local $2) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $2) + ) + ) + (get_local $2) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $1 + (i32.add + (tee_local $6 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (set_local $1 + (get_local $6) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $6 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $1 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $6 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $6) + ) + (set_local $1 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $2) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $6 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $2) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $8 + (get_local $1) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $11) + (block + (if + (i32.eq + (get_local $2) + (i32.load + (tee_local $1 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $1) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $11) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $8) + ) + (i32.store offset=20 + (get_local $11) + (get_local $8) + ) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $5 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $11) + ) + (if + (tee_local $6 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=4 + (get_local $1) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $8) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (tee_local $8 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + ) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $2) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 17688) + ) + ) + (block + (i32.store + (i32.const 17676) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17676) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17688) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $4) + (i32.load + (i32.const 17684) + ) + ) + (return) + ) + (i32.store + (i32.const 17684) + (i32.const 0) + ) + (i32.store + (i32.const 17672) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 17684) + ) + ) + (block + (i32.store + (i32.const 17672) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17672) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17684) + (get_local $4) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $2) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $2 + (i32.load offset=12 + (get_local $7) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.load offset=8 + (get_local $7) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $3) + ) + (get_local $7) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $14) + (get_local $3) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $7) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $7) + ) + ) + (get_local $7) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in9) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $2) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $8) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $2 + (i32.load offset=8 + (get_local $7) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $7) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $7) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $1 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $3) + ) + (i32.store offset=24 + (get_local $3) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $4) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $4) + (i32.load + (i32.const 17684) + ) + ) + (block + (i32.store + (i32.const 17672) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17664) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $1) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17664) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $4) + ) + (i32.store offset=12 + (get_local $13) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $13) + ) + (i32.store offset=12 + (get_local $4) + (get_local $3) + ) + (return) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $5 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + (i32.store offset=28 + (get_local $4) + (get_local $5) + ) + (i32.store offset=20 + (get_local $4) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $4) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 17668) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17668) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (return) + ) + ) + (set_local $5 + (i32.shl + (get_local $3) + (if i32 + (i32.eq + (get_local $5) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in13 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in13) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $0) + ) + (i32.store offset=12 + (get_local $4) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $4) + ) + (return) + ) + (if + (i32.eqz + (i32.and + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 17680) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=12 + (get_local $2) + (get_local $4) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (i32.store offset=24 + (get_local $4) + (i32.const 0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 144) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 132) + ) + ) + (set_local $10 + (i32.add + (get_local $7) + (i32.const 116) + ) + ) + (set_local $12 + (i32.add + (get_local $7) + (i32.const 124) + ) + ) + (set_local $13 + (i32.add + (get_local $7) + (i32.const 120) + ) + ) + (set_local $14 + (i32.add + (get_local $7) + (i32.const 112) + ) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 108) + ) + ) + (set_local $16 + (i32.add + (get_local $7) + (i32.const 104) + ) + ) + (set_local $17 + (i32.add + (get_local $7) + (i32.const 100) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 96) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 92) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 88) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 84) + ) + ) + (set_local $22 + (i32.add + (get_local $7) + (i32.const 80) + ) + ) + (set_local $23 + (i32.add + (get_local $7) + (i32.const 76) + ) + ) + (set_local $24 + (i32.add + (get_local $7) + (i32.const 72) + ) + ) + (set_local $25 + (i32.add + (get_local $7) + (i32.const 68) + ) + ) + (set_local $26 + (i32.add + (get_local $7) + (i32.const 64) + ) + ) + (set_local $27 + (i32.add + (get_local $7) + (i32.const 60) + ) + ) + (set_local $28 + (i32.add + (get_local $7) + (i32.const 56) + ) + ) + (set_local $29 + (i32.add + (get_local $7) + (i32.const 52) + ) + ) + (set_local $30 + (i32.add + (get_local $7) + (i32.const 48) + ) + ) + (set_local $31 + (i32.add + (get_local $7) + (i32.const 44) + ) + ) + (set_local $32 + (i32.add + (get_local $7) + (i32.const 40) + ) + ) + (set_local $33 + (i32.add + (get_local $7) + (i32.const 36) + ) + ) + (set_local $34 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (set_local $35 + (i32.add + (get_local $7) + (i32.const 28) + ) + ) + (set_local $36 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (set_local $37 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + (set_local $38 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (set_local $39 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (set_local $40 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $41 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $11 + (get_local $7) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 128) + ) + ) + (tee_local $42 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $9) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $42) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (block $switch-default + (block $switch-case26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (block $switch-case18 + (block $switch-case17 + (block $switch-case16 + (block $switch-case14 + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (block $switch-case10 + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case5 + (block $switch-case4 + (block $switch-case1 + (block $switch-case + (br_table $switch-case26 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-case1 $switch-default $switch-case7 $switch-default $switch-case8 $switch-default $switch-case9 $switch-case10 $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-case18 $switch-case19 $switch-case20 $switch-default $switch-default $switch-default $switch-case23 $switch-case25 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-case1 $switch-case4 $switch-case5 $switch-case5 $switch-default $switch-default $switch-case1 $switch-default $switch-case11 $switch-default $switch-default $switch-case12 $switch-case14 $switch-default $switch-case16 $switch-default $switch-case17 $switch-default $switch-case14 $switch-default $switch-default $switch-case21 $switch-case22 $switch-case24 $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $12) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (set_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $14) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $15) + (i32.load + (get_local $2) + ) + ) + (set_local $6 + (i32.add + (tee_local $2 + (if i32 + (tee_local $9 + (i32.lt_s + (tee_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (i32.shl + (if i32 + (get_local $9) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $14) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $15) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $2) + (get_local $6) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $16) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $16) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 12) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $17) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $18) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $18) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7336) + (i32.const 7368) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $19) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $20) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $19) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $20) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7368) + (i32.const 7400) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $21) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $21) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $22) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $22) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $23) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 28) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $24) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $24) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $25) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $25) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 4) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $26) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $26) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $27) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $27) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $28) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $29) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $28) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $29) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7400) + (i32.const 7444) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $30) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $31) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $30) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $31) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7444) + (i32.const 7464) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $32) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $32) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (get_local $5) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $33) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $34) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $33) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $34) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7464) + (i32.const 7496) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $35) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $35) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (set_local $6 + (i32.load offset=20 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $36) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $37) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $36) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $37) + ) + ) + (set_local $0 + (call_indirect $FUNCSIG$iiiiiii + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (get_local $6) + (i32.const 63) + ) + (i32.const 240) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $38) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $39) + (i32.load + (get_local $2) + ) + ) + (set_local $6 + (i32.add + (tee_local $2 + (if i32 + (tee_local $9 + (i32.lt_s + (tee_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (i32.shl + (if i32 + (get_local $9) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $38) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $39) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $2) + (get_local $6) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $40) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $40) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $41) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $11) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $11) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 144) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 132) + ) + ) + (set_local $10 + (i32.add + (get_local $7) + (i32.const 116) + ) + ) + (set_local $12 + (i32.add + (get_local $7) + (i32.const 124) + ) + ) + (set_local $13 + (i32.add + (get_local $7) + (i32.const 120) + ) + ) + (set_local $14 + (i32.add + (get_local $7) + (i32.const 112) + ) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 108) + ) + ) + (set_local $16 + (i32.add + (get_local $7) + (i32.const 104) + ) + ) + (set_local $17 + (i32.add + (get_local $7) + (i32.const 100) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 96) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 92) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 88) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 84) + ) + ) + (set_local $22 + (i32.add + (get_local $7) + (i32.const 80) + ) + ) + (set_local $23 + (i32.add + (get_local $7) + (i32.const 76) + ) + ) + (set_local $24 + (i32.add + (get_local $7) + (i32.const 72) + ) + ) + (set_local $25 + (i32.add + (get_local $7) + (i32.const 68) + ) + ) + (set_local $26 + (i32.add + (get_local $7) + (i32.const 64) + ) + ) + (set_local $27 + (i32.add + (get_local $7) + (i32.const 60) + ) + ) + (set_local $28 + (i32.add + (get_local $7) + (i32.const 56) + ) + ) + (set_local $29 + (i32.add + (get_local $7) + (i32.const 52) + ) + ) + (set_local $30 + (i32.add + (get_local $7) + (i32.const 48) + ) + ) + (set_local $31 + (i32.add + (get_local $7) + (i32.const 44) + ) + ) + (set_local $32 + (i32.add + (get_local $7) + (i32.const 40) + ) + ) + (set_local $33 + (i32.add + (get_local $7) + (i32.const 36) + ) + ) + (set_local $34 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (set_local $35 + (i32.add + (get_local $7) + (i32.const 28) + ) + ) + (set_local $36 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (set_local $37 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + (set_local $38 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (set_local $39 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (set_local $40 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $41 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $11 + (get_local $7) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 128) + ) + ) + (tee_local $42 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $9) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $42) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (block $switch-default + (block $switch-case26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (block $switch-case18 + (block $switch-case17 + (block $switch-case16 + (block $switch-case14 + (block $switch-case13 + (block $switch-case12 + (block $switch-case11 + (block $switch-case10 + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case5 + (block $switch-case4 + (block $switch-case1 + (block $switch-case + (br_table $switch-case26 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-case1 $switch-default $switch-case7 $switch-default $switch-case8 $switch-default $switch-case9 $switch-case10 $switch-default $switch-default $switch-default $switch-case13 $switch-default $switch-default $switch-default $switch-default $switch-case18 $switch-case19 $switch-case20 $switch-default $switch-default $switch-default $switch-case23 $switch-case25 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-case1 $switch-case4 $switch-case5 $switch-case5 $switch-default $switch-default $switch-case1 $switch-default $switch-case11 $switch-default $switch-default $switch-case12 $switch-case14 $switch-default $switch-case16 $switch-default $switch-case17 $switch-default $switch-case14 $switch-default $switch-default $switch-case21 $switch-case22 $switch-case24 $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 37) + ) + ) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $12) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (set_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $14) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $15) + (i32.load + (get_local $2) + ) + ) + (set_local $6 + (i32.add + (tee_local $2 + (if i32 + (tee_local $9 + (i32.lt_s + (tee_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (if i32 + (get_local $9) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $14) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $15) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $2) + (get_local $6) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $16) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $16) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 12) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $17) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $18) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $18) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14419) + (i32.const 14427) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $19) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $20) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $19) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $20) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14427) + (i32.const 14435) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $21) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $21) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $22) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $22) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $23) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 28) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $24) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $24) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $25) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $25) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 4) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $26) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $26) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $27) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $27) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 8) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $28) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $29) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $28) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $29) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14435) + (i32.const 14446) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $30) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $31) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $30) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $31) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14446) + (i32.const 14451) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $32) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $32) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (get_local $5) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $33) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $34) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $33) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $34) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14451) + (i32.const 14459) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $35) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $35) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (set_local $6 + (i32.load offset=20 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $36) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $37) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $36) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $37) + ) + ) + (set_local $0 + (call_indirect $FUNCSIG$iiiiiii + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (get_local $6) + (i32.const 63) + ) + (i32.const 240) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $38) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $39) + (i32.load + (get_local $2) + ) + ) + (set_local $6 + (i32.add + (tee_local $2 + (if i32 + (tee_local $9 + (i32.lt_s + (tee_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (if i32 + (get_local $9) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $38) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $39) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $2) + (get_local $6) + ) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $40) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $40) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $41) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $41) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $11) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $11) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (get_local $1) + (get_local $8) + (get_local $4) + (get_local $9) + ) + (br $__rjti$0) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNSt3__211__money_putIcE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_Ri (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $19 + (i32.add + (get_local $10) + (i32.const 108) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 96) + ) + ) + (set_local $20 + (i32.add + (get_local $10) + (i32.const 92) + ) + ) + (set_local $12 + (i32.add + (get_local $10) + (i32.const 80) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 68) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 56) + ) + ) + (set_local $21 + (i32.add + (get_local $10) + (i32.const 52) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 40) + ) + ) + (set_local $22 + (i32.add + (get_local $10) + (i32.const 36) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 24) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $18 + (get_local $10) + ) + (i32.store + (get_local $9) + (tee_local $0 + (if i32 + (get_local $0) + (block i32 + (set_local $2 + (i32.load + (tee_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $2) + (i32.const 20928) + ) + ) + ) + ) + (set_local $2 + (if i32 + (get_local $1) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $19) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=44 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $1 + (i32.load + (get_local $19) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $11) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $11) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $11) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $11) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $11) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (get_local $0) + ) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $20) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $1 + (i32.load + (get_local $20) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $12) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $12) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $12) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (get_local $0) + ) + ) + ) + (i32.store8 + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 + (get_local $5) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $13) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $13) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $13) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $13) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $13) + ) + (call_indirect $FUNCSIG$vii + (get_local $14) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $14) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $14) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $14) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $14) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $14) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (block i32 + (set_local $2 + (i32.load + (tee_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $2) + (i32.const 20920) + ) + ) + ) + ) + (set_local $2 + (if i32 + (get_local $1) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $21) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=44 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $1 + (i32.load + (get_local $21) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $15) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $15) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $15) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $15) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + (get_local $0) + ) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $22) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $1 + (i32.load + (get_local $22) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $1) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $16) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $16) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $16) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in9 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $16) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in9) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $16) + ) + (get_local $0) + ) + ) + ) + (i32.store8 + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 + (get_local $5) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $17) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $17) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $17) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in11 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call_indirect $FUNCSIG$vii + (get_local $18) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $1 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.load offset=4 + (get_local $18) + ) + ) + (i32.store offset=8 + (get_local $1) + (i32.load offset=8 + (get_local $18) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $14 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $17 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + (set_local $18 + (i32.add + (get_local $14) + (i32.const 12) + ) + ) + (set_local $19 + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + (set_local $20 + (get_local $14) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + (tee_local $8 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $12 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $11) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $8) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $11 + (get_local $6) + ) + (set_local $8 + (i32.const 0) + ) + (block $__rjto$7 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $15 + (i32.ne + (get_local $11) + (get_local $7) + ) + ) + (block $label$break$L33 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (loop $while-in + (set_local $6 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $15) + (i32.eqz + (get_local $8) + ) + ) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (get_local $6) + ) + (set_local $9 + (if i32 + (get_local $6) + (if i32 + (i32.eq + (tee_local $9 + (if i32 + (i32.eq + (tee_local $9 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $9) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $16 + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $16 + (i32.const 0) + ) + (get_local $8) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (set_local $16 + (i32.const 1) + ) + (get_local $8) + ) + ) + ) + (set_local $8 + (tee_local $10 + (i32.load + (get_local $2) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $10) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $__rjti$5 + (i32.eqz + (get_local $16) + ) + ) + ) + (br $__rjto$0) + ) + (br_if $__rjti$5 + (get_local $16) + ) + (set_local $10 + (i32.const 0) + ) + ) + (if + (i32.eq + (i32.and + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load + (get_local $11) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 255) + ) + (i32.const 37) + ) + (block + (set_local $10 + (get_local $9) + ) + (set_local $9 + (get_local $8) + ) + (br $__rjti$2) + ) + ) + (br_if $__rjti$3 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.const 8192) + (i32.load + (get_local $11) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $12) + (tee_local $10 + (if i32 + (i32.eq + (tee_local $10 + (i32.load + (tee_local $9 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (call_indirect $FUNCSIG$iii + (get_local $12) + (i32.load + (get_local $11) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (block + (set_local $10 + (get_local $6) + ) + (set_local $6 + (get_local $8) + ) + (br $__rjti$4) + ) + (block + (i32.store + (get_local $4) + (i32.const 4) + ) + (set_local $8 + (i32.const 4) + ) + (br $while-in) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (get_local $7) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $__rjti$6) + ) + ) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (tee_local $8 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load + (get_local $13) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 48) + ) + ) + ) + (if + (i32.eq + (tee_local $15 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (get_local $7) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $__rjti$7) + ) + ) + (set_local $11 + (get_local $13) + ) + (set_local $6 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load + (get_local $15) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (br $switch) + ) + (set_local $6 + (get_local $8) + ) + (set_local $8 + (i32.const 0) + ) + ) + (set_local $13 + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $19) + (get_local $10) + ) + (i32.store + (get_local $20) + (get_local $9) + ) + (i32.store + (get_local $18) + (i32.load + (get_local $19) + ) + ) + (i32.store + (get_local $17) + (i32.load + (get_local $20) + ) + ) + (i32.store + (get_local $1) + (call_indirect $FUNCSIG$iiiiiiiii + (get_local $0) + (get_local $18) + (get_local $17) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (get_local $8) + (i32.add + (i32.and + (get_local $13) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 8) + ) + ) + (br $label$break$L33) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eq + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (get_local $7) + ) + (block + (set_local $11 + (get_local $7) + ) + (br $while-out2) + ) + ) + (br_if $while-in3 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.const 8192) + (i32.load + (get_local $11) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $6) + ) + (set_local $6 + (get_local $10) + ) + (loop $while-in5 + (set_local $13 + (if i32 + (get_local $9) + (if i32 + (i32.eq + (tee_local $8 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $9) + ) + ) + (i32.load offset=16 + (get_local $9) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $9 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (tee_local $8 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $10) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (br $__rjti$1) + ) + (if + (i32.xor + (get_local $13) + (i32.eqz + (get_local $6) + ) + ) + (block + (set_local $8 + (get_local $6) + ) + (set_local $10 + (get_local $6) + ) + ) + (br $label$break$L33) + ) + ) + (br $__rjto$1) + ) + (br_if $label$break$L33 + (get_local $13) + ) + (set_local $8 + (get_local $6) + ) + (set_local $10 + (i32.const 0) + ) + ) + (br_if $label$break$L33 + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.const 8192) + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load + (tee_local $15 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $13 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $15) + ) + ) + (i32.load + (get_local $13) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $6 + (get_local $8) + ) + (br $while-in5) + ) + (block + (i32.store + (get_local $15) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $8) + ) + (br $while-in5) + ) + ) + ) + (br $label$break$L33) + ) + (if + (i32.eq + (tee_local $8 + (i32.load + (get_local $9) + ) + ) + (i32.load + (get_local $6) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + ) + (set_local $8 + (i32.load + (get_local $4) + ) + ) + (br $label$continue$L1) + ) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + (set_local $0 + (get_local $6) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + (set_local $5 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (block $__rjti$8 + (br_if $__rjti$8 + (i32.eqz + (tee_local $3 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $1 + (if i32 + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $1) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$8) + ) + (br_if $__rjti$9 + (i32.eqz + (get_local $5) + ) + ) + ) + (br $__rjto$9) + ) + (br_if $__rjti$9 + (get_local $5) + ) + (br $__rjto$9) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_global $STACKTOP + (get_local $14) + ) + (get_local $0) + ) + (func $__ZNSt3__211__money_putIwE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_Ri (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $19 + (i32.add + (get_local $10) + (i32.const 108) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 96) + ) + ) + (set_local $20 + (i32.add + (get_local $10) + (i32.const 92) + ) + ) + (set_local $12 + (i32.add + (get_local $10) + (i32.const 80) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 68) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 56) + ) + ) + (set_local $21 + (i32.add + (get_local $10) + (i32.const 52) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 40) + ) + ) + (set_local $22 + (i32.add + (get_local $10) + (i32.const 36) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 24) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $18 + (get_local $10) + ) + (i32.store + (get_local $9) + (tee_local $0 + (if i32 + (get_local $0) + (block i32 + (set_local $0 + (i32.load + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $2) + (i32.const 20944) + ) + ) + ) + ) + (if + (get_local $1) + (block + (call_indirect $FUNCSIG$vii + (get_local $19) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=44 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $0 + (i32.load + (get_local $19) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $11) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $11) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $11) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $11) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $11) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (get_local $20) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $0 + (i32.load + (get_local $20) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $12) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $12) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $12) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + ) + ) + (i32.store + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $5) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $13) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $13) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $13) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $13) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $13) + ) + (call_indirect $FUNCSIG$vii + (get_local $14) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $14) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.load offset=4 + (get_local $14) + ) + ) + (i32.store offset=8 + (get_local $7) + (i32.load offset=8 + (get_local $14) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $14) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $14) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (block i32 + (set_local $0 + (i32.load + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $2) + (i32.const 20936) + ) + ) + ) + ) + (if + (get_local $1) + (block + (call_indirect $FUNCSIG$vii + (get_local $21) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=44 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $0 + (i32.load + (get_local $21) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $15) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $15) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $15) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $15) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (get_local $22) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $3) + (tee_local $0 + (i32.load + (get_local $22) + ) + ) + ) + (i32.store8 offset=1 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $3) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $16) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $16) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $16) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in9 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $16) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in9) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $16) + ) + ) + ) + (i32.store + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $5) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $17) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $17) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $17) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in11 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call_indirect $FUNCSIG$vii + (get_local $18) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.load offset=4 + (get_local $18) + ) + ) + (i32.store offset=8 + (get_local $7) + (i32.load offset=8 + (get_local $18) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + ) + (func $__ZNSt3__211__money_getIcE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_SF_Ri (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $19 + (i32.add + (get_local $10) + (i32.const 100) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 88) + ) + ) + (set_local $12 + (i32.add + (get_local $10) + (i32.const 76) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 64) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 52) + ) + ) + (set_local $20 + (i32.add + (get_local $10) + (i32.const 48) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 36) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 24) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $18 + (get_local $10) + ) + (i32.store + (get_local $9) + (tee_local $0 + (if i32 + (get_local $0) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $19) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 20928) + ) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $2) + (tee_local $0 + (i32.load + (get_local $19) + ) + ) + ) + (i32.store8 offset=1 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $11) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $11) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $11) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $11) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $11) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (call_indirect $FUNCSIG$vii + (get_local $12) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $12) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $12) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (i32.store8 + (get_local $3) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $13) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $5) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $5) + (i32.const 0) + ) + (get_local $5) + ) + (block i32 + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $13) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $13) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $13) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $13) + ) + (call_indirect $FUNCSIG$vii + (get_local $14) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $14) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $14) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $14) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $14) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $14) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $20) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 20920) + ) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $2) + (tee_local $0 + (i32.load + (get_local $20) + ) + ) + ) + (i32.store8 offset=1 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $15) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (get_local $8) + ) + (block i32 + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $8) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $15) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $15) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $15) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + (call_indirect $FUNCSIG$vii + (get_local $16) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $16) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $16) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in9 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $16) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in9) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $16) + ) + (i32.store8 + (get_local $3) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $17) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $5) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $5) + (i32.const 0) + ) + (get_local $5) + ) + (block i32 + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $17) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $17) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in11 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call_indirect $FUNCSIG$vii + (get_local $18) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (get_local $6) + ) + (block i32 + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $18) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $18) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $14 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $16 + (i32.add + (get_local $14) + (i32.const 16) + ) + ) + (set_local $17 + (i32.add + (get_local $14) + (i32.const 12) + ) + ) + (set_local $18 + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + (set_local $19 + (get_local $14) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $14) + (i32.const 8) + ) + ) + (tee_local $8 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $12 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $9) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $8) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + (set_local $9 + (get_local $6) + ) + (set_local $6 + (i32.const 0) + ) + (block $__rjto$7 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $15 + (i32.ne + (get_local $9) + (get_local $7) + ) + ) + (set_local $8 + (get_local $6) + ) + (block $label$break$L29 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (loop $while-in + (set_local $6 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $15) + (i32.eqz + (get_local $8) + ) + ) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $label$break$L1) + ) + ) + (set_local $8 + (get_local $6) + ) + (if + (get_local $6) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + ) + (set_local $6 + (i32.const 0) + ) + ) + (set_local $13 + (i32.eqz + (get_local $6) + ) + ) + (set_local $11 + (tee_local $10 + (i32.load + (get_local $2) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $10) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (set_local $11 + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + ) + (br_if $__rjti$5 + (i32.eqz + (get_local $13) + ) + ) + (br $__rjto$0) + ) + (br_if $__rjti$5 + (get_local $13) + ) + (set_local $10 + (i32.const 0) + ) + ) + (if + (i32.eq + (i32.and + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 255) + ) + (i32.const 37) + ) + (block + (set_local $10 + (get_local $8) + ) + (set_local $13 + (get_local $11) + ) + (br $__rjti$2) + ) + ) + (if + (i32.gt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const -1) + ) + (if + (i32.and + (i32.load16_s + (i32.add + (tee_local $11 + (i32.load + (get_local $20) + ) + ) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + (block + (set_local $8 + (get_local $6) + ) + (br $__rjti$3) + ) + ) + ) + (br_if $__rjti$4 + (i32.eq + (i32.and + (call_indirect $FUNCSIG$iii + (get_local $12) + (i32.and + (tee_local $10 + (if i32 + (i32.eq + (tee_local $10 + (i32.load + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $10) + ) + ) + ) + (i32.const 255) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const 255) + ) + (i32.and + (call_indirect $FUNCSIG$iii + (get_local $12) + (i32.load8_s + (get_local $9) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const 255) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + (set_local $8 + (i32.const 4) + ) + (br $while-in) + ) + ) + (if + (i32.eq + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (get_local $7) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $__rjti$6) + ) + ) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.shr_s + (i32.shl + (tee_local $8 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 48) + ) + ) + ) + (if + (i32.eq + (tee_local $15 + (i32.add + (get_local $9) + (i32.const 2) + ) + ) + (get_local $7) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $__rjti$7) + ) + ) + (set_local $9 + (get_local $11) + ) + (set_local $6 + (call_indirect $FUNCSIG$iiii + (get_local $12) + (i32.load8_s + (get_local $15) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $12) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (br $switch) + ) + (set_local $6 + (get_local $8) + ) + (set_local $8 + (i32.const 0) + ) + ) + (set_local $11 + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $18) + (get_local $10) + ) + (i32.store + (get_local $19) + (get_local $13) + ) + (i32.store + (get_local $17) + (i32.load + (get_local $18) + ) + ) + (i32.store + (get_local $16) + (i32.load + (get_local $19) + ) + ) + (i32.store + (get_local $1) + (call_indirect $FUNCSIG$iiiiiiiii + (get_local $0) + (get_local $17) + (get_local $16) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (get_local $8) + (i32.add + (i32.and + (get_local $11) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (i32.const 2) + ) + ) + (br $label$break$L29) + ) + (set_local $6 + (get_local $9) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eq + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (get_local $7) + ) + (block + (set_local $6 + (get_local $7) + ) + (br $while-out2) + ) + ) + (br_if $while-out2 + (i32.le_s + (tee_local $9 + (i32.load8_s + (get_local $6) + ) + ) + (i32.const -1) + ) + ) + (br_if $while-in3 + (i32.and + (i32.load16_s + (i32.add + (get_local $11) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + ) + ) + ) + (set_local $9 + (get_local $10) + ) + (loop $while-in5 + (if + (get_local $8) + (if + (i32.eq + (i32.load offset=12 + (get_local $8) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + ) + (set_local $11 + (i32.eqz + (get_local $8) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $10) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (if + (get_local $11) + (block + (set_local $11 + (get_local $9) + ) + (br $__rjto$1) + ) + (br $label$break$L29) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (set_local $9 + (i32.const 0) + ) + (br $__rjti$1) + ) + (if + (i32.xor + (get_local $11) + (i32.eqz + (get_local $9) + ) + ) + (block + (set_local $11 + (get_local $9) + ) + (set_local $10 + (get_local $9) + ) + ) + (br $label$break$L29) + ) + ) + (br $__rjto$1) + ) + (br_if $label$break$L29 + (get_local $11) + ) + (set_local $11 + (get_local $9) + ) + (set_local $10 + (i32.const 0) + ) + ) + (br_if $label$break$L29 + (i32.le_s + (i32.shr_s + (i32.shl + (i32.and + (tee_local $9 + (if i32 + (i32.eq + (tee_local $9 + (i32.load + (tee_local $13 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $15 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $9) + ) + ) + ) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $label$break$L29 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $20) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $9) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + ) + ) + (if + (i32.eq + (tee_local $9 + (i32.load + (get_local $13) + ) + ) + (i32.load + (get_local $15) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $9 + (get_local $11) + ) + (br $while-in5) + ) + (block + (i32.store + (get_local $13) + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (set_local $9 + (get_local $11) + ) + (br $while-in5) + ) + ) + ) + (br $label$break$L29) + ) + (if + (i32.eq + (tee_local $10 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $11) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + ) + (set_local $9 + (get_local $6) + ) + (set_local $6 + (i32.load + (get_local $4) + ) + ) + (br $label$continue$L1) + ) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + (set_local $0 + (get_local $6) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + (br $__rjto$7) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $3 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (block $__rjti$8 + (br_if $__rjti$8 + (i32.eqz + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $1) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$8) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (get_local $3) + ) + ) + (br $__rjto$9) + ) + (br_if $__rjti$9 + (get_local $3) + ) + (br $__rjto$9) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_global $STACKTOP + (get_local $14) + ) + (get_local $0) + ) + (func $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (set_local $16 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $13 + (get_local $16) + ) + (set_local $17 + (if i32 + (i32.gt_u + (tee_local $11 + (i32.div_s + (i32.sub + (get_local $3) + (get_local $2) + ) + (i32.const 12) + ) + ) + (i32.const 100) + ) + (if i32 + (tee_local $13 + (call $_malloc + (get_local $11) + ) + ) + (get_local $13) + (block i32 + (set_local $13 + (i32.const 0) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + (set_local $9 + (get_local $2) + ) + (set_local $12 + (i32.const 0) + ) + (set_local $7 + (get_local $13) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $9) + (get_local $3) + ) + (block + (set_local $7 + (get_local $11) + ) + (br $while-out) + ) + ) + (if + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 1) + ) + (block + (i32.store8 + (get_local $7) + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const -1) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $11 + (get_local $12) + ) + (set_local $12 + (get_local $7) + ) + (loop $label$continue$L17 + (block $label$break$L17 + (set_local $10 + (if i32 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $7 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $7) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (set_local $14 + (if i32 + (tee_local $7 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $8 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $7) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (set_local $8 + (i32.load + (get_local $0) + ) + ) + (br_if $label$break$L17 + (i32.eqz + (i32.and + (i32.ne + (get_local $12) + (i32.const 0) + ) + (i32.xor + (get_local $10) + (get_local $14) + ) + ) + ) + ) + (set_local $7 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $8) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $7) + ) + ) + ) + (set_local $18 + (if i32 + (get_local $6) + (get_local $7) + (call_indirect $FUNCSIG$iii + (get_local $4) + (get_local $7) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $4) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (get_local $2) + ) + (set_local $14 + (get_local $13) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $10) + (get_local $3) + ) + (block + (block $do-once2 + (if + (i32.eq + (i32.load8_s + (get_local $14) + ) + (i32.const 1) + ) + (block + (set_local $15 + (i32.load + (i32.add + (tee_local $15 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $19 + (i32.add + (get_local $10) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $10) + ) + (get_local $10) + ) + ) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (set_local $15 + (call_indirect $FUNCSIG$iii + (get_local $4) + (get_local $15) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $4) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (if + (i32.ne + (get_local $18) + (get_local $15) + ) + (block + (i32.store8 + (get_local $14) + (i32.const 0) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const -1) + ) + ) + (br $do-once2) + ) + ) + (set_local $8 + (if i32 + (i32.eq + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $10) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $14) + (i32.const 2) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const -1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $14 + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (set_local $9 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (if + (i32.eq + (tee_local $10 + (i32.load + (tee_local $8 + (i32.add + (tee_local $9 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $9) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $11) + (get_local $12) + ) + (i32.const 1) + ) + (block + (set_local $9 + (get_local $2) + ) + (set_local $8 + (get_local $13) + ) + ) + (block + (set_local $9 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (loop $while-in5 + (if + (i32.eq + (get_local $9) + (get_local $3) + ) + (block + (set_local $9 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (if + (i32.eq + (i32.load8_s + (get_local $8) + ) + (i32.const 2) + ) + (if + (i32.ne + (tee_local $10 + (if i32 + (i32.lt_s + (tee_local $10 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (set_local $0 + (if i32 + (get_local $8) + (if i32 + (i32.eq + (tee_local $4 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $7) + ) + ) + (if + (i32.eq + (tee_local $4 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $7) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (loop $while-in11 + (br_if $__rjti$2 + (i32.eq + (get_local $2) + (get_local $3) + ) + ) + (if + (i32.ne + (i32.load8_s + (get_local $13) + ) + (i32.const 2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + (set_local $13 + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + (call $_free + (get_local $17) + ) + (set_global $STACKTOP + (get_local $16) + ) + (get_local $2) + ) + (func $__ZNSt3__211__money_getIwE13__gather_infoEbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_SJ_Ri (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $19 + (i32.add + (get_local $10) + (i32.const 100) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 88) + ) + ) + (set_local $12 + (i32.add + (get_local $10) + (i32.const 76) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 64) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 52) + ) + ) + (set_local $20 + (i32.add + (get_local $10) + (i32.const 48) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 36) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 24) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $18 + (get_local $10) + ) + (i32.store + (get_local $9) + (tee_local $0 + (if i32 + (get_local $0) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $19) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 20944) + ) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $2) + (tee_local $0 + (i32.load + (get_local $19) + ) + ) + ) + (i32.store8 offset=1 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $11) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $11) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $11) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $11) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $11) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (call_indirect $FUNCSIG$vii + (get_local $12) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.load offset=4 + (get_local $12) + ) + ) + (i32.store offset=8 + (get_local $7) + (i32.load offset=8 + (get_local $12) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (i32.store + (get_local $3) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $13) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $5) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $5) + (i32.const 0) + ) + (get_local $5) + ) + (block i32 + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $13) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $13) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $13) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $13) + ) + (call_indirect $FUNCSIG$vii + (get_local $14) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.load + (get_local $14) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.load offset=4 + (get_local $14) + ) + ) + (i32.store offset=8 + (get_local $6) + (i32.load offset=8 + (get_local $14) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $14) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $14) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (block i32 + (call_indirect $FUNCSIG$vii + (get_local $20) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 20936) + ) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store8 + (get_local $2) + (tee_local $0 + (i32.load + (get_local $20) + ) + ) + ) + (i32.store8 offset=1 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + ) + (i32.store8 offset=2 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + ) + (i32.store8 offset=3 + (get_local $2) + (i32.shr_s + (get_local $0) + (i32.const 24) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $15) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $8) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $15) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.load offset=4 + (get_local $15) + ) + ) + (i32.store offset=8 + (get_local $8) + (i32.load offset=8 + (get_local $15) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $15) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $15) + ) + (call_indirect $FUNCSIG$vii + (get_local $16) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $7) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $16) + ) + ) + (i32.store offset=4 + (get_local $7) + (i32.load offset=4 + (get_local $16) + ) + ) + (i32.store offset=8 + (get_local $7) + (i32.load offset=8 + (get_local $16) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in9 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $16) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in9) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $16) + ) + (i32.store + (get_local $3) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $17) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store8 + (i32.load + (get_local $5) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $5) + (i32.const 0) + ) + (get_local $5) + ) + (block i32 + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (get_local $5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.load + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $17) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $17) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in11 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $17) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $17) + ) + (call_indirect $FUNCSIG$vii + (get_local $18) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.load + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.load offset=4 + (get_local $18) + ) + ) + (i32.store offset=8 + (get_local $6) + (i32.load offset=8 + (get_local $18) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $18) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $18) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + ) + (func $___udivmoddi4 (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (set_local $17 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $13 + (get_local $17) + ) + (set_local $18 + (if i32 + (i32.gt_u + (tee_local $11 + (i32.div_s + (i32.sub + (get_local $3) + (get_local $2) + ) + (i32.const 12) + ) + ) + (i32.const 100) + ) + (if i32 + (tee_local $13 + (call $_malloc + (get_local $11) + ) + ) + (get_local $13) + (block i32 + (set_local $13 + (i32.const 0) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + ) + (set_local $10 + (get_local $2) + ) + (set_local $12 + (i32.const 0) + ) + (set_local $7 + (get_local $13) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $10) + (get_local $3) + ) + (block + (set_local $7 + (get_local $12) + ) + (set_local $12 + (get_local $11) + ) + (br $while-out) + ) + ) + (if + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $10) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $10) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 1) + ) + (block + (i32.store8 + (get_local $7) + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const -1) + ) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $11 + (get_local $7) + ) + (loop $label$continue$L17 + (block $label$break$L17 + (if + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $8) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (set_local $8 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $8 + (i32.const 0) + ) + ) + (if + (tee_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + (set_local $9 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.and + (i32.ne + (get_local $12) + (i32.const 0) + ) + (i32.xor + (i32.eqz + (get_local $8) + ) + (tee_local $8 + (i32.eqz + (get_local $7) + ) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $8) + ) + (set_local $4 + (get_local $9) + ) + (br $label$break$L17) + ) + ) + (set_local $16 + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $9) + ) + ) + (i32.load offset=16 + (get_local $9) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $7) + ) + ) + ) + (i32.const 255) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (set_local $16 + (call_indirect $FUNCSIG$iii + (get_local $4) + (get_local $16) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $4) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (get_local $2) + ) + (set_local $14 + (get_local $13) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $9) + (get_local $3) + ) + (block + (block $do-once2 + (if + (i32.eq + (i32.load8_s + (get_local $14) + ) + (i32.const 1) + ) + (block + (set_local $15 + (i32.load8_s + (i32.add + (tee_local $15 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $19 + (i32.add + (get_local $9) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $9) + ) + (get_local $9) + ) + ) + (get_local $10) + ) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (set_local $15 + (call_indirect $FUNCSIG$iii + (get_local $4) + (get_local $15) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $4) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (if + (i32.ne + (i32.and + (get_local $16) + (i32.const 255) + ) + (i32.and + (get_local $15) + (i32.const 255) + ) + ) + (block + (i32.store8 + (get_local $14) + (i32.const 0) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const -1) + ) + ) + (br $do-once2) + ) + ) + (set_local $8 + (if i32 + (i32.eq + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $19) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + (get_local $7) + ) + (block i32 + (i32.store8 + (get_local $14) + (i32.const 2) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const -1) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + (set_local $14 + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (set_local $10 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (if + (i32.eq + (tee_local $10 + (i32.load + (tee_local $8 + (i32.add + (tee_local $9 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $9) + ) + ) + (drop + (call_indirect $FUNCSIG$ii + (get_local $9) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $9) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $11) + (get_local $12) + ) + (i32.const 1) + ) + (block + (set_local $8 + (get_local $2) + ) + (set_local $10 + (get_local $13) + ) + ) + (block + (set_local $10 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (loop $while-in5 + (if + (i32.eq + (get_local $8) + (get_local $3) + ) + (block + (set_local $10 + (get_local $7) + ) + (br $label$continue$L17) + ) + ) + (if + (i32.eq + (i32.load8_s + (get_local $10) + ) + (i32.const 2) + ) + (if + (i32.ne + (tee_local $9 + (if i32 + (i32.lt_s + (tee_local $9 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $9) + (i32.const 255) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store8 + (get_local $10) + (i32.const 0) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const -1) + ) + ) + ) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (if + (get_local $4) + (if + (i32.eq + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (set_local $4 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (get_local $6) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (loop $while-in11 + (br_if $__rjti$2 + (i32.eq + (get_local $2) + (get_local $3) + ) + ) + (if + (i32.ne + (i32.load8_s + (get_local $13) + ) + (i32.const 2) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + (set_local $13 + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + (call $_free + (get_local $18) + ) + (set_global $STACKTOP + (get_local $17) + ) + (get_local $2) + ) + (func $_mbsrtowcs (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $4 + (i32.load + (get_local $1) + ) + ) + (set_local $3 + (block $__rjto$2 i32 + (block $__rjti$2 + (br_if $__rjti$2 + (i32.eqz + (get_local $3) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (tee_local $5 + (i32.load + (get_local $3) + ) + ) + ) + ) + (br $__rjto$2 + (if i32 + (get_local $0) + (block i32 + (i32.store + (get_local $3) + (i32.const 0) + ) + (set_local $6 + (get_local $0) + ) + (set_local $7 + (get_local $2) + ) + (set_local $15 + (get_local $5) + ) + (set_local $9 + (get_local $4) + ) + (i32.const 37) + ) + (block i32 + (set_local $14 + (get_local $2) + ) + (set_local $12 + (get_local $5) + ) + (set_local $10 + (get_local $4) + ) + (i32.const 16) + ) + ) + ) + ) + (if i32 + (get_local $0) + (block i32 + (set_local $17 + (get_local $0) + ) + (set_local $16 + (get_local $2) + ) + (set_local $11 + (get_local $4) + ) + (i32.const 6) + ) + (block i32 + (set_local $13 + (get_local $2) + ) + (set_local $8 + (get_local $4) + ) + (i32.const 7) + ) + ) + ) + ) + (block $__rjto$12 + (block $__rjti$12 + (block $__rjti$11 + (block $__rjti$10 + (block $__rjti$9 + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (loop $label$continue$L7 + (if + (i32.eq + (get_local $3) + (i32.const 6) + ) + (block + (if + (get_local $16) + (block + (set_local $6 + (get_local $17) + ) + (set_local $4 + (get_local $16) + ) + (set_local $3 + (get_local $11) + ) + ) + (block + (set_local $3 + (get_local $11) + ) + (br $__rjti$6) + ) + ) + (loop $while-in + (block $while-out + (block $do-once + (if + (i32.lt_u + (i32.add + (i32.and + (tee_local $7 + (i32.load8_s + (get_local $3) + ) + ) + (i32.const 255) + ) + (i32.const -1) + ) + (i32.const 127) + ) + (if + (i32.and + (i32.gt_u + (get_local $4) + (i32.const 4) + ) + (i32.eqz + (i32.and + (get_local $3) + (i32.const 3) + ) + ) + ) + (block + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in1 + (br_if $__rjti$1 + (i32.and + (i32.or + (i32.add + (tee_local $7 + (i32.load + (get_local $3) + ) + ) + (i32.const -16843009) + ) + (get_local $7) + ) + (i32.const -2139062144) + ) + ) + (i32.store + (get_local $6) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.load8_u offset=1 + (get_local $3) + ) + ) + (i32.store offset=8 + (get_local $6) + (i32.load8_u offset=2 + (get_local $3) + ) + ) + (set_local $7 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.store offset=12 + (get_local $6) + (i32.load8_u offset=3 + (get_local $3) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + (i32.const 4) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $3 + (get_local $7) + ) + (br $while-in1) + ) + (block + (set_local $3 + (get_local $7) + ) + (set_local $6 + (get_local $5) + ) + (br $__rjti$0) + ) + ) + ) + ) + (set_local $7 + (i32.load8_u + (get_local $3) + ) + ) + (br $do-once) + ) + (set_local $7 + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (i32.add + (tee_local $5 + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 127) + ) + (block + (set_local $7 + (get_local $4) + ) + (br $while-out) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (get_local $6) + (get_local $5) + ) + (br_if $__rjti$6 + (i32.eqz + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.add + (get_local $5) + (i32.const -194) + ) + ) + (i32.const 50) + ) + (block + (set_local $0 + (get_local $6) + ) + (set_local $14 + (get_local $7) + ) + (br $__rjti$11) + ) + ) + (set_local $15 + (i32.load + (i32.add + (i32.shl + (get_local $4) + (i32.const 2) + ) + (i32.const 2496) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $3 + (i32.const 37) + ) + (br $label$continue$L7) + ) + (block + (if + (i32.eq + (get_local $3) + (i32.const 7) + ) + (block + (if + (i32.lt_u + (i32.add + (i32.and + (tee_local $5 + (i32.load8_s + (get_local $8) + ) + ) + (i32.const 255) + ) + (i32.const -1) + ) + (i32.const 127) + ) + (if + (i32.and + (get_local $8) + (i32.const 3) + ) + (block + (set_local $3 + (get_local $13) + ) + (set_local $4 + (get_local $8) + ) + ) + (block + (set_local $5 + (i32.and + (tee_local $3 + (i32.load + (get_local $8) + ) + ) + (i32.const 255) + ) + ) + (if + (i32.and + (i32.or + (i32.add + (get_local $3) + (i32.const -16843009) + ) + (get_local $3) + ) + (i32.const -2139062144) + ) + (block + (set_local $3 + (get_local $13) + ) + (set_local $4 + (get_local $8) + ) + ) + (block + (set_local $3 + (get_local $13) + ) + (set_local $4 + (get_local $8) + ) + (loop $while-in3 + (set_local $3 + (i32.add + (get_local $3) + (i32.const -4) + ) + ) + (br_if $while-in3 + (i32.eqz + (i32.and + (i32.or + (i32.add + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + (i32.const -16843009) + ) + (get_local $5) + ) + (i32.const -2139062144) + ) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $13) + ) + (set_local $4 + (get_local $8) + ) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $5 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 127) + ) + (block + (set_local $13 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (set_local $8 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (set_local $3 + (i32.const 7) + ) + (br $label$continue$L7) + ) + (block + (set_local $14 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + ) + ) + (br_if $__rjti$11 + (i32.gt_u + (tee_local $4 + (i32.add + (get_local $5) + (i32.const -194) + ) + ) + (i32.const 50) + ) + ) + (set_local $12 + (i32.load + (i32.add + (i32.shl + (get_local $4) + (i32.const 2) + ) + (i32.const 2496) + ) + ) + ) + (set_local $10 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $3 + (i32.const 16) + ) + (br $label$continue$L7) + ) + (if + (i32.eq + (get_local $3) + (i32.const 16) + ) + (block + (br_if $__rjti$3 + (i32.gt_u + (i32.or + (i32.add + (tee_local $3 + (i32.shr_u + (i32.load8_u + (get_local $10) + ) + (i32.const 3) + ) + ) + (i32.const -16) + ) + (i32.add + (get_local $3) + (i32.shr_s + (get_local $12) + (i32.const 26) + ) + ) + ) + (i32.const 7) + ) + ) + (set_local $8 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (if + (i32.and + (get_local $12) + (i32.const 33554432) + ) + (block + (br_if $__rjti$4 + (i32.ne + (i32.and + (i32.load8_s + (get_local $8) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (set_local $8 + (i32.add + (get_local $10) + (i32.const 2) + ) + ) + (if + (i32.and + (get_local $12) + (i32.const 524288) + ) + (block + (br_if $__rjti$5 + (i32.ne + (i32.and + (i32.load8_s + (get_local $8) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (set_local $8 + (i32.add + (get_local $10) + (i32.const 3) + ) + ) + ) + ) + ) + ) + (set_local $13 + (i32.add + (get_local $14) + (i32.const -1) + ) + ) + (set_local $3 + (i32.const 7) + ) + (br $label$continue$L7) + ) + (if + (i32.eq + (get_local $3) + (i32.const 37) + ) + (block + (br_if $__rjti$7 + (i32.gt_u + (i32.or + (i32.add + (tee_local $4 + (i32.shr_u + (tee_local $3 + (i32.load8_u + (get_local $9) + ) + ) + (i32.const 3) + ) + ) + (i32.const -16) + ) + (i32.add + (get_local $4) + (i32.shr_s + (get_local $15) + (i32.const 26) + ) + ) + ) + (i32.const 7) + ) + ) + (set_local $11 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (if + (i32.lt_s + (tee_local $3 + (i32.or + (i32.add + (get_local $3) + (i32.const -128) + ) + (i32.shl + (get_local $15) + (i32.const 6) + ) + ) + ) + (i32.const 0) + ) + (block + (br_if $__rjti$8 + (i32.ne + (i32.and + (tee_local $4 + (i32.load8_u + (get_local $11) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (set_local $11 + (i32.add + (get_local $9) + (i32.const 2) + ) + ) + (if + (i32.lt_s + (tee_local $3 + (i32.or + (i32.add + (get_local $4) + (i32.const -128) + ) + (i32.shl + (get_local $3) + (i32.const 6) + ) + ) + ) + (i32.const 0) + ) + (block + (br_if $__rjti$9 + (i32.ne + (i32.and + (tee_local $4 + (i32.load8_u + (get_local $11) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (set_local $3 + (i32.or + (i32.add + (get_local $4) + (i32.const -128) + ) + (i32.shl + (get_local $3) + (i32.const 6) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $9) + (i32.const 3) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $3) + ) + (set_local $17 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $16 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (set_local $3 + (i32.const 6) + ) + (br $label$continue$L7) + ) + ) + ) + ) + (br $label$continue$L7) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (br $__rjti$10) + ) + (set_local $3 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (br $__rjti$10) + ) + (set_local $3 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (br $__rjti$10) + ) + (i32.store + (get_local $1) + (get_local $3) + ) + (br $__rjto$12) + ) + (set_local $0 + (get_local $6) + ) + (set_local $14 + (get_local $7) + ) + (set_local $12 + (get_local $15) + ) + (set_local $3 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (br $__rjti$10) + ) + (set_local $0 + (get_local $6) + ) + (set_local $3 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (br $__rjti$12) + ) + (set_local $0 + (get_local $6) + ) + (set_local $3 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (br $__rjti$12) + ) + (br_if $__rjti$12 + (get_local $12) + ) + ) + (br_if $__rjti$12 + (i32.load8_s + (get_local $3) + ) + ) + (if + (get_local $0) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (get_local $14) + ) + ) + (br $__rjto$12) + ) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (set_local $2 + (if i32 + (get_local $0) + (block i32 + (i32.store + (get_local $1) + (get_local $3) + ) + (i32.const -1) + ) + (i32.const -1) + ) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__211__money_putIcE8__formatEPcRS2_S3_jPKcS5_RKNS_5ctypeIcEEbRKNS_10money_base7patternEccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESL_SL_i (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (set_local $21 + (i32.add + (get_local $13) + (i32.const 11) + ) + ) + (set_local $22 + (i32.add + (get_local $13) + (i32.const 4) + ) + ) + (set_local $26 + (i32.add + (get_local $12) + (i32.const 11) + ) + ) + (set_local $27 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (set_local $28 + (i32.eqz + (i32.and + (get_local $3) + (i32.const 512) + ) + ) + ) + (set_local $29 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $30 + (i32.gt_s + (get_local $14) + (i32.const 0) + ) + ) + (set_local $23 + (i32.add + (get_local $11) + (i32.const 11) + ) + ) + (set_local $24 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (set_local $19 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $19) + (i32.const 4) + ) + (block + (block $label$break$L4 + (block $switch-default + (block $switch-case16 + (block $switch-case4 + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-case4 $switch-case1 $switch-case16 $switch-default + (i32.load8_s + (i32.add + (get_local $8) + (get_local $19) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (br $label$break$L4) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (set_local $15 + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 32) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $16 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $16) + (get_local $15) + ) + (br $label$break$L4) + ) + (if + (if i32 + (tee_local $16 + (i32.lt_s + (tee_local $15 + (i32.load8_s + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $22) + ) + (i32.and + (get_local $15) + (i32.const 255) + ) + ) + (block + (set_local $15 + (i32.load8_s + (if i32 + (get_local $16) + (i32.load + (get_local $13) + ) + (get_local $13) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $16 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $16) + (get_local $15) + ) + ) + ) + (br $label$break$L4) + ) + (if + (i32.eqz + (i32.or + (get_local $28) + (i32.eqz + (tee_local $18 + (if i32 + (tee_local $16 + (i32.lt_s + (tee_local $15 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $27) + ) + (i32.and + (get_local $15) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (block + (set_local $18 + (i32.add + (tee_local $15 + (if i32 + (get_local $16) + (i32.load + (get_local $12) + ) + (get_local $12) + ) + ) + (get_local $18) + ) + ) + (set_local $16 + (i32.load + (get_local $2) + ) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $15) + (get_local $18) + ) + (block + (i32.store8 + (get_local $16) + (i32.load8_s + (get_local $15) + ) + ) + (set_local $16 + (i32.add + (get_local $16) + (i32.const 1) + ) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $16) + ) + ) + ) + (br $label$break$L4) + ) + (set_local $25 + (i32.load + (get_local $2) + ) + ) + (set_local $4 + (tee_local $18 + (if i32 + (get_local $7) + (i32.add + (get_local $4) + (i32.const 1) + ) + (get_local $4) + ) + ) + ) + (loop $while-in6 + (block $while-out5 + (br_if $while-out5 + (i32.ge_u + (get_local $4) + (get_local $5) + ) + ) + (br_if $while-out5 + (i32.le_s + (tee_local $15 + (i32.load8_s + (get_local $4) + ) + ) + (i32.const -1) + ) + ) + (if + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $29) + ) + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + ) + (i32.const 2048) + ) + (block + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (br $while-in6) + ) + ) + ) + ) + (if + (get_local $30) + (block + (set_local $15 + (get_local $14) + ) + (loop $while-in8 + (if + (i32.and + (i32.gt_u + (get_local $4) + (get_local $18) + ) + (tee_local $16 + (i32.gt_s + (get_local $15) + (i32.const 0) + ) + ) + ) + (block + (set_local $16 + (i32.load8_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $17 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $17) + (get_local $16) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const -1) + ) + ) + (br $while-in8) + ) + ) + ) + (set_local $17 + (if i32 + (get_local $16) + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const 0) + ) + ) + (loop $while-in10 + (i32.store + (get_local $2) + (i32.add + (tee_local $16 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.gt_s + (get_local $15) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $16) + (get_local $17) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const -1) + ) + ) + (br $while-in10) + ) + ) + ) + (i32.store8 + (get_local $16) + (get_local $9) + ) + ) + ) + (block $label$break$L35 + (if + (i32.eq + (get_local $4) + (get_local $18) + ) + (block + (set_local $4 + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $15 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $15) + (get_local $4) + ) + ) + (block + (set_local $15 + (if i32 + (if i32 + (tee_local $17 + (i32.lt_s + (tee_local $15 + (i32.load8_s + (get_local $23) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $24) + ) + (i32.and + (get_local $15) + (i32.const 255) + ) + ) + (block i32 + (set_local $16 + (get_local $4) + ) + (set_local $4 + (i32.load8_s + (if i32 + (get_local $17) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + ) + ) + (set_local $17 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $16 + (get_local $4) + ) + (set_local $4 + (i32.const -1) + ) + (set_local $17 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (loop $while-in13 + (br_if $label$break$L35 + (i32.eq + (get_local $16) + (get_local $18) + ) + ) + (if + (i32.eq + (get_local $17) + (get_local $4) + ) + (block + (i32.store + (get_local $2) + (i32.add + (tee_local $4 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $4) + (get_local $10) + ) + (set_local $17 + (if i32 + (i32.lt_u + (tee_local $15 + (i32.add + (get_local $15) + (i32.const 1) + ) + ) + (if i32 + (tee_local $20 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $23) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $24) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (block i32 + (if + (i32.eq + (tee_local $4 + (i32.load8_s + (i32.add + (if i32 + (get_local $20) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + (get_local $15) + ) + ) + ) + (i32.const 127) + ) + (set_local $4 + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $4 + (get_local $17) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $20 + (i32.load8_s + (tee_local $16 + (i32.add + (get_local $16) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $31 + (i32.load + (get_local $2) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $31) + (get_local $20) + ) + (set_local $17 + (i32.add + (get_local $17) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + ) + (if + (i32.eq + (get_local $25) + (tee_local $4 + (i32.load + (get_local $2) + ) + ) + ) + (set_local $4 + (get_local $18) + ) + (block + (set_local $15 + (get_local $25) + ) + (loop $while-in15 + (if + (i32.ge_u + (get_local $15) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + (block + (set_local $4 + (get_local $18) + ) + (br $label$break$L4) + ) + (block + (set_local $16 + (i32.load8_s + (get_local $15) + ) + ) + (i32.store8 + (get_local $15) + (i32.load8_s + (get_local $4) + ) + ) + (i32.store8 + (get_local $4) + (get_local $16) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const 1) + ) + ) + (br $while-in15) + ) + ) + ) + ) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $19) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (if + (i32.gt_u + (tee_local $6 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (get_local $21) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $22) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + (block + (set_local $6 + (i32.add + (tee_local $4 + (if i32 + (get_local $5) + (i32.load + (get_local $13) + ) + (get_local $13) + ) + ) + (get_local $6) + ) + ) + (set_local $5 + (i32.load + (get_local $2) + ) + ) + (loop $while-in18 + (if + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $6) + ) + (block + (i32.store8 + (get_local $5) + (i32.load8_s + (get_local $4) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br $while-in18) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $5) + ) + ) + ) + (block $switch19 + (block $switch-default22 + (block $switch-case21 + (block $switch-case20 + (br_table $switch-case21 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-default22 $switch-case20 $switch-default22 + (i32.sub + (i32.and + (get_local $3) + (i32.const 176) + ) + (i32.const 16) + ) + ) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (br $switch19) + ) + (br $switch19) + ) + (i32.store + (get_local $1) + (get_local $0) + ) + ) + ) + (func $__ZNSt3__211__money_putIwE8__formatEPwRS2_S3_jPKwS5_RKNS_5ctypeIwEEbRKNS_10money_base7patternEwwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNSE_IwNSF_IwEENSH_IwEEEESQ_i (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (param $12 i32) (param $13 i32) (param $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (set_local $23 + (i32.add + (get_local $13) + (i32.const 11) + ) + ) + (set_local $24 + (i32.add + (get_local $13) + (i32.const 4) + ) + ) + (set_local $26 + (i32.add + (get_local $12) + (i32.const 11) + ) + ) + (set_local $27 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (set_local $28 + (i32.eqz + (i32.and + (get_local $3) + (i32.const 512) + ) + ) + ) + (set_local $29 + (i32.gt_s + (get_local $14) + (i32.const 0) + ) + ) + (set_local $30 + (i32.add + (get_local $11) + (i32.const 11) + ) + ) + (set_local $31 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (set_local $22 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $22) + (i32.const 4) + ) + (block + (block $label$break$L4 + (block $switch-default + (block $switch-case15 + (block $switch-case4 + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-case4 $switch-case1 $switch-case15 $switch-default + (i32.load8_s + (i32.add + (get_local $8) + (get_local $22) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (br $label$break$L4) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (set_local $16 + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 32) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $15 + (i32.load + (get_local $2) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $15) + (get_local $16) + ) + (br $label$break$L4) + ) + (if + (if i32 + (tee_local $15 + (i32.lt_s + (tee_local $16 + (i32.load8_s + (get_local $23) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $24) + ) + (i32.and + (get_local $16) + (i32.const 255) + ) + ) + (block + (set_local $16 + (i32.load + (if i32 + (get_local $15) + (i32.load + (get_local $13) + ) + (get_local $13) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $15 + (i32.load + (get_local $2) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $15) + (get_local $16) + ) + ) + ) + (br $label$break$L4) + ) + (if + (i32.eqz + (i32.or + (get_local $28) + (i32.eqz + (tee_local $19 + (if i32 + (tee_local $15 + (i32.lt_s + (tee_local $16 + (i32.load8_s + (get_local $26) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $27) + ) + (i32.and + (get_local $16) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (block + (set_local $18 + (i32.add + (tee_local $15 + (if i32 + (get_local $15) + (i32.load + (get_local $12) + ) + (get_local $12) + ) + ) + (i32.shl + (get_local $19) + (i32.const 2) + ) + ) + ) + (set_local $17 + (tee_local $16 + (i32.load + (get_local $2) + ) + ) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $15) + (get_local $18) + ) + (block + (i32.store + (get_local $17) + (i32.load + (get_local $15) + ) + ) + (set_local $17 + (i32.add + (get_local $17) + (i32.const 4) + ) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const 4) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $16) + (i32.shl + (get_local $19) + (i32.const 2) + ) + ) + ) + ) + ) + (br $label$break$L4) + ) + (set_local $20 + (i32.load + (get_local $2) + ) + ) + (set_local $4 + (tee_local $19 + (if i32 + (get_local $7) + (i32.add + (get_local $4) + (i32.const 4) + ) + (get_local $4) + ) + ) + ) + (loop $while-in6 + (if + (i32.lt_u + (get_local $4) + (get_local $5) + ) + (if + (call_indirect $FUNCSIG$iiii + (get_local $6) + (i32.const 2048) + (i32.load + (get_local $4) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (block + (set_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (br $while-in6) + ) + ) + ) + ) + (if + (get_local $29) + (block + (set_local $15 + (get_local $14) + ) + (loop $while-in8 + (if + (i32.and + (i32.gt_u + (get_local $4) + (get_local $19) + ) + (tee_local $16 + (i32.gt_s + (get_local $15) + (i32.const 0) + ) + ) + ) + (block + (set_local $18 + (i32.load + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (tee_local $16 + (i32.load + (get_local $2) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $16) + (get_local $18) + ) + (set_local $15 + (i32.add + (get_local $15) + (i32.const -1) + ) + ) + (br $while-in8) + ) + ) + ) + (set_local $17 + (if i32 + (get_local $16) + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const 0) + ) + ) + (set_local $16 + (i32.load + (get_local $2) + ) + ) + (set_local $18 + (get_local $15) + ) + (loop $while-in10 + (set_local $15 + (i32.add + (get_local $16) + (i32.const 4) + ) + ) + (if + (i32.gt_s + (get_local $18) + (i32.const 0) + ) + (block + (i32.store + (get_local $16) + (get_local $17) + ) + (set_local $16 + (get_local $15) + ) + (set_local $18 + (i32.add + (get_local $18) + (i32.const -1) + ) + ) + (br $while-in10) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $15) + ) + (i32.store + (get_local $16) + (get_local $9) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $19) + ) + (block + (set_local $16 + (call_indirect $FUNCSIG$iii + (get_local $6) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $2) + (tee_local $4 + (i32.add + (tee_local $15 + (i32.load + (get_local $2) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $16) + ) + ) + (block + (set_local $4 + (if i32 + (tee_local $32 + (if i32 + (tee_local $25 + (i32.lt_s + (tee_local $15 + (i32.load8_s + (get_local $30) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $31) + ) + (i32.and + (get_local $15) + (i32.const 255) + ) + ) + ) + (block i32 + (set_local $16 + (get_local $4) + ) + (set_local $15 + (i32.load8_s + (if i32 + (get_local $25) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + ) + ) + (set_local $17 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $16 + (get_local $4) + ) + (set_local $15 + (i32.const -1) + ) + (set_local $17 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (loop $while-in12 + (if + (i32.ne + (get_local $16) + (get_local $19) + ) + (block + (set_local $21 + (i32.load + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $17) + (get_local $15) + ) + (block + (i32.store + (get_local $2) + (tee_local $18 + (i32.add + (get_local $21) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $21) + (get_local $10) + ) + (set_local $17 + (if i32 + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $32) + ) + (block i32 + (if + (i32.eq + (tee_local $15 + (i32.load8_s + (i32.add + (if i32 + (get_local $25) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + (get_local $4) + ) + ) + ) + (i32.const 127) + ) + (set_local $15 + (i32.const -1) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $15 + (get_local $17) + ) + (i32.const 0) + ) + ) + ) + ) + (set_local $18 + (get_local $21) + ) + ) + (set_local $21 + (i32.load + (tee_local $16 + (i32.add + (get_local $16) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $18) + (i32.const 4) + ) + ) + (i32.store + (get_local $18) + (get_local $21) + ) + (set_local $17 + (i32.add + (get_local $17) + (i32.const 1) + ) + ) + (br $while-in12) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (get_local $20) + (get_local $4) + ) + (set_local $4 + (get_local $19) + ) + (loop $while-in14 + (if + (i32.ge_u + (get_local $20) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + ) + (block + (set_local $4 + (get_local $19) + ) + (br $label$break$L4) + ) + (block + (set_local $15 + (i32.load + (get_local $20) + ) + ) + (i32.store + (get_local $20) + (i32.load + (get_local $4) + ) + ) + (i32.store + (get_local $4) + (get_local $15) + ) + (set_local $20 + (i32.add + (get_local $20) + (i32.const 4) + ) + ) + (br $while-in14) + ) + ) + ) + ) + ) + ) + (set_local $22 + (i32.add + (get_local $22) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (if + (i32.gt_u + (tee_local $5 + (if i32 + (tee_local $4 + (i32.lt_s + (tee_local $5 + (i32.load8_s + (get_local $23) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $24) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + (block + (set_local $4 + (i32.add + (if i32 + (get_local $4) + (tee_local $13 + (i32.load + (get_local $13) + ) + ) + (get_local $13) + ) + (i32.const 4) + ) + ) + (set_local $6 + (i32.sub + (tee_local $7 + (i32.add + (get_local $13) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (get_local $4) + ) + ) + (set_local $8 + (tee_local $5 + (i32.load + (get_local $2) + ) + ) + ) + (loop $while-in17 + (if + (i32.ne + (get_local $4) + (get_local $7) + ) + (block + (i32.store + (get_local $8) + (i32.load + (get_local $4) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $5) + (i32.shl + (i32.shr_u + (get_local $6) + (i32.const 2) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block $switch18 + (block $switch-default21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case20 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-default21 $switch-case19 $switch-default21 + (i32.sub + (i32.and + (get_local $3) + (i32.const 176) + ) + (i32.const 16) + ) + ) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $2) + ) + ) + (br $switch18) + ) + (br $switch18) + ) + (i32.store + (get_local $1) + (get_local $0) + ) + ) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 352) + ) + ) + (call $__ZNSt3__29__num_getIwE19__stage2_float_prepERNS_8ios_baseEPwRwS5_ + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 184) + ) + ) + (get_local $3) + (tee_local $20 + (i32.add + (get_local $9) + (i32.const 208) + ) + ) + (tee_local $6 + (i32.add + (get_local $9) + (i32.const 200) + ) + ) + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $9) + (i32.const 172) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $9) + ) + (set_local $17 + (i32.add + (get_local $9) + (i32.const 337) + ) + ) + (set_local $19 + (i32.add + (get_local $9) + (i32.const 336) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (i32.store8 + (get_local $17) + (i32.const 1) + ) + (i32.store8 + (get_local $19) + (i32.const 69) + ) + (set_local $21 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $22 + (i32.load + (get_local $6) + ) + ) + (set_local $23 + (i32.load + (get_local $7) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L8 + (block $label$break$L8 + (set_local $7 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L8 + (i32.eqz + (get_local $7) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $7) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $7 + (if i32 + (i32.lt_s + (tee_local $7 + (i32.load8_s + (get_local $10) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (i32.shl + (get_local $7) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + (get_local $7) + ) + ) + ) + ) + (br_if $label$break$L8 + (call $__ZNSt3__29__num_getIwE19__stage2_float_loopEwRbRcPcRS4_wwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjPw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $24 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $17) + (get_local $19) + (get_local $3) + (get_local $16) + (get_local $22) + (get_local $23) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $12) + (get_local $20) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $24) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L8) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L8) + ) + ) + ) + ) + (set_local $7 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (set_local $10 + (i32.load + (get_local $15) + ) + ) + (if + (i32.eqz + (if i32 + (i32.load8_s + (get_local $17) + ) + (i32.eqz + (if i32 + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $7 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $7) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + ) + (f32.store + (get_local $5) + (f32.demote/f64 + (call $__ZNSt3__215__num_get_floatIeEET_PKcS3_Rj + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + ) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $10) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 352) + ) + ) + (call $__ZNSt3__29__num_getIwE19__stage2_float_prepERNS_8ios_baseEPwRwS5_ + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 184) + ) + ) + (get_local $3) + (tee_local $20 + (i32.add + (get_local $9) + (i32.const 208) + ) + ) + (tee_local $6 + (i32.add + (get_local $9) + (i32.const 200) + ) + ) + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $9) + (i32.const 172) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $9) + ) + (set_local $17 + (i32.add + (get_local $9) + (i32.const 337) + ) + ) + (set_local $19 + (i32.add + (get_local $9) + (i32.const 336) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (i32.store8 + (get_local $17) + (i32.const 1) + ) + (i32.store8 + (get_local $19) + (i32.const 69) + ) + (set_local $21 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $22 + (i32.load + (get_local $6) + ) + ) + (set_local $23 + (i32.load + (get_local $7) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L8 + (block $label$break$L8 + (set_local $7 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L8 + (i32.eqz + (get_local $7) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $7) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $7 + (if i32 + (i32.lt_s + (tee_local $7 + (i32.load8_s + (get_local $10) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (i32.shl + (get_local $7) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + (get_local $7) + ) + ) + ) + ) + (br_if $label$break$L8 + (call $__ZNSt3__29__num_getIwE19__stage2_float_loopEwRbRcPcRS4_wwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjPw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $24 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $17) + (get_local $19) + (get_local $3) + (get_local $16) + (get_local $22) + (get_local $23) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $12) + (get_local $20) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $7) + ) + ) + (i32.load + (get_local $24) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L8) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L8) + ) + ) + ) + ) + (set_local $7 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (set_local $10 + (i32.load + (get_local $15) + ) + ) + (if + (i32.eqz + (if i32 + (i32.load8_s + (get_local $17) + ) + (i32.eqz + (if i32 + (i32.lt_s + (get_local $7) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $7 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $7) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + ) + (f64.store + (get_local $5) + (call $__ZNSt3__215__num_get_floatIeEET_PKcS3_Rj + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $10) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 200) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $18 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw + (get_local $11) + (get_local $3) + (get_local $17) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (set_local $8 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $17) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $15) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralIyEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $5) + (get_global $tempRet0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $9) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 200) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $18 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw + (get_local $11) + (get_local $3) + (get_local $17) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (set_local $8 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $17) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $15) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__225__num_get_signed_integralIxEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + (get_local $18) + ) + ) + (i32.store offset=4 + (get_local $5) + (get_global $tempRet0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $9) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 200) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $18 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw + (get_local $11) + (get_local $3) + (get_local $17) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (set_local $8 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $17) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $15) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store16 + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralItEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + (get_local $18) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $9) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 200) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $18 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw + (get_local $11) + (get_local $3) + (get_local $17) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (set_local $8 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $17) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $15) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralImEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + (get_local $18) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $9) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 304) + ) + ) + (set_local $17 + (i32.add + (get_local $10) + (i32.const 200) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $18 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw + (get_local $11) + (get_local $3) + (get_local $17) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (set_local $8 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $19) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $13 + (if i32 + (i32.eq + (tee_local $13 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $13) + ) + ) + ) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $17) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $15) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__225__num_get_signed_integralIlEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + (get_local $18) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $9) + (get_local $4) + ) + (set_local $0 + (if i32 + (get_local $0) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 320) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 208) + ) + ) + (set_local $0 + (i32.add + (get_local $9) + (i32.const 192) + ) + ) + (set_local $7 + (i32.add + (get_local $9) + (i32.const 180) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $10) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $10) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $10) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $0) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $0) + (i32.const 19240) + ) + ) + (i32.const 13937) + (i32.const 13963) + (get_local $14) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $16 + (get_local $9) + ) + (set_local $17 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + (set_local $18 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $19 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $15) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $13 + (i32.add + (get_local $9) + (i32.const 176) + ) + ) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $18) + (get_local $17) + ) + (i32.store + (get_local $19) + (i32.const 0) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $3 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L12 + (block $label$break$L12 + (set_local $12 + (if i32 + (get_local $3) + (if i32 + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $3 + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $8 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L12 + (i32.eqz + (get_local $12) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $12) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L12) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $13) + ) + (i32.add + (get_local $0) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $15) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.add + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L12 + (call $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw + (tee_local $12 + (if i32 + (i32.eq + (tee_local $12 + (i32.load + (tee_local $20 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.const 16) + (get_local $0) + (get_local $13) + (get_local $19) + (i32.const 0) + (get_local $10) + (get_local $17) + (get_local $18) + (get_local $14) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $20) + ) + ) + (i32.load + (get_local $8) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L12) + ) + (block + (i32.store + (get_local $20) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L12) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.sub + (i32.load + (get_local $13) + ) + (get_local $0) + ) + (i32.const 0) + ) + (set_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (get_local $16) + (get_local $5) + ) + (if + (i32.ne + (call $__ZNSt3__217__libcpp_sscanf_lEPKcP15__locale_structS1_z + (get_local $0) + (get_local $8) + (i32.const 13972) + (get_local $16) + ) + (i32.const 1) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + (set_local $3 + (if i32 + (get_local $3) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $0) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $0) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $3) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $3) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $10) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (call $__ZNSt3__29__num_getIcE19__stage2_float_prepERNS_8ios_baseEPcRcS5_ + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 184) + ) + ) + (get_local $3) + (tee_local $20 + (i32.add + (get_local $9) + (i32.const 200) + ) + ) + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 199) + ) + ) + (tee_local $6 + (i32.add + (get_local $9) + (i32.const 198) + ) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $9) + (i32.const 172) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $17 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $9) + ) + (set_local $13 + (i32.add + (get_local $9) + (i32.const 197) + ) + ) + (set_local $18 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (i32.store8 + (get_local $13) + (i32.const 1) + ) + (i32.store8 + (get_local $18) + (i32.const 69) + ) + (set_local $21 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $22 + (i32.load8_s + (get_local $7) + ) + ) + (set_local $23 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L8 + (block $label$break$L8 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $6 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (get_local $6) + (br $__rjto$0) + (br $label$break$L8) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L8 + (i32.eqz + (get_local $6) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $6) + (block + (set_local $7 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $6 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (get_local $10) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + ) + ) + (br_if $label$break$L8 + (call $__ZNSt3__29__num_getIcE19__stage2_float_loopEcRbRcPcRS4_ccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjS4_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $24 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $13) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $22) + (get_local $23) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $12) + (get_local $20) + ) + ) + (if + (i32.eq + (tee_local $7 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $24) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L8) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $label$continue$L8) + ) + ) + ) + ) + (set_local $6 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (set_local $10 + (i32.load + (get_local $15) + ) + ) + (if + (i32.eqz + (if i32 + (i32.load8_s + (get_local $13) + ) + (i32.eqz + (if i32 + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $13 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $13) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + ) + (f32.store + (get_local $5) + (f32.demote/f64 + (call $__ZNSt3__215__num_get_floatIeEET_PKcS3_Rj + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + ) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $10) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $7) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (call $__ZNSt3__29__num_getIcE19__stage2_float_prepERNS_8ios_baseEPcRcS5_ + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 184) + ) + ) + (get_local $3) + (tee_local $20 + (i32.add + (get_local $9) + (i32.const 200) + ) + ) + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 199) + ) + ) + (tee_local $6 + (i32.add + (get_local $9) + (i32.const 198) + ) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $9) + (i32.const 172) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $17 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $15 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $9) + ) + (set_local $13 + (i32.add + (get_local $9) + (i32.const 197) + ) + ) + (set_local $18 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $8) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $9) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (i32.store8 + (get_local $13) + (i32.const 1) + ) + (i32.store8 + (get_local $18) + (i32.const 69) + ) + (set_local $21 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $22 + (i32.load8_s + (get_local $7) + ) + ) + (set_local $23 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L8 + (block $label$break$L8 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $6 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (get_local $6) + (br $__rjto$0) + (br $label$break$L8) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L8 + (i32.eqz + (get_local $6) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $6) + (block + (set_local $7 + (i32.const 0) + ) + (br $label$break$L8) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $16) + ) + (i32.add + (get_local $3) + (tee_local $6 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (get_local $10) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $8) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $16) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $10) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + (get_local $6) + ) + ) + ) + ) + (br_if $label$break$L8 + (call $__ZNSt3__29__num_getIcE19__stage2_float_loopEcRbRcPcRS4_ccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjS4_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $24 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $13) + (get_local $18) + (get_local $3) + (get_local $16) + (get_local $22) + (get_local $23) + (get_local $11) + (get_local $14) + (get_local $15) + (get_local $12) + (get_local $20) + ) + ) + (if + (i32.eq + (tee_local $7 + (i32.load + (get_local $6) + ) + ) + (i32.load + (get_local $24) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L8) + ) + (block + (i32.store + (get_local $6) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $label$continue$L8) + ) + ) + ) + ) + (set_local $6 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (set_local $10 + (i32.load + (get_local $15) + ) + ) + (if + (i32.eqz + (if i32 + (i32.load8_s + (get_local $13) + ) + (i32.eqz + (if i32 + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $14) + ) + (i32.const 160) + ) + (block + (set_local $13 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $15) + (tee_local $12 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $10) + (get_local $13) + ) + (set_local $10 + (get_local $12) + ) + ) + ) + ) + (f64.store + (get_local $5) + (call $__ZNSt3__215__num_get_floatIeEET_PKcS3_Rj + (get_local $3) + (i32.load + (get_local $16) + ) + (get_local $4) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $14) + (get_local $10) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $7) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 198) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $17 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc + (get_local $11) + (get_local $3) + (get_local $16) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $15) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $17) + (get_local $3) + (get_local $15) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $13) + (get_local $14) + (get_local $16) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $14) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $13) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $14) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralIyEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $15) + ) + (get_local $4) + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $5) + (get_global $tempRet0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $13) + (get_local $9) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 198) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $17 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc + (get_local $11) + (get_local $3) + (get_local $16) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $15) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $17) + (get_local $3) + (get_local $15) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $13) + (get_local $14) + (get_local $16) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $14) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $13) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $14) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__225__num_get_signed_integralIxEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $15) + ) + (get_local $4) + (get_local $17) + ) + ) + (i32.store offset=4 + (get_local $5) + (get_global $tempRet0) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $13) + (get_local $9) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNSt3__29__num_putIwE23__widen_and_group_floatEPcS2_S2_PwRS3_S4_RKNS_6localeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (set_local $16 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $10 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19240) + ) + ) + (call_indirect $FUNCSIG$vii + (tee_local $12 + (get_local $16) + ) + (tee_local $13 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19248) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L12 + (block $__rjti$0 + (if + (i32.gt_s + (i32.sub + (tee_local $18 + (get_local $2) + ) + (tee_local $6 + (block $switch i32 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $6 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $6 + (call_indirect $FUNCSIG$iii + (get_local $10) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $10) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $7) + (get_local $6) + ) + (br $switch + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load8_s + (get_local $6) + ) + (i32.const 48) + ) + (block + (block $switch1 + (block $switch-default4 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-case2 $switch-default4 + (i32.sub + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 88) + ) + ) + ) + (br $switch1) + ) + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + (set_local $8 + (call_indirect $FUNCSIG$iii + (get_local $10) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $10) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $9 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $7 + (call_indirect $FUNCSIG$iii + (get_local $10) + (i32.load8_s + (get_local $7) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $10) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $8) + (get_local $7) + ) + (set_local $7 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ge_u + (get_local $7) + (get_local $2) + ) + ) + (br_if $label$break$L12 + (i32.eqz + (call $_isxdigit_l + (i32.load8_s + (get_local $7) + ) + (call $__ZNSt3__26__clocEv) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (block + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + ) + (block + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L12) + ) + (loop $while-in7 + (br_if $label$break$L12 + (i32.ge_u + (get_local $7) + (get_local $2) + ) + ) + (br_if $label$break$L12 + (i32.eqz + (call $_isdigit_l + (i32.load8_s + (get_local $7) + ) + (call $__ZNSt3__26__clocEv) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + (set_local $17 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (block $label$break$L18 + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (tee_local $19 + (i32.add + (get_local $12) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $17) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (block + (block $label$break$L21 + (if + (i32.ne + (get_local $6) + (get_local $7) + ) + (block + (set_local $8 + (get_local $7) + ) + (set_local $9 + (get_local $6) + ) + (loop $while-in11 + (br_if $label$break$L21 + (i32.ge_u + (get_local $9) + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + ) + ) + (set_local $11 + (i32.load8_s + (get_local $9) + ) + ) + (i32.store8 + (get_local $9) + (i32.load8_s + (get_local $8) + ) + ) + (i32.store8 + (get_local $8) + (get_local $11) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + ) + (set_local $20 + (call_indirect $FUNCSIG$ii + (get_local $13) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $9 + (get_local $6) + ) + (loop $while-in13 + (if + (i32.lt_u + (get_local $9) + (get_local $7) + ) + (block + (if + (i32.and + (i32.gt_s + (tee_local $21 + (i32.load8_s + (i32.add + (if i32 + (tee_local $15 + (i32.lt_s + (tee_local $14 + (i32.load8_s + (get_local $19) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $12) + ) + (get_local $12) + ) + (get_local $8) + ) + ) + ) + (i32.const 0) + ) + (i32.eq + (get_local $11) + (get_local $21) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $11) + (get_local $20) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $8 + (i32.add + (i32.lt_u + (get_local $8) + (i32.add + (if i32 + (get_local $15) + (i32.load + (get_local $17) + ) + (i32.and + (get_local $14) + (i32.const 255) + ) + ) + (i32.const -1) + ) + ) + (get_local $8) + ) + ) + ) + ) + (set_local $14 + (call_indirect $FUNCSIG$iii + (get_local $10) + (i32.load8_s + (get_local $9) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $10) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $15 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $15) + (get_local $14) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (if + (i32.eq + (tee_local $9 + (i32.add + (get_local $3) + (i32.shl + (i32.sub + (get_local $6) + (get_local $0) + ) + (i32.const 2) + ) + ) + ) + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $6 + (get_local $9) + ) + ) + (block + (set_local $6 + (get_local $11) + ) + (loop $while-in15 + (if + (i32.ge_u + (get_local $9) + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -4) + ) + ) + ) + (block + (set_local $8 + (get_local $10) + ) + (set_local $6 + (get_local $11) + ) + (br $label$break$L18) + ) + (block + (set_local $8 + (i32.load + (get_local $9) + ) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $6) + (get_local $8) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (br $while-in15) + ) + ) + ) + ) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $10) + (get_local $6) + (get_local $7) + (i32.load + (get_local $5) + ) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $10) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $6 + (i32.add + (i32.load + (get_local $5) + ) + (i32.shl + (i32.sub + (get_local $7) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $8 + (get_local $10) + ) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in17 + (if + (i32.lt_u + (get_local $7) + (get_local $2) + ) + (block + (br_if $__rjti$1 + (i32.eq + (tee_local $6 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 46) + ) + ) + (set_local $9 + (call_indirect $FUNCSIG$iii + (get_local $10) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $8) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $6 + (i32.add + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $9) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in17) + ) + ) + ) + (br $__rjto$1) + ) + (set_local $8 + (call_indirect $FUNCSIG$ii + (get_local $13) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $6 + (i32.add + (tee_local $9 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $10) + (get_local $7) + (get_local $2) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $10) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $5 + (i32.add + (i32.load + (get_local $5) + ) + (i32.shl + (i32.sub + (get_local $18) + (get_local $7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $4) + (if i32 + (i32.eq + (get_local $1) + (get_local $2) + ) + (get_local $5) + (i32.add + (get_local $3) + (i32.shl + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const 2) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (set_global $STACKTOP + (get_local $16) + ) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 198) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $17 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc + (get_local $11) + (get_local $3) + (get_local $16) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $15) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $17) + (get_local $3) + (get_local $15) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $13) + (get_local $14) + (get_local $16) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $14) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $13) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $14) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store16 + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralItEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $15) + ) + (get_local $4) + (get_local $17) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $13) + (get_local $9) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 198) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $17 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc + (get_local $11) + (get_local $3) + (get_local $16) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $15) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $17) + (get_local $3) + (get_local $15) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $13) + (get_local $14) + (get_local $16) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $14) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $13) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $14) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__227__num_get_unsigned_integralImEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $15) + ) + (get_local $4) + (get_local $17) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $13) + (get_local $9) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $16 + (i32.add + (get_local $10) + (i32.const 198) + ) + ) + (set_local $6 + (i32.add + (get_local $10) + (i32.const 196) + ) + ) + (set_local $11 + (i32.add + (get_local $10) + (i32.const 184) + ) + ) + (set_local $7 + (i32.add + (get_local $10) + (i32.const 172) + ) + ) + (set_local $17 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 74) + ) + ) + ) + (br $switch + (i32.const 8) + ) + ) + (br $switch + (i32.const 16) + ) + ) + (br $switch + (i32.const 0) + ) + ) + (i32.const 10) + ) + ) + (call $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc + (get_local $11) + (get_local $3) + (get_local $16) + (get_local $6) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $18 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $10) + (i32.const 4) + ) + ) + (set_local $12 + (get_local $10) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $10) + (i32.const 168) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $21 + (i32.load8_s + (get_local $6) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L13 + (block $label$break$L13 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $6 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L13) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L13 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $6 + (i32.const 0) + ) + (br $label$break$L13) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $15) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $20) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $7) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $18) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $15) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $9) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L13 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $19 + (if i32 + (i32.eq + (tee_local $19 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $19) + ) + ) + ) + (i32.const 255) + ) + (get_local $17) + (get_local $3) + (get_local $15) + (get_local $12) + (get_local $21) + (get_local $11) + (get_local $13) + (get_local $14) + (get_local $16) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.load + (get_local $22) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L13) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L13) + ) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $14) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $11) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $9) + (get_local $13) + ) + (i32.const 160) + ) + (block + (set_local $8 + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $14) + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $9) + (get_local $8) + ) + (set_local $9 + (get_local $12) + ) + ) + ) + ) + (i32.store + (get_local $5) + (call $__ZNSt3__225__num_get_signed_integralIlEET_PKcS3_Rji + (get_local $3) + (i32.load + (get_local $15) + ) + (get_local $4) + (get_local $17) + ) + ) + (call $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj + (get_local $11) + (get_local $13) + (get_local $9) + (get_local $4) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRPv (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (set_local $13 + (i32.add + (get_local $9) + (i32.const 208) + ) + ) + (set_local $0 + (i32.add + (get_local $9) + (i32.const 192) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (i32.const 180) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $9) + (i32.const 196) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $10) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $10) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $7) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $10) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $0) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $0) + (i32.const 19208) + ) + ) + (i32.const 13937) + (i32.const 13963) + (get_local $13) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $6) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $6) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $15 + (get_local $9) + ) + (set_local $16 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + (set_local $17 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (set_local $18 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $6) + (tee_local $0 + (if i32 + (i32.lt_s + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $14) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $9) + (i32.const 176) + ) + ) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + ) + (i32.store + (get_local $17) + (get_local $16) + ) + (i32.store + (get_local $18) + (i32.const 0) + ) + (set_local $21 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $label$continue$L12 + (block $label$break$L12 + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $8 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (get_local $8) + (br $__rjto$0) + (br $label$break$L12) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L12 + (i32.eqz + (get_local $8) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $8) + (block + (set_local $7 + (i32.const 0) + ) + (br $label$break$L12) + ) + (set_local $7 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (i32.load + (get_local $12) + ) + (i32.add + (get_local $3) + (tee_local $8 + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (get_local $11) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $21) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $6) + (i32.shl + (get_local $8) + (i32.const 1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $6) + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.add + (i32.and + (i32.load + (get_local $14) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $12) + (i32.add + (tee_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (get_local $8) + ) + ) + ) + ) + (br_if $label$break$L12 + (call $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ + (i32.and + (tee_local $20 + (if i32 + (i32.eq + (tee_local $20 + (i32.load + (tee_local $19 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $20) + ) + ) + ) + (i32.const 255) + ) + (i32.const 16) + (get_local $3) + (get_local $12) + (get_local $18) + (i32.const 0) + (get_local $10) + (get_local $16) + (get_local $17) + (get_local $13) + ) + ) + (if + (i32.eq + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.load + (get_local $8) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L12) + ) + (block + (i32.store + (get_local $19) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $label$continue$L12) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc + (get_local $6) + (i32.sub + (i32.load + (get_local $12) + ) + (get_local $3) + ) + (i32.const 0) + ) + (set_local $3 + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $11) + ) + (i32.const 0) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (get_local $15) + (get_local $5) + ) + (if + (i32.ne + (call $__ZNSt3__217__libcpp_sscanf_lEPKcP15__locale_structS1_z + (get_local $3) + (get_local $8) + (i32.const 13972) + (get_local $15) + ) + (i32.const 1) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + (if + (get_local $0) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $7) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $0) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $6) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $10) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $0) + ) + (func $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $7 + (if i32 + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $5 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $6) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $label$break$L22 + (block $__rjti$3 + (block $__rjti$2 + (if + (tee_local $5 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $5) + ) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (if + (get_local $7) + (br $__rjti$3) + (br $__rjti$2) + ) + ) + ) + (if + (i32.eqz + (get_local $7) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + ) + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 6) + ) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L22) + ) + (if + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $3) + (i32.const 2048) + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (block + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + (set_local $3 + (i32.const 0) + ) + (br $label$break$L22) + ) + ) + (set_local $9 + (i32.shr_s + (i32.shl + (call_indirect $FUNCSIG$iiii + (get_local $3) + (get_local $6) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (tee_local $6 + (i32.load + (tee_local $7 + (i32.add + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (block i32 + (drop + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $6 + (get_local $4) + ) + (set_local $4 + (get_local $5) + ) + (set_local $7 + (get_local $5) + ) + (get_local $9) + ) + (block i32 + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $4) + ) + (set_local $4 + (get_local $5) + ) + (set_local $7 + (get_local $5) + ) + (get_local $9) + ) + ) + ) + (loop $while-in + (block $while-out + (set_local $9 + (i32.add + (get_local $5) + (i32.const -48) + ) + ) + (set_local $10 + (if i32 + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + (if i32 + (i32.eq + (tee_local $5 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $8) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (set_local $5 + (if i32 + (get_local $7) + (if i32 + (i32.eq + (tee_local $5 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $7) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 1) + ) + (i32.const 0) + ) + (block i32 + (set_local $7 + (get_local $4) + ) + (set_local $8 + (i32.eqz + (get_local $4) + ) + ) + (get_local $4) + ) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 1) + ) + (get_local $4) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.and + (i32.gt_s + (get_local $6) + (i32.const 1) + ) + (i32.xor + (get_local $10) + (get_local $8) + ) + ) + ) + (block + (set_local $3 + (get_local $9) + ) + (br $while-out) + ) + ) + (if + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $3) + (i32.const 2048) + (tee_local $4 + (if i32 + (i32.eq + (tee_local $8 + (i32.load offset=12 + (get_local $4) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (block + (set_local $3 + (get_local $9) + ) + (br $label$break$L22) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $9 + (i32.add + (i32.shr_s + (i32.shl + (call_indirect $FUNCSIG$iiii + (get_local $3) + (get_local $4) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.mul + (get_local $9) + (i32.const 10) + ) + ) + ) + (if + (i32.eq + (tee_local $4 + (i32.load + (tee_local $8 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (get_local $5) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + (block + (i32.store + (get_local $8) + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (set_local $4 + (get_local $5) + ) + (set_local $5 + (get_local $9) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $4 + (if i32 + (get_local $4) + (if i32 + (i32.eq + (tee_local $4 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $4) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $5) + ) + ) + (if + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $5) + ) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $0) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L22 + (get_local $4) + ) + ) + (br $__rjto$0) + ) + (br_if $label$break$L22 + (i32.eqz + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 2) + ) + ) + ) + (get_local $3) + ) + (func $__ZNSt3__29__num_putIcE23__widen_and_group_floatEPcS2_S2_S2_RS2_S3_RKNS_6localeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $15 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19208) + ) + ) + (call_indirect $FUNCSIG$vii + (tee_local $12 + (get_local $15) + ) + (tee_local $13 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19220) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L12 + (block $__rjti$0 + (if + (i32.gt_s + (i32.sub + (tee_local $18 + (get_local $2) + ) + (tee_local $6 + (block $switch i32 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $6 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $6 + (call_indirect $FUNCSIG$iii + (get_local $9) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $7) + (get_local $6) + ) + (br $switch + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load8_s + (get_local $6) + ) + (i32.const 48) + ) + (block + (block $switch1 + (block $switch-default4 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-case2 $switch-default4 + (i32.sub + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 88) + ) + ) + ) + (br $switch1) + ) + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + (set_local $8 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $10 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $8) + ) + (set_local $7 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $7) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (get_local $7) + ) + (set_local $7 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ge_u + (get_local $7) + (get_local $2) + ) + ) + (br_if $label$break$L12 + (i32.eqz + (call $_isxdigit_l + (i32.load8_s + (get_local $7) + ) + (call $__ZNSt3__26__clocEv) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (block + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + ) + (block + (set_local $7 + (get_local $6) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L12) + ) + (loop $while-in7 + (br_if $label$break$L12 + (i32.ge_u + (get_local $7) + (get_local $2) + ) + ) + (br_if $label$break$L12 + (i32.eqz + (call $_isdigit_l + (i32.load8_s + (get_local $7) + ) + (call $__ZNSt3__26__clocEv) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + (set_local $16 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (block $label$break$L18 + (if + (if i32 + (i32.lt_s + (tee_local $8 + (i32.load8_s + (tee_local $17 + (i32.add + (get_local $12) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $16) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + (block + (block $label$break$L21 + (if + (i32.ne + (get_local $6) + (get_local $7) + ) + (block + (set_local $8 + (get_local $7) + ) + (set_local $10 + (get_local $6) + ) + (loop $while-in11 + (br_if $label$break$L21 + (i32.ge_u + (get_local $10) + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + ) + ) + (set_local $11 + (i32.load8_s + (get_local $10) + ) + ) + (i32.store8 + (get_local $10) + (i32.load8_s + (get_local $8) + ) + ) + (i32.store8 + (get_local $8) + (get_local $11) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br $while-in11) + ) + ) + ) + ) + (set_local $19 + (call_indirect $FUNCSIG$ii + (get_local $13) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (get_local $6) + ) + (loop $while-in13 + (if + (i32.lt_u + (get_local $10) + (get_local $7) + ) + (block + (if + (i32.and + (i32.gt_s + (tee_local $14 + (i32.load8_s + (i32.add + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $17) + ) + (i32.const 0) + ) + (i32.load + (get_local $12) + ) + (get_local $12) + ) + (get_local $8) + ) + ) + ) + (i32.const 0) + ) + (i32.eq + (get_local $11) + (get_local $14) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $11) + (get_local $19) + ) + (set_local $11 + (i32.const 0) + ) + (set_local $8 + (i32.add + (i32.lt_u + (get_local $8) + (i32.add + (if i32 + (i32.lt_s + (tee_local $14 + (i32.load8_s + (get_local $17) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $16) + ) + (i32.and + (get_local $14) + (i32.const 255) + ) + ) + (i32.const -1) + ) + ) + (get_local $8) + ) + ) + ) + ) + (set_local $14 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $10) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $20 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $20) + (get_local $14) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (if + (i32.eq + (tee_local $8 + (i32.add + (get_local $3) + (i32.sub + (get_local $6) + (get_local $0) + ) + ) + ) + (tee_local $6 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $6 + (get_local $9) + ) + (loop $while-in15 + (if + (i32.ge_u + (get_local $8) + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + ) + (block + (set_local $6 + (get_local $9) + ) + (br $label$break$L18) + ) + (block + (set_local $10 + (i32.load8_s + (get_local $8) + ) + ) + (i32.store8 + (get_local $8) + (i32.load8_s + (get_local $6) + ) + ) + (i32.store8 + (get_local $6) + (get_local $10) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in15) + ) + ) + ) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $9) + (get_local $6) + (get_local $7) + (i32.load + (get_local $5) + ) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $9) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (i32.sub + (get_local $7) + (get_local $6) + ) + ) + ) + (set_local $6 + (get_local $9) + ) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (loop $while-in17 + (if + (i32.lt_u + (get_local $7) + (get_local $2) + ) + (block + (br_if $__rjti$1 + (i32.eq + (tee_local $8 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 46) + ) + ) + (set_local $8 + (call_indirect $FUNCSIG$iii + (get_local $9) + (get_local $8) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $6) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $10 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $8) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in17) + ) + ) + ) + (br $__rjto$1) + ) + (set_local $6 + (call_indirect $FUNCSIG$ii + (get_local $13) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $13) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (get_local $6) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $9) + (get_local $7) + (get_local $2) + (i32.load + (get_local $5) + ) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $9) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $5 + (i32.add + (i32.load + (get_local $5) + ) + (i32.sub + (get_local $18) + (get_local $7) + ) + ) + ) + ) + (i32.store + (get_local $4) + (if i32 + (i32.eq + (get_local $1) + (get_local $2) + ) + (get_local $5) + (i32.add + (get_local $3) + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (set_global $STACKTOP + (get_local $15) + ) + ) + (func $__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (block $label$break$L1 + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=4 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 28) + ) + ) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + ) + ) + (block + (if + (i32.ne + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (block + (set_local $5 + (i32.load offset=12 + (get_local $0) + ) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib + (i32.add + (get_local $0) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (br_if $label$break$L1 + (i32.le_s + (get_local $5) + (i32.const 1) + ) + ) + (set_local $7 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (get_local $5) + (i32.const 3) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (if + (i32.eqz + (i32.and + (tee_local $6 + (i32.load offset=8 + (get_local $0) + ) + ) + (i32.const 2) + ) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 36) + ) + ) + ) + (i32.const 1) + ) + (block + (if + (i32.eqz + (i32.and + (get_local $6) + (i32.const 1) + ) + ) + (block + (set_local $6 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (loop $while-in + (br_if $label$break$L1 + (i32.load8_s + (get_local $6) + ) + ) + (br_if $label$break$L1 + (i32.eq + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (br_if $while-in + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (get_local $7) + ) + ) + (br $label$break$L1) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + (set_local $8 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (loop $while-in1 + (br_if $label$break$L1 + (i32.load8_s + (get_local $8) + ) + ) + (if + (i32.eq + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + (br_if $label$break$L1 + (i32.eq + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (br_if $while-in1 + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (get_local $7) + ) + ) + (br $label$break$L1) + ) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (loop $while-in3 + (br_if $label$break$L1 + (i32.load8_s + (get_local $0) + ) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib + (get_local $5) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (br_if $while-in3 + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (get_local $7) + ) + ) + (br $label$break$L1) + ) + ) + ) + (if + (i32.ne + (i32.load offset=16 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $11 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store offset=32 + (get_local $1) + (get_local $3) + ) + (br_if $label$break$L1 + (i32.eq + (i32.load + (tee_local $12 + (i32.add + (get_local $1) + (i32.const 44) + ) + ) + ) + (i32.const 4) + ) + ) + (set_local $13 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.load offset=12 + (get_local $0) + ) + (i32.const 3) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $1) + (i32.const 52) + ) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const 53) + ) + ) + (set_local $8 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $10 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.store + (get_local $12) + (tee_local $0 + (block $__rjto$1 i32 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L34 + (br_if $__rjti$0 + (i32.ge_u + (get_local $0) + (get_local $13) + ) + ) + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $2) + (i32.const 1) + (get_local $4) + ) + (br_if $__rjti$0 + (i32.load8_s + (get_local $8) + ) + ) + (block $do-once + (if + (i32.load8_s + (get_local $6) + ) + (block + (if + (i32.eqz + (i32.load8_s + (get_local $7) + ) + ) + (if + (i32.and + (i32.load + (get_local $9) + ) + (i32.const 1) + ) + (block + (set_local $5 + (i32.const 1) + ) + (br $do-once) + ) + (block + (set_local $5 + (i32.const 1) + ) + (br $__rjti$0) + ) + ) + ) + (br_if $__rjti$1 + (i32.eq + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (i32.and + (i32.load + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + (set_local $3 + (i32.const 1) + ) + (set_local $5 + (i32.const 1) + ) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (br $label$continue$L34) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (block + (i32.store + (get_local $11) + (get_local $2) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 40) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (if + (i32.eq + (i32.load offset=36 + (get_local $1) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load + (get_local $10) + ) + (i32.const 2) + ) + (block + (i32.store8 + (get_local $8) + (i32.const 1) + ) + (br_if $__rjti$1 + (get_local $5) + ) + (br $__rjto$1 + (i32.const 4) + ) + ) + ) + ) + ) + ) + (br_if $__rjti$1 + (get_local $5) + ) + (br $__rjto$1 + (i32.const 4) + ) + ) + (i32.const 3) + ) + ) + ) + (br $label$break$L1) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 1) + ) + (i32.store offset=32 + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (func $_try_realloc_chunk (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $6 + (i32.add + (get_local $0) + (tee_local $3 + (i32.and + (tee_local $8 + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.const -8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.and + (i32.ne + (tee_local $7 + (i32.and + (get_local $8) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (i32.ge_u + (get_local $0) + (tee_local $11 + (i32.load + (i32.const 17680) + ) + ) + ) + ) + (i32.lt_u + (get_local $0) + (get_local $6) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $5 + (i32.load offset=4 + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.eqz + (get_local $7) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (return + (i32.const 0) + ) + ) + (if + (i32.ge_u + (get_local $3) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (if + (i32.le_u + (i32.sub + (get_local $3) + (get_local $1) + ) + (i32.shl + (i32.load + (i32.const 18144) + ) + (i32.const 1) + ) + ) + (return + (get_local $0) + ) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (i32.ge_u + (get_local $3) + (get_local $1) + ) + (block + (if + (i32.le_u + (tee_local $2 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.const 15) + ) + (return + (get_local $0) + ) + ) + (i32.store + (get_local $9) + (i32.or + (i32.or + (i32.and + (get_local $8) + (i32.const 1) + ) + (get_local $1) + ) + (i32.const 2) + ) + ) + (i32.store offset=4 + (tee_local $1 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (i32.or + (get_local $2) + (i32.const 3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (i32.add + (get_local $1) + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 1) + ) + ) + (call $_dispose_chunk + (get_local $1) + (get_local $2) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (i32.load + (i32.const 17688) + ) + ) + (block + (if + (i32.le_u + (tee_local $2 + (i32.add + (i32.load + (i32.const 17676) + ) + (get_local $3) + ) + ) + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (get_local $9) + (i32.or + (i32.or + (i32.and + (get_local $8) + (i32.const 1) + ) + (get_local $1) + ) + (i32.const 2) + ) + ) + (i32.store offset=4 + (tee_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (i32.or + (tee_local $1 + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.const 17688) + (get_local $3) + ) + (i32.store + (i32.const 17676) + (get_local $1) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (i32.load + (i32.const 17684) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.add + (i32.load + (i32.const 17672) + ) + (get_local $3) + ) + ) + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.const 15) + ) + (block + (set_local $4 + (i32.add + (tee_local $3 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $9) + (i32.or + (i32.or + (i32.and + (get_local $8) + (i32.const 1) + ) + (get_local $1) + ) + (i32.const 2) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $1) + ) + (i32.const -2) + ) + ) + ) + (block + (i32.store + (get_local $9) + (i32.or + (i32.or + (i32.and + (get_local $8) + (i32.const 1) + ) + (get_local $3) + ) + (i32.const 2) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $0) + (get_local $3) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + (i32.store + (i32.const 17672) + (get_local $2) + ) + (i32.store + (i32.const 17684) + (get_local $3) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.and + (get_local $5) + (i32.const 2) + ) + (return + (i32.const 0) + ) + ) + (if + (i32.lt_u + (tee_local $13 + (i32.add + (i32.and + (get_local $5) + (i32.const -8) + ) + (get_local $3) + ) + ) + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (set_local $12 + (i32.sub + (get_local $13) + (get_local $1) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (block $do-once + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $6) + ) + ) + (if + (i32.ne + (tee_local $5 + (i32.load offset=8 + (get_local $6) + ) + ) + (tee_local $7 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 17704) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $5) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $5) + ) + (get_local $6) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $5) + ) + (block + (i32.store + (i32.const 17664) + (i32.and + (i32.load + (i32.const 17664) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $7) + ) + (set_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $6) + ) + (set_local $2 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $5) + (get_local $4) + ) + (i32.store + (get_local $2) + (get_local $5) + ) + ) + (block + (set_local $10 + (i32.load offset=24 + (get_local $6) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $2 + (i32.load offset=12 + (get_local $6) + ) + ) + (get_local $6) + ) + (block + (if + (tee_local $2 + (i32.load + (tee_local $5 + (i32.add + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + (set_local $3 + (get_local $5) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $7) + ) + (set_local $3 + (get_local $5) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $7) + ) + (set_local $3 + (get_local $5) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $3) + (i32.const 0) + ) + (set_local $4 + (get_local $2) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $6) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $6) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (get_local $6) + ) + (block + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $3) + ) + (set_local $4 + (get_local $2) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $6) + (i32.load + (tee_local $3 + (i32.add + (i32.shl + (tee_local $2 + (i32.load offset=28 + (get_local $6) + ) + ) + (i32.const 2) + ) + (i32.const 17968) + ) + ) + ) + ) + (block + (i32.store + (get_local $3) + (get_local $4) + ) + (if + (i32.eqz + (get_local $4) + ) + (block + (i32.store + (i32.const 17668) + (i32.and + (i32.load + (i32.const 17668) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const -1) + ) + ) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $2 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (i32.store offset=20 + (get_local $10) + (get_local $4) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (tee_local $3 + (i32.load + (i32.const 17680) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $4) + (get_local $10) + ) + (if + (tee_local $2 + (i32.load + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + ) + ) + ) + (if + (tee_local $2 + (i32.load offset=4 + (get_local $5) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 17680) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if i32 + (i32.lt_u + (get_local $12) + (i32.const 16) + ) + (block i32 + (i32.store + (get_local $9) + (i32.or + (i32.or + (get_local $13) + (i32.and + (get_local $8) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $0) + (get_local $13) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + (get_local $0) + ) + (block i32 + (i32.store + (get_local $9) + (i32.or + (i32.or + (i32.and + (get_local $8) + (i32.const 1) + ) + (get_local $1) + ) + (i32.const 2) + ) + ) + (i32.store offset=4 + (tee_local $1 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (i32.or + (get_local $12) + (i32.const 3) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (i32.add + (get_local $1) + (get_local $12) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 1) + ) + ) + (call $_dispose_chunk + (get_local $1) + (get_local $12) + ) + (get_local $0) + ) + ) + ) + (func $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (if + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (set_local $6 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $6 + (i32.const 0) + ) + ) + (set_local $6 + (i32.eqz + (get_local $6) + ) + ) + (tee_local $0 + (block $label$break$L16 i32 + (block $__rjti$3 + (block $__rjti$2 + (block $__rjti$1 + (if + (tee_local $5 + (i32.load + (get_local $1) + ) + ) + (block + (if + (i32.eq + (i32.load offset=12 + (get_local $5) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $6) + ) + ) + (br $__rjti$3) + ) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + ) + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 6) + ) + ) + (br $label$break$L16 + (i32.const 0) + ) + ) + (if + (i32.gt_s + (i32.shr_s + (i32.shl + (tee_local $6 + (i32.and + (tee_local $8 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $6) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + (if + (i32.and + (i32.load16_s + (i32.add + (i32.load + (tee_local $11 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $8) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 2048) + ) + (block + (set_local $8 + (i32.shr_s + (i32.shl + (call_indirect $FUNCSIG$iiii + (get_local $3) + (get_local $6) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (set_local $4 + (if i32 + (i32.eq + (tee_local $6 + (i32.load + (tee_local $9 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (block i32 + (drop + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $9 + (get_local $4) + ) + (get_local $5) + ) + (block i32 + (i32.store + (get_local $9) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (set_local $9 + (get_local $4) + ) + (get_local $5) + ) + ) + ) + (loop $while-in + (block $while-out + (if + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $7) + ) + (i32.load offset=16 + (get_local $7) + ) + ) + (set_local $7 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $7) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $7) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + ) + (set_local $6 + (if i32 + (get_local $5) + (if i32 + (i32.eq + (i32.load offset=12 + (get_local $5) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $5 + (get_local $4) + ) + (get_local $4) + ) + ) + (get_local $4) + ) + (block i32 + (set_local $5 + (i32.const 0) + ) + (get_local $4) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $8) + (i32.const -48) + ) + ) + (set_local $8 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.and + (i32.gt_s + (get_local $9) + (i32.const 1) + ) + (i32.xor + (i32.eqz + (get_local $7) + ) + (i32.eqz + (get_local $5) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $8) + ) + (set_local $3 + (get_local $4) + ) + (br $while-out) + ) + ) + (drop + (br_if $label$break$L16 + (get_local $4) + (i32.le_s + (i32.shr_s + (i32.shl + (tee_local $8 + (i32.and + (tee_local $7 + (if i32 + (i32.eq + (tee_local $7 + (i32.load offset=12 + (get_local $8) + ) + ) + (i32.load offset=16 + (get_local $8) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $8) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $7) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + ) + (drop + (br_if $label$break$L16 + (get_local $4) + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $11) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $7) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 2048) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (set_local $8 + (i32.add + (i32.shr_s + (i32.shl + (call_indirect $FUNCSIG$iiii + (get_local $3) + (get_local $8) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.mul + (get_local $4) + (i32.const 10) + ) + ) + ) + (if + (i32.eq + (tee_local $4 + (i32.load + (tee_local $7 + (i32.add + (tee_local $10 + (i32.load + (get_local $0) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $10) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $4 + (get_local $6) + ) + (br $while-in) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (set_local $4 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + ) + (if + (get_local $5) + (if + (i32.eq + (i32.load offset=12 + (get_local $5) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $5) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $6) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $6) + ) + (i32.load offset=16 + (get_local $6) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $6) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $6) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + ) + (drop + (br_if $label$break$L16 + (get_local $3) + (get_local $0) + ) + ) + (br $__rjto$0) + ) + (drop + (br_if $label$break$L16 + (get_local $3) + (i32.eqz + (get_local $0) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 2) + ) + ) + (br $label$break$L16 + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + (i32.const 0) + ) + ) + ) + (func $_fmod (param $0 f64) (param $1 f64) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (set_local $7 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $8 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $1) + ) + (set_local $9 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (set_local $5 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (set_local $4 + (i32.and + (call $_bitshift64Lshr + (get_local $7) + (get_local $8) + (i32.const 52) + ) + (i32.const 2047) + ) + ) + (set_local $11 + (i32.and + (call $_bitshift64Lshr + (get_local $9) + (get_local $5) + (i32.const 52) + ) + (i32.const 2047) + ) + ) + (set_local $12 + (i32.and + (get_local $8) + (i32.const -2147483648) + ) + ) + (tee_local $0 + (block $__rjto$0 f64 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.and + (i32.eqz + (tee_local $10 + (call $_bitshift64Shl + (get_local $9) + (get_local $5) + (i32.const 1) + ) + ) + ) + (i32.eqz + (tee_local $6 + (get_global $tempRet0) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (f64.abs + (get_local $1) + ) + ) + (br_if $__rjti$0 + (i32.or + (i32.or + (i32.gt_u + (tee_local $2 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $2) + (i32.const 2146435072) + ) + (i32.gt_u + (i32.load + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + ) + ) + (i32.eq + (get_local $4) + (i32.const 2047) + ) + ) + ) + (set_local $3 + (call $_bitshift64Shl + (get_local $7) + (get_local $8) + (i32.const 1) + ) + ) + (if + (i32.eqz + (i32.or + (i32.gt_u + (tee_local $2 + (get_global $tempRet0) + ) + (get_local $6) + ) + (i32.and + (i32.eq + (get_local $2) + (get_local $6) + ) + (i32.gt_u + (get_local $3) + (get_local $10) + ) + ) + ) + ) + (return + (if f64 + (i32.and + (i32.eq + (get_local $3) + (get_local $10) + ) + (i32.eq + (get_local $2) + (get_local $6) + ) + ) + (f64.mul + (get_local $0) + (f64.const 0) + ) + (get_local $0) + ) + ) + ) + (set_local $10 + (if i32 + (get_local $4) + (i32.or + (i32.and + (get_local $8) + (i32.const 1048575) + ) + (i32.const 1048576) + ) + (block i32 + (set_local $2 + (call $_bitshift64Shl + (get_local $7) + (get_local $8) + (i32.const 12) + ) + ) + (if + (i32.or + (i32.gt_s + (tee_local $4 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $4) + (i32.const -1) + ) + (i32.gt_u + (get_local $2) + (i32.const -1) + ) + ) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $4) + ) + (set_local $4 + (i32.const 0) + ) + (loop $while-in + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (set_local $3 + (call $_bitshift64Shl + (get_local $3) + (get_local $2) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.or + (i32.gt_s + (tee_local $2 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $2) + (i32.const -1) + ) + (i32.gt_u + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.const 0) + ) + ) + (set_local $7 + (call $_bitshift64Shl + (get_local $7) + (get_local $8) + (i32.sub + (i32.const 1) + (get_local $4) + ) + ) + ) + (get_global $tempRet0) + ) + ) + ) + (set_local $8 + (if i32 + (get_local $11) + (i32.or + (i32.and + (get_local $5) + (i32.const 1048575) + ) + (i32.const 1048576) + ) + (block i32 + (set_local $3 + (call $_bitshift64Shl + (get_local $9) + (get_local $5) + (i32.const 12) + ) + ) + (if + (i32.or + (i32.gt_s + (tee_local $2 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $2) + (i32.const -1) + ) + (i32.gt_u + (get_local $3) + (i32.const -1) + ) + ) + ) + (block + (set_local $6 + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in1 + (set_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (set_local $6 + (call $_bitshift64Shl + (get_local $6) + (get_local $3) + (i32.const 1) + ) + ) + (br_if $while-in1 + (i32.or + (i32.gt_s + (tee_local $3 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $3) + (i32.const -1) + ) + (i32.gt_u + (get_local $6) + (i32.const -1) + ) + ) + ) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + (set_local $9 + (call $_bitshift64Shl + (get_local $9) + (get_local $5) + (i32.sub + (i32.const 1) + (get_local $2) + ) + ) + ) + (set_local $11 + (get_local $2) + ) + (get_global $tempRet0) + ) + ) + ) + (set_local $2 + (call $_i64Subtract + (get_local $7) + (get_local $10) + (get_local $9) + (get_local $8) + ) + ) + (set_local $6 + (i32.or + (i32.gt_s + (tee_local $5 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const -1) + ) + (i32.gt_u + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (block $label$break$L23 + (if + (i32.gt_s + (get_local $4) + (get_local $11) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $5) + ) + (loop $while-in4 + (block $while-out3 + (if + (get_local $6) + (br_if $while-out3 + (i32.and + (i32.eq + (get_local $7) + (get_local $9) + ) + (i32.eq + (get_local $10) + (get_local $8) + ) + ) + ) + (block + (set_local $3 + (get_local $7) + ) + (set_local $2 + (get_local $10) + ) + ) + ) + (set_local $3 + (call $_i64Subtract + (tee_local $7 + (call $_bitshift64Shl + (get_local $3) + (get_local $2) + (i32.const 1) + ) + ) + (tee_local $10 + (get_global $tempRet0) + ) + (get_local $9) + (get_local $8) + ) + ) + (set_local $2 + (i32.or + (i32.gt_s + (tee_local $5 + (get_global $tempRet0) + ) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $5) + (i32.const -1) + ) + (i32.gt_u + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (if + (i32.gt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (get_local $11) + ) + (block + (set_local $6 + (get_local $2) + ) + (set_local $2 + (get_local $5) + ) + (br $while-in4) + ) + (block + (set_local $6 + (get_local $2) + ) + (set_local $2 + (get_local $3) + ) + (set_local $3 + (get_local $5) + ) + (br $label$break$L23) + ) + ) + ) + ) + (br $__rjto$0 + (f64.mul + (get_local $0) + (f64.const 0) + ) + ) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + (if + (get_local $6) + (drop + (br_if $__rjto$0 + (f64.mul + (get_local $0) + (f64.const 0) + ) + (i32.and + (i32.eq + (get_local $7) + (get_local $9) + ) + (i32.eq + (get_local $10) + (get_local $8) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $10) + ) + (set_local $2 + (get_local $7) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $3) + (i32.const 1048576) + ) + (i32.and + (i32.eq + (get_local $3) + (i32.const 1048576) + ) + (i32.lt_u + (get_local $2) + (i32.const 0) + ) + ) + ) + (loop $while-in6 + (set_local $2 + (call $_bitshift64Shl + (get_local $2) + (get_local $3) + (i32.const 1) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (br_if $while-in6 + (i32.or + (i32.lt_u + (tee_local $3 + (get_global $tempRet0) + ) + (i32.const 1048576) + ) + (i32.and + (i32.eq + (get_local $3) + (i32.const 1048576) + ) + (i32.lt_u + (get_local $2) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_local $2 + (if i32 + (i32.gt_s + (get_local $4) + (i32.const 0) + ) + (block i32 + (set_local $3 + (call $_i64Add + (get_local $2) + (get_local $3) + (i32.const 0) + (i32.const -1048576) + ) + ) + (set_local $2 + (get_global $tempRet0) + ) + (set_local $4 + (i32.or + (get_local $3) + (tee_local $4 + (call $_bitshift64Shl + (get_local $4) + (i32.const 0) + (i32.const 52) + ) + ) + ) + ) + (i32.or + (get_local $2) + (get_global $tempRet0) + ) + ) + (block i32 + (set_local $4 + (call $_bitshift64Lshr + (get_local $2) + (get_local $3) + (i32.sub + (i32.const 1) + (get_local $4) + ) + ) + ) + (get_global $tempRet0) + ) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $4) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (get_local $2) + (get_local $12) + ) + ) + (br $__rjto$0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (f64.div + (tee_local $0 + (f64.mul + (get_local $0) + (get_local $1) + ) + ) + (get_local $0) + ) + ) + ) + ) + (func $__ZNKSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 f64) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 1008) + ) + ) + (set_local $0 + (get_local $7) + ) + (set_local $10 + (i32.add + (get_local $7) + (i32.const 488) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 888) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 896) + ) + ) + ) + (f64.store + (tee_local $15 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (get_local $5) + ) + (set_local $0 + (if i32 + (i32.gt_u + (tee_local $6 + (call $_snprintf + (get_local $13) + (i32.const 100) + (i32.const 15437) + (get_local $15) + ) + ) + (i32.const 99) + ) + (block i32 + (set_local $10 + (call $__ZNSt3__26__clocEv) + ) + (f64.store + (get_local $0) + (get_local $5) + ) + (set_local $6 + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $8) + (get_local $10) + (i32.const 15437) + (get_local $0) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $8) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $8) + ) + ) + ) + (set_local $13 + (tee_local $10 + (call $_malloc + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + (if i32 + (get_local $10) + (block i32 + (set_local $14 + (get_local $0) + ) + (get_local $6) + ) + (block i32 + (set_local $10 + (i32.const 0) + ) + (set_local $14 + (get_local $0) + ) + (get_local $6) + ) + ) + ) + (block i32 + (set_local $13 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 480) + ) + ) + (tee_local $22 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $17 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $16) + (i32.const 19240) + ) + ) + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.add + (get_local $6) + (get_local $0) + ) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $17) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (set_local $18 + (if i32 + (get_local $0) + (i32.eq + (i32.load8_s + (i32.load + (get_local $8) + ) + ) + (i32.const 45) + ) + (i32.const 0) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 892) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 476) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 472) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 448) + ) + ) + (set_local $9 + (i32.add + (get_local $7) + (i32.const 436) + ) + ) + (set_local $11 + (i32.add + (get_local $7) + (i32.const 432) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 460) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $12) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $12) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $9) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $9) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $9) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__211__money_putIwE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_Ri + (get_local $2) + (get_local $18) + (get_local $16) + (get_local $19) + (get_local $20) + (get_local $21) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $11) + ) + (set_local $2 + (if i32 + (i32.gt_s + (get_local $0) + (tee_local $11 + (i32.load + (get_local $11) + ) + ) + ) + (block i32 + (set_local $2 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.or + (i32.shl + (i32.sub + (get_local $0) + (get_local $11) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + ) + ) + (block i32 + (set_local $2 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (get_local $11) + ) + ) + (i32.const 100) + ) + (block + (set_local $2 + (tee_local $6 + (call $_malloc + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + (call $__ZNSt3__211__money_putIwE8__formatEPwRS2_S3_jPKwS5_RKNS_5ctypeIwEEbRKNS_10money_base7patternEwwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNSE_IwNSF_IwEENSH_IwEEEESQ_i + (get_local $6) + (tee_local $23 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (tee_local $24 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.load offset=4 + (get_local $3) + ) + (get_local $10) + (i32.add + (get_local $10) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (get_local $17) + (get_local $18) + (get_local $19) + (i32.load + (get_local $20) + ) + (i32.load + (get_local $21) + ) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $11) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $23) + ) + ) + (set_local $10 + (i32.load + (get_local $24) + ) + ) + (i32.store + (get_local $15) + (i32.load + (get_local $0) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $15) + (get_local $6) + (get_local $1) + (get_local $10) + (get_local $3) + (get_local $4) + ) + ) + (set_local $0 + (if i32 + (get_local $2) + (block i32 + (call $_free + (get_local $2) + ) + (i32.load + (get_local $16) + ) + ) + (get_local $22) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $9) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (if + (get_local $13) + (call $_free + (get_local $13) + ) + ) + (if + (get_local $14) + (call $_free + (get_local $14) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNKSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEce (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 f64) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 384) + ) + ) + (set_local $0 + (get_local $7) + ) + (set_local $10 + (i32.add + (get_local $7) + (i32.const 184) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 72) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 284) + ) + ) + ) + (f64.store + (tee_local $15 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (get_local $5) + ) + (set_local $0 + (if i32 + (i32.gt_u + (tee_local $6 + (call $_snprintf + (get_local $13) + (i32.const 100) + (i32.const 15437) + (get_local $15) + ) + ) + (i32.const 99) + ) + (block i32 + (set_local $10 + (call $__ZNSt3__26__clocEv) + ) + (f64.store + (get_local $0) + (get_local $5) + ) + (set_local $6 + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $8) + (get_local $10) + (i32.const 15437) + (get_local $0) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $8) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $8) + ) + ) + ) + (set_local $13 + (tee_local $10 + (call $_malloc + (get_local $6) + ) + ) + ) + (if i32 + (get_local $10) + (block i32 + (set_local $14 + (get_local $0) + ) + (get_local $6) + ) + (block i32 + (set_local $10 + (i32.const 0) + ) + (set_local $14 + (get_local $0) + ) + (get_local $6) + ) + ) + ) + (block i32 + (set_local $13 + (i32.const 0) + ) + (set_local $14 + (i32.const 0) + ) + (get_local $6) + ) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 68) + ) + ) + (tee_local $22 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $17 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $16) + (i32.const 19208) + ) + ) + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.add + (get_local $6) + (get_local $0) + ) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $17) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (set_local $18 + (if i32 + (get_local $0) + (i32.eq + (i32.load8_s + (i32.load + (get_local $8) + ) + ) + (i32.const 45) + ) + (i32.const 0) + ) + ) + (set_local $19 + (i32.add + (get_local $7) + (i32.const 180) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 177) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 176) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 44) + ) + ) + (set_local $9 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (set_local $11 + (i32.add + (get_local $7) + (i32.const 28) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 56) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $12) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $12) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $9) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $9) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $9) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__211__money_putIcE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_Ri + (get_local $2) + (get_local $18) + (get_local $16) + (get_local $19) + (get_local $20) + (get_local $21) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $11) + ) + (set_local $2 + (if i32 + (i32.gt_s + (get_local $0) + (tee_local $11 + (i32.load + (get_local $11) + ) + ) + ) + (block i32 + (set_local $2 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.or + (i32.shl + (i32.sub + (get_local $0) + (get_local $11) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + ) + ) + (block i32 + (set_local $2 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $7) + (i32.const 76) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (get_local $11) + ) + ) + (i32.const 100) + ) + (block + (set_local $2 + (tee_local $6 + (call $_malloc + (get_local $2) + ) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + (call $__ZNSt3__211__money_putIcE8__formatEPcRS2_S3_jPKcS5_RKNS_5ctypeIcEEbRKNS_10money_base7patternEccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESL_SL_i + (get_local $6) + (tee_local $23 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (tee_local $24 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.load offset=4 + (get_local $3) + ) + (get_local $10) + (i32.add + (get_local $10) + (get_local $0) + ) + (get_local $17) + (get_local $18) + (get_local $19) + (i32.load8_s + (get_local $20) + ) + (i32.load8_s + (get_local $21) + ) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $11) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $23) + ) + ) + (set_local $10 + (i32.load + (get_local $24) + ) + ) + (i32.store + (get_local $15) + (i32.load + (get_local $0) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $15) + (get_local $6) + (get_local $1) + (get_local $10) + (get_local $3) + (get_local $4) + ) + ) + (set_local $0 + (if i32 + (get_local $2) + (block i32 + (call $_free + (get_local $2) + ) + (i32.load + (get_local $16) + ) + ) + (get_local $22) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $9) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (if + (get_local $13) + (call $_free + (get_local $13) + ) + ) + (if + (get_local $14) + (call $_free + (get_local $14) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNSt3__2L20utf8_to_utf16_lengthEPKhS1_jmNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (set_local $10 + (get_local $1) + ) + (set_local $4 + (if i32 + (i32.and + (get_local $4) + (i32.const 4) + ) + (if i32 + (i32.gt_s + (i32.sub + (get_local $10) + (get_local $0) + ) + (i32.const 2) + ) + (if i32 + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const -17) + ) + (if i32 + (i32.eq + (i32.load8_s offset=1 + (get_local $0) + ) + (i32.const -69) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (if i32 + (i32.eq + (i32.load8_s offset=2 + (get_local $0) + ) + (i32.const -65) + ) + (i32.add + (get_local $0) + (i32.const 3) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (get_local $0) + ) + ) + ) + (tee_local $0 + (block $__rjto$6 i32 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L6 + (br_if $__rjti$6 + (i32.eqz + (i32.and + (i32.lt_u + (get_local $6) + (get_local $2) + ) + (i32.lt_u + (get_local $4) + (get_local $1) + ) + ) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (tee_local $8 + (i32.and + (tee_local $5 + (i32.load8_s + (get_local $4) + ) + ) + (i32.const 255) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (block $do-once i32 + (if i32 + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (i32.add + (get_local $4) + (i32.const 1) + ) + (block i32 + (br_if $__rjti$6 + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 194) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 224) + ) + (block + (br_if $__rjti$6 + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $4) + ) + (i32.const 2) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (i32.load8_u offset=1 + (get_local $4) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.and + (get_local $5) + (i32.const 63) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 6) + ) + (i32.const 1984) + ) + ) + (get_local $3) + ) + ) + (br $do-once + (i32.add + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 240) + ) + (block + (br_if $__rjti$6 + (i32.lt_s + (i32.sub + (get_local $10) + (tee_local $5 + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (set_local $7 + (i32.load8_s offset=1 + (get_local $4) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $4) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $8) + (i32.const 224) + ) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.and + (get_local $7) + (i32.const 224) + ) + (i32.const 160) + ) + ) + (br $switch) + ) + (br_if $__rjti$1 + (i32.ne + (i32.and + (get_local $7) + (i32.const 224) + ) + (i32.const 128) + ) + ) + (br $switch) + ) + (br_if $__rjti$2 + (i32.ne + (i32.and + (get_local $7) + (i32.const 192) + ) + (i32.const 128) + ) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $7) + (i32.const 255) + ) + (i32.const 6) + ) + (i32.const 4032) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 12) + ) + (i32.const 61440) + ) + ) + (i32.and + (get_local $5) + (i32.const 63) + ) + ) + (get_local $3) + ) + ) + (br $do-once + (i32.add + (get_local $4) + (i32.const 3) + ) + ) + ) + ) + (br_if $__rjti$6 + (i32.ge_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 245) + ) + ) + (br_if $__rjti$6 + (i32.or + (i32.lt_u + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 2) + ) + (i32.lt_s + (i32.sub + (get_local $10) + (tee_local $5 + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (set_local $7 + (i32.load8_s offset=1 + (get_local $4) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $4) + ) + ) + (set_local $11 + (i32.load8_u offset=3 + (get_local $4) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-case3 $switch-default4 + (i32.sub + (get_local $8) + (i32.const 240) + ) + ) + ) + (br_if $__rjti$3 + (i32.ge_s + (i32.and + (i32.add + (get_local $7) + (i32.const 112) + ) + (i32.const 255) + ) + (i32.const 48) + ) + ) + (br $switch1) + ) + (br_if $__rjti$4 + (i32.ne + (i32.and + (get_local $7) + (i32.const 240) + ) + (i32.const 128) + ) + ) + (br $switch1) + ) + (br_if $__rjti$5 + (i32.ne + (i32.and + (get_local $7) + (i32.const 192) + ) + (i32.const 128) + ) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $9 + (get_local $11) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $7) + (i32.const 255) + ) + (i32.const 12) + ) + (i32.const 258048) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 18) + ) + (i32.const 1835008) + ) + ) + (i32.and + (i32.shl + (get_local $5) + (i32.const 6) + ) + (i32.const 4032) + ) + ) + (i32.and + (get_local $9) + (i32.const 63) + ) + ) + (get_local $3) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L6) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $4) + (get_local $0) + ) + ) + ) + ) + (func $__ZNKSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 480) + ) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $7) + (i32.const 464) + ) + ) + (tee_local $18 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $16 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $15) + (i32.const 19240) + ) + ) + (set_local $13 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (set_local $19 + (if i32 + (if i32 + (tee_local $0 + (i32.lt_s + (tee_local $10 + (i32.load8_s + (tee_local $14 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $13) + ) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + (i32.eq + (i32.load + (if i32 + (get_local $0) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$iii + (get_local $16) + (i32.const 45) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $16) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 472) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 460) + ) + ) + (set_local $22 + (i32.add + (get_local $7) + (i32.const 456) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 432) + ) + ) + (set_local $9 + (i32.add + (get_local $7) + (i32.const 420) + ) + ) + (set_local $6 + (i32.add + (get_local $7) + (i32.const 416) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 444) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $12) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $12) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $9) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $9) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $9) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__211__money_putIwE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERwS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERNS9_IwNSA_IwEENSC_IwEEEESJ_Ri + (get_local $2) + (get_local $19) + (get_local $15) + (get_local $20) + (get_local $21) + (get_local $22) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $6) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (set_local $6 + (if i32 + (i32.gt_s + (tee_local $2 + (if i32 + (i32.lt_s + (tee_local $10 + (i32.load8_s + (get_local $14) + ) + ) + (i32.const 0) + ) + (get_local $0) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + ) + (tee_local $17 + (i32.load + (get_local $6) + ) + ) + ) + (block i32 + (set_local $11 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.or + (i32.shl + (i32.sub + (get_local $2) + (get_local $17) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (if i32 + (i32.lt_s + (get_local $11) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + (block i32 + (set_local $6 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $2 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (if i32 + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (if + (i32.gt_u + (tee_local $6 + (i32.add + (get_local $6) + (get_local $17) + ) + ) + (i32.const 100) + ) + (block + (set_local $2 + (tee_local $11 + (call $_malloc + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + (set_local $2 + (if i32 + (get_local $11) + (block i32 + (set_local $6 + (get_local $10) + ) + (set_local $10 + (get_local $2) + ) + (get_local $11) + ) + (block i32 + (set_local $6 + (i32.load8_s + (get_local $14) + ) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (set_local $10 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $10) + ) + (set_local $10 + (i32.const 0) + ) + ) + ) + (set_local $23 + (i32.add + (get_local $7) + (i32.const 468) + ) + ) + (set_local $11 + (get_local $7) + ) + (call $__ZNSt3__211__money_putIwE8__formatEPwRS2_S3_jPKwS5_RKNS_5ctypeIwEEbRKNS_10money_base7patternEwwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNSE_IwNSF_IwEENSH_IwEEEESQ_i + (get_local $2) + (tee_local $24 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (i32.load offset=4 + (get_local $3) + ) + (if i32 + (tee_local $14 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (tee_local $5 + (i32.load + (get_local $5) + ) + ) + (get_local $5) + ) + (i32.add + (get_local $5) + (i32.shl + (if i32 + (get_local $14) + (get_local $0) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + (get_local $16) + (get_local $19) + (get_local $20) + (i32.load + (get_local $21) + ) + (i32.load + (get_local $22) + ) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $17) + ) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $24) + ) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $11) + ) + ) + (set_local $0 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $23) + (get_local $2) + (get_local $1) + (get_local $0) + (get_local $3) + (get_local $4) + ) + ) + (if + (get_local $10) + (block + (call $_free + (get_local $10) + ) + (set_local $18 + (i32.load + (get_local $15) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $9) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $18) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNKSt3__29money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_bRNS_8ios_baseEcRKNS_12basic_stringIcS3_NS_9allocatorIcEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 176) + ) + ) + (i32.store + (tee_local $15 + (i32.add + (get_local $7) + (i32.const 52) + ) + ) + (tee_local $18 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $16 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $15) + (i32.const 19208) + ) + ) + (set_local $13 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (set_local $19 + (if i32 + (if i32 + (tee_local $0 + (i32.lt_s + (tee_local $10 + (i32.load8_s + (tee_local $14 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $13) + ) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + (i32.eq + (i32.load8_u + (if i32 + (get_local $0) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + ) + (i32.and + (call_indirect $FUNCSIG$iii + (get_local $16) + (i32.const 45) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $16) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const 255) + ) + ) + (i32.const 0) + ) + ) + (set_local $20 + (i32.add + (get_local $7) + (i32.const 164) + ) + ) + (set_local $21 + (i32.add + (get_local $7) + (i32.const 161) + ) + ) + (set_local $22 + (i32.add + (get_local $7) + (i32.const 160) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 28) + ) + ) + (set_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (set_local $6 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 40) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $12) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $12) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $12) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $9) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $9) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $9) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (call $__ZNSt3__211__money_putIcE13__gather_infoEbbRKNS_6localeERNS_10money_base7patternERcS8_RNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESF_SF_Ri + (get_local $2) + (get_local $19) + (get_local $15) + (get_local $20) + (get_local $21) + (get_local $22) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $6) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (set_local $6 + (if i32 + (i32.gt_s + (tee_local $2 + (if i32 + (i32.lt_s + (tee_local $10 + (i32.load8_s + (get_local $14) + ) + ) + (i32.const 0) + ) + (get_local $0) + (i32.and + (get_local $10) + (i32.const 255) + ) + ) + ) + (tee_local $17 + (i32.load + (get_local $6) + ) + ) + ) + (block i32 + (set_local $11 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (i32.or + (i32.shl + (i32.sub + (get_local $2) + (get_local $17) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (if i32 + (i32.lt_s + (get_local $11) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + ) + ) + (block i32 + (set_local $6 + (i32.load8_s offset=11 + (get_local $8) + ) + ) + (i32.add + (i32.add + (if i32 + (i32.lt_s + (tee_local $2 + (i32.load8_s offset=11 + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $9) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (if i32 + (i32.lt_s + (get_local $6) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $8) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $7) + (i32.const 60) + ) + ) + (if + (i32.gt_u + (tee_local $6 + (i32.add + (get_local $6) + (get_local $17) + ) + ) + (i32.const 100) + ) + (block + (set_local $2 + (tee_local $11 + (call $_malloc + (get_local $6) + ) + ) + ) + (set_local $2 + (if i32 + (get_local $11) + (block i32 + (set_local $6 + (get_local $10) + ) + (set_local $10 + (get_local $2) + ) + (get_local $11) + ) + (block i32 + (set_local $6 + (i32.load8_s + (get_local $14) + ) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (set_local $10 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $10) + ) + (set_local $10 + (i32.const 0) + ) + ) + ) + (set_local $23 + (i32.add + (get_local $7) + (i32.const 56) + ) + ) + (set_local $11 + (get_local $7) + ) + (call $__ZNSt3__211__money_putIcE8__formatEPcRS2_S3_jPKcS5_RKNS_5ctypeIcEEbRKNS_10money_base7patternEccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEESL_SL_i + (get_local $2) + (tee_local $24 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (i32.load offset=4 + (get_local $3) + ) + (if i32 + (tee_local $14 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (tee_local $5 + (i32.load + (get_local $5) + ) + ) + (get_local $5) + ) + (i32.add + (get_local $5) + (if i32 + (get_local $14) + (get_local $0) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + (get_local $16) + (get_local $19) + (get_local $20) + (i32.load8_s + (get_local $21) + ) + (i32.load8_s + (get_local $22) + ) + (get_local $12) + (get_local $8) + (get_local $9) + (get_local $17) + ) + (i32.store + (get_local $11) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $24) + ) + ) + (set_local $0 + (i32.load + (get_local $13) + ) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $11) + ) + ) + (set_local $0 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $23) + (get_local $2) + (get_local $1) + (get_local $0) + (get_local $3) + (get_local $4) + ) + ) + (if + (get_local $10) + (block + (call $_free + (get_local $10) + ) + (set_local $18 + (i32.load + (get_local $15) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $9) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $12) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $18) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNSt3__2L19utf8_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (set_local $10 + (get_local $1) + ) + (set_local $4 + (if i32 + (i32.and + (get_local $4) + (i32.const 4) + ) + (if i32 + (i32.gt_s + (i32.sub + (get_local $10) + (get_local $0) + ) + (i32.const 2) + ) + (if i32 + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const -17) + ) + (if i32 + (i32.eq + (i32.load8_s offset=1 + (get_local $0) + ) + (i32.const -69) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (if i32 + (i32.eq + (i32.load8_s offset=2 + (get_local $0) + ) + (i32.const -65) + ) + (i32.add + (get_local $0) + (i32.const 3) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (get_local $0) + ) + ) + (block i32 + (set_local $7 + (i32.const 0) + ) + (get_local $0) + ) + ) + ) + (tee_local $0 + (block $__rjto$6 i32 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L6 + (br_if $__rjti$6 + (i32.eqz + (i32.and + (i32.lt_u + (get_local $7) + (get_local $2) + ) + (i32.lt_u + (get_local $4) + (get_local $1) + ) + ) + ) + ) + (set_local $8 + (i32.and + (tee_local $5 + (i32.load8_s + (get_local $4) + ) + ) + (i32.const 255) + ) + ) + (block $do-once + (if + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (block + (br_if $__rjti$6 + (i32.gt_u + (get_local $8) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + (block + (br_if $__rjti$6 + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 194) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 224) + ) + (block + (br_if $__rjti$6 + (i32.lt_s + (i32.sub + (get_local $10) + (get_local $4) + ) + (i32.const 2) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (i32.load8_u offset=1 + (get_local $4) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.and + (get_local $5) + (i32.const 63) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 6) + ) + (i32.const 1984) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 2) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 240) + ) + (block + (br_if $__rjti$6 + (i32.lt_s + (i32.sub + (get_local $10) + (tee_local $5 + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (set_local $6 + (i32.load8_s offset=1 + (get_local $4) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $4) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $8) + (i32.const 224) + ) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.and + (get_local $6) + (i32.const 224) + ) + (i32.const 160) + ) + ) + (br $switch) + ) + (br_if $__rjti$1 + (i32.ne + (i32.and + (get_local $6) + (i32.const 224) + ) + (i32.const 128) + ) + ) + (br $switch) + ) + (br_if $__rjti$2 + (i32.ne + (i32.and + (get_local $6) + (i32.const 192) + ) + (i32.const 128) + ) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 6) + ) + (i32.const 4032) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 12) + ) + (i32.const 61440) + ) + ) + (i32.and + (get_local $5) + (i32.const 63) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 3) + ) + ) + (br $do-once) + ) + ) + (br_if $__rjti$6 + (i32.ge_s + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.const 245) + ) + ) + (br_if $__rjti$6 + (i32.lt_s + (i32.sub + (get_local $10) + (tee_local $5 + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + (set_local $6 + (i32.load8_s offset=1 + (get_local $4) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $4) + ) + ) + (set_local $11 + (i32.load8_u offset=3 + (get_local $4) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-case3 $switch-default4 + (i32.sub + (get_local $8) + (i32.const 240) + ) + ) + ) + (br_if $__rjti$3 + (i32.ge_s + (i32.and + (i32.add + (get_local $6) + (i32.const 112) + ) + (i32.const 255) + ) + (i32.const 48) + ) + ) + (br $switch1) + ) + (br_if $__rjti$4 + (i32.ne + (i32.and + (get_local $6) + (i32.const 240) + ) + (i32.const 128) + ) + ) + (br $switch1) + ) + (br_if $__rjti$5 + (i32.ne + (i32.and + (get_local $6) + (i32.const 192) + ) + (i32.const 128) + ) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $5 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.ne + (i32.and + (tee_local $9 + (get_local $11) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br_if $__rjti$6 + (i32.gt_u + (i32.or + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $6) + (i32.const 255) + ) + (i32.const 12) + ) + (i32.const 258048) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 18) + ) + (i32.const 1835008) + ) + ) + (i32.and + (i32.shl + (get_local $5) + (i32.const 6) + ) + (i32.const 4032) + ) + ) + (i32.and + (get_local $9) + (i32.const 63) + ) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $label$continue$L6) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (br $__rjto$6 + (i32.sub + (get_local $5) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $4) + (get_local $0) + ) + ) + ) + ) + (func $__ZNSt3__26locale5__impC2Ej (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.store + (get_local $0) + (i32.const 9184) + ) + (call $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEEC2Ej + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 28) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 144) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (get_local $1) + (i32.const 13970) + (i32.const 1) + ) + (set_local $2 + (i32.load + (get_local $2) + ) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store + (get_local $3) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (i32.const 17116) + (i32.const 0) + ) + (i32.store + (i32.const 17112) + (i32.const 6848) + ) + (call $__ZNSt3__26locale5__imp7installINS_7collateIcEEEEvPT_ + (get_local $0) + (i32.const 17112) + ) + (i32.store + (i32.const 17124) + (i32.const 0) + ) + (i32.store + (i32.const 17120) + (i32.const 6880) + ) + (call $__ZNSt3__26locale5__imp7installINS_7collateIwEEEEvPT_ + (get_local $0) + (i32.const 17120) + ) + (call $__ZNSt3__25ctypeIcEC2EPKtbj + (i32.const 17128) + (i32.const 0) + (i32.const 0) + (i32.const 1) + ) + (call $__ZNSt3__26locale5__imp7installINS_5ctypeIcEEEEvPT_ + (get_local $0) + (i32.const 17128) + ) + (i32.store + (i32.const 17148) + (i32.const 0) + ) + (i32.store + (i32.const 17144) + (i32.const 9400) + ) + (call $__ZNSt3__26locale5__imp7installINS_5ctypeIwEEEEvPT_ + (get_local $0) + (i32.const 17144) + ) + (i32.store + (i32.const 17156) + (i32.const 0) + ) + (i32.store + (i32.const 17152) + (i32.const 9468) + ) + (call $__ZNSt3__26locale5__imp7installINS_7codecvtIcc11__mbstate_tEEEEvPT_ + (get_local $0) + (i32.const 17152) + ) + (i32.store + (i32.const 17164) + (i32.const 0) + ) + (i32.store + (i32.const 17160) + (i32.const 9136) + ) + (i32.store + (i32.const 17168) + (call $__ZNSt3__26__clocEv) + ) + (call $__ZNSt3__26locale5__imp7installINS_7codecvtIwc11__mbstate_tEEEEvPT_ + (get_local $0) + (i32.const 17160) + ) + (i32.store + (i32.const 17180) + (i32.const 0) + ) + (i32.store + (i32.const 17176) + (i32.const 9516) + ) + (call $__ZNSt3__26locale5__imp7installINS_7codecvtIDsc11__mbstate_tEEEEvPT_ + (get_local $0) + (i32.const 17176) + ) + (i32.store + (i32.const 17188) + (i32.const 0) + ) + (i32.store + (i32.const 17184) + (i32.const 9564) + ) + (call $__ZNSt3__26locale5__imp7installINS_7codecvtIDic11__mbstate_tEEEEvPT_ + (get_local $0) + (i32.const 17184) + ) + (call $__ZNSt3__28numpunctIcEC2Ej + (i32.const 17192) + (i32.const 1) + ) + (call $__ZNSt3__26locale5__imp7installINS_8numpunctIcEEEEvPT_ + (get_local $0) + (i32.const 17192) + ) + (call $__ZNSt3__28numpunctIwEC2Ej + (i32.const 17216) + (i32.const 1) + ) + (call $__ZNSt3__26locale5__imp7installINS_8numpunctIwEEEEvPT_ + (get_local $0) + (i32.const 17216) + ) + (i32.store + (i32.const 17252) + (i32.const 0) + ) + (i32.store + (i32.const 17248) + (i32.const 6912) + ) + (call $__ZNSt3__26locale5__imp7installINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17248) + ) + (i32.store + (i32.const 17260) + (i32.const 0) + ) + (i32.store + (i32.const 17256) + (i32.const 6976) + ) + (call $__ZNSt3__26locale5__imp7installINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17256) + ) + (i32.store + (i32.const 17268) + (i32.const 0) + ) + (i32.store + (i32.const 17264) + (i32.const 7040) + ) + (call $__ZNSt3__26locale5__imp7installINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17264) + ) + (i32.store + (i32.const 17276) + (i32.const 0) + ) + (i32.store + (i32.const 17272) + (i32.const 7092) + ) + (call $__ZNSt3__26locale5__imp7installINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17272) + ) + (i32.store + (i32.const 17284) + (i32.const 0) + ) + (i32.store + (i32.const 17280) + (i32.const 8640) + ) + (call $__ZNSt3__26locale5__imp7installINS_10moneypunctIcLb0EEEEEvPT_ + (get_local $0) + (i32.const 17280) + ) + (i32.store + (i32.const 17292) + (i32.const 0) + ) + (i32.store + (i32.const 17288) + (i32.const 8696) + ) + (call $__ZNSt3__26locale5__imp7installINS_10moneypunctIcLb1EEEEEvPT_ + (get_local $0) + (i32.const 17288) + ) + (i32.store + (i32.const 17300) + (i32.const 0) + ) + (i32.store + (i32.const 17296) + (i32.const 8752) + ) + (call $__ZNSt3__26locale5__imp7installINS_10moneypunctIwLb0EEEEEvPT_ + (get_local $0) + (i32.const 17296) + ) + (i32.store + (i32.const 17308) + (i32.const 0) + ) + (i32.store + (i32.const 17304) + (i32.const 8808) + ) + (call $__ZNSt3__26locale5__imp7installINS_10moneypunctIwLb1EEEEEvPT_ + (get_local $0) + (i32.const 17304) + ) + (i32.store + (i32.const 17316) + (i32.const 0) + ) + (i32.store + (i32.const 17312) + (i32.const 8864) + ) + (call $__ZNSt3__26locale5__imp7installINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17312) + ) + (i32.store + (i32.const 17324) + (i32.const 0) + ) + (i32.store + (i32.const 17320) + (i32.const 8892) + ) + (call $__ZNSt3__26locale5__imp7installINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17320) + ) + (i32.store + (i32.const 17332) + (i32.const 0) + ) + (i32.store + (i32.const 17328) + (i32.const 8920) + ) + (call $__ZNSt3__26locale5__imp7installINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17328) + ) + (i32.store + (i32.const 17340) + (i32.const 0) + ) + (i32.store + (i32.const 17336) + (i32.const 8948) + ) + (call $__ZNSt3__26locale5__imp7installINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17336) + ) + (i32.store + (i32.const 17348) + (i32.const 0) + ) + (i32.store + (i32.const 17344) + (i32.const 7144) + ) + (i32.store + (i32.const 17352) + (i32.const 7192) + ) + (call $__ZNSt3__26locale5__imp7installINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17344) + ) + (i32.store + (i32.const 17364) + (i32.const 0) + ) + (i32.store + (i32.const 17360) + (i32.const 7228) + ) + (i32.store + (i32.const 17368) + (i32.const 7276) + ) + (call $__ZNSt3__26locale5__imp7installINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17360) + ) + (i32.store + (i32.const 17380) + (i32.const 0) + ) + (i32.store + (i32.const 17376) + (i32.const 9380) + ) + (i32.store + (i32.const 17384) + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (i32.const 17376) + (i32.const 8592) + ) + (call $__ZNSt3__26locale5__imp7installINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ + (get_local $0) + (i32.const 17376) + ) + (i32.store + (i32.const 17396) + (i32.const 0) + ) + (i32.store + (i32.const 17392) + (i32.const 9380) + ) + (i32.store + (i32.const 17400) + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (i32.const 17392) + (i32.const 8616) + ) + (call $__ZNSt3__26locale5__imp7installINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ + (get_local $0) + (i32.const 17392) + ) + (i32.store + (i32.const 17412) + (i32.const 0) + ) + (i32.store + (i32.const 17408) + (i32.const 8976) + ) + (call $__ZNSt3__26locale5__imp7installINS_8messagesIcEEEEvPT_ + (get_local $0) + (i32.const 17408) + ) + (i32.store + (i32.const 17420) + (i32.const 0) + ) + (i32.store + (i32.const 17416) + (i32.const 9008) + ) + (call $__ZNSt3__26locale5__imp7installINS_8messagesIwEEEEvPT_ + (get_local $0) + (i32.const 17416) + ) + ) + (func $__ZNSt3__29__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (set_local $15 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19240) + ) + ) + (call_indirect $FUNCSIG$vii + (tee_local $11 + (get_local $15) + ) + (tee_local $10 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19248) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $16 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (block $label$break$L1 + (if + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (tee_local $17 + (i32.add + (get_local $11) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $16) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (block + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L7 + (if + (i32.gt_s + (i32.sub + (get_local $2) + (tee_local $6 + (block $switch i32 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $6 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $6 + (call_indirect $FUNCSIG$iii + (get_local $9) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $7) + (get_local $6) + ) + (br $switch + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load8_s + (get_local $6) + ) + (i32.const 48) + ) + (block + (block $switch2 + (block $switch-default5 + (block $switch-case3 + (br_table $switch-case3 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-case3 $switch-default5 + (i32.sub + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 88) + ) + ) + ) + (br $switch2) + ) + (br $label$break$L7) + ) + (set_local $8 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $12) + (get_local $8) + ) + (set_local $7 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $7) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $8) + (get_local $7) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (block $label$break$L12 + (if + (i32.ne + (get_local $6) + (get_local $2) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ge_u + (get_local $8) + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + ) + ) + (set_local $12 + (i32.load8_s + (get_local $8) + ) + ) + (i32.store8 + (get_local $8) + (i32.load8_s + (get_local $7) + ) + ) + (i32.store8 + (get_local $7) + (get_local $12) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $12 + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in8 + (if + (i32.lt_u + (get_local $8) + (get_local $2) + ) + (block + (if + (i32.and + (i32.ne + (tee_local $18 + (i32.load8_s + (i32.add + (if i32 + (tee_local $14 + (i32.lt_s + (tee_local $13 + (i32.load8_s + (get_local $17) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (i32.eq + (get_local $10) + (get_local $18) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (tee_local $10 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $10) + (get_local $12) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $7 + (i32.add + (i32.lt_u + (get_local $7) + (i32.add + (if i32 + (get_local $14) + (i32.load + (get_local $16) + ) + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (i32.const -1) + ) + ) + (get_local $7) + ) + ) + ) + ) + (set_local $13 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $8) + ) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $14 + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $14) + (get_local $13) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in8) + ) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.add + (get_local $3) + (i32.shl + (i32.sub + (get_local $6) + (get_local $0) + ) + (i32.const 2) + ) + ) + ) + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $5 + (get_local $6) + ) + (block + (set_local $5 + (get_local $7) + ) + (loop $while-in10 + (if + (i32.ge_u + (get_local $6) + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -4) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $label$break$L1) + ) + (block + (set_local $8 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $6) + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $5) + (get_local $8) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $while-in10) + ) + ) + ) + ) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $9) + (get_local $0) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $9) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $5 + (i32.add + (get_local $3) + (i32.shl + (i32.sub + (get_local $2) + (get_local $0) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (if i32 + (i32.eq + (get_local $1) + (get_local $2) + ) + (get_local $5) + (i32.add + (get_local $3) + (i32.shl + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const 2) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $15) + ) + ) + (func $__ZNSt3__29__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (set_local $14 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19208) + ) + ) + (call_indirect $FUNCSIG$vii + (tee_local $11 + (get_local $14) + ) + (tee_local $10 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19220) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (set_local $15 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (tee_local $16 + (i32.add + (get_local $11) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $15) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (block + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L7 + (if + (i32.gt_s + (i32.sub + (get_local $2) + (tee_local $6 + (block $switch i32 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $6 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $6 + (call_indirect $FUNCSIG$iii + (get_local $9) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $7) + (get_local $6) + ) + (br $switch + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + ) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load8_s + (get_local $6) + ) + (i32.const 48) + ) + (block + (block $switch1 + (block $switch-default4 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-default4 $switch-case2 $switch-default4 + (i32.sub + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + (i32.const 88) + ) + ) + ) + (br $switch1) + ) + (br $label$break$L7) + ) + (set_local $8 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $12 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $12) + (get_local $8) + ) + (set_local $7 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $7) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (get_local $7) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (block $label$break$L12 + (if + (i32.ne + (get_local $6) + (get_local $2) + ) + (block + (set_local $7 + (get_local $2) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in + (br_if $label$break$L12 + (i32.ge_u + (get_local $8) + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + ) + ) + (set_local $12 + (i32.load8_s + (get_local $8) + ) + ) + (i32.store8 + (get_local $8) + (i32.load8_s + (get_local $7) + ) + ) + (i32.store8 + (get_local $7) + (get_local $12) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $12 + (call_indirect $FUNCSIG$ii + (get_local $10) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in7 + (if + (i32.lt_u + (get_local $8) + (get_local $2) + ) + (block + (if + (i32.and + (i32.ne + (tee_local $13 + (i32.load8_s + (i32.add + (if i32 + (i32.lt_s + (i32.load8_s + (get_local $16) + ) + (i32.const 0) + ) + (i32.load + (get_local $11) + ) + (get_local $11) + ) + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (i32.eq + (get_local $10) + (get_local $13) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (tee_local $10 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $12) + ) + (set_local $10 + (i32.const 0) + ) + (set_local $7 + (i32.add + (i32.lt_u + (get_local $7) + (i32.add + (if i32 + (i32.lt_s + (tee_local $13 + (i32.load8_s + (get_local $16) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $15) + ) + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (i32.const -1) + ) + ) + (get_local $7) + ) + ) + ) + ) + (set_local $13 + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.load8_s + (get_local $8) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $17 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $17) + (get_local $13) + ) + (set_local $10 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in7) + ) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (tee_local $7 + (i32.add + (get_local $3) + (i32.sub + (get_local $6) + (get_local $0) + ) + ) + ) + (tee_local $6 + (i32.load + (get_local $5) + ) + ) + ) + (get_local $7) + (block i32 + (loop $while-in9 + (if + (i32.lt_u + (get_local $7) + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + ) + (block + (set_local $8 + (i32.load8_s + (get_local $7) + ) + ) + (i32.store8 + (get_local $7) + (i32.load8_s + (get_local $6) + ) + ) + (i32.store8 + (get_local $6) + (get_local $8) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (br $while-in9) + ) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $9) + (get_local $0) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $9) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $5) + (tee_local $5 + (i32.add + (get_local $3) + (i32.sub + (get_local $2) + (get_local $0) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (if i32 + (i32.eq + (get_local $1) + (get_local $2) + ) + (get_local $5) + (i32.add + (get_local $3) + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $11) + ) + (set_global $STACKTOP + (get_local $14) + ) + ) + (func $__ZNKSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 576) + ) + ) + (set_local $14 + (get_local $7) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 464) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + ) + (i32.store + (tee_local $17 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $4) + ) + ) + (set_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $13) + (i32.const 19240) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 564) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (i32.load + (get_local $2) + ) + ) + (set_local $10 + (i32.load offset=4 + (get_local $4) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 424) + ) + ) + (i32.load + (get_local $12) + ) + ) + (if + (call $__ZNSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIwEERNS_10unique_ptrIwPFvPvEEERPwSM_ + (get_local $1) + (get_local $4) + (get_local $3) + (get_local $13) + (get_local $10) + (get_local $5) + (get_local $8) + (get_local $0) + (get_local $11) + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (i32.add + (get_local $9) + (i32.const 400) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $0) + (i32.const 15331) + (i32.const 15341) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (if + (i32.gt_s + (tee_local $0 + (i32.sub + (tee_local $10 + (i32.load + (get_local $16) + ) + ) + (tee_local $9 + (i32.load + (get_local $11) + ) + ) + ) + ) + (i32.const 392) + ) + (block + (set_local $3 + (tee_local $0 + (call $_malloc + (i32.add + (i32.shr_s + (get_local $0) + (i32.const 2) + ) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (block + (set_local $3 + (i32.const 0) + ) + (set_local $0 + (get_local $15) + ) + ) + ) + (if + (i32.load8_s + (get_local $8) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 45) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $4) + (i32.const 40) + ) + ) + (set_local $18 + (get_local $4) + ) + (set_local $8 + (get_local $0) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $9) + (get_local $10) + ) + (block + (set_local $10 + (i32.load + (get_local $9) + ) + ) + (set_local $0 + (get_local $4) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eq + (get_local $0) + (get_local $12) + ) + (block + (set_local $0 + (get_local $12) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load + (get_local $0) + ) + (get_local $10) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (i32.store8 + (get_local $8) + (i32.load8_s + (i32.add + (i32.shr_s + (i32.sub + (get_local $0) + (get_local $18) + ) + (i32.const 2) + ) + (i32.const 15331) + ) + ) + ) + (set_local $10 + (i32.load + (get_local $16) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $14) + (get_local $6) + ) + (drop + (call $_sscanf + (get_local $15) + (i32.const 15232) + (get_local $14) + ) + ) + (if + (get_local $3) + (call $_free + (get_local $3) + ) + ) + ) + ) + (set_local $0 + (if i32 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $3 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $3) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $3 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (i32.load + (get_local $13) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $11) + ) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (if + (get_local $0) + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNSt3__2L13utf8_to_utf16EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (if + (i32.and + (get_local $7) + (i32.const 4) + ) + (if + (i32.gt_s + (i32.sub + (tee_local $0 + (get_local $1) + ) + (tee_local $3 + (i32.load + (get_local $2) + ) + ) + ) + (i32.const 2) + ) + (if + (i32.eq + (i32.load8_s + (get_local $3) + ) + (i32.const -17) + ) + (if + (i32.eq + (i32.load8_s offset=1 + (get_local $3) + ) + (i32.const -69) + ) + (if + (i32.eq + (i32.load8_s offset=2 + (get_local $3) + ) + (i32.const -65) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 3) + ) + ) + ) + ) + ) + ) + (set_local $0 + (get_local $1) + ) + ) + (set_local $7 + (get_local $4) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $label$continue$L9 + (block $label$break$L9 + (br_if $__rjti$0 + (i32.eqz + (tee_local $3 + (i32.lt_u + (tee_local $8 + (i32.load + (get_local $2) + ) + ) + (get_local $1) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.ge_u + (tee_local $11 + (i32.load + (get_local $5) + ) + ) + (get_local $4) + ) + ) + (if + (i32.gt_u + (tee_local $10 + (i32.and + (tee_local $3 + (i32.load8_s + (get_local $8) + ) + ) + (i32.const 255) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (block $do-once + (if + (i32.gt_s + (get_local $3) + (i32.const -1) + ) + (block + (i32.store16 + (get_local $11) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.lt_s + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 194) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 224) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $8) + ) + (i32.const 2) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load8_u offset=1 + (get_local $8) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.or + (i32.and + (get_local $3) + (i32.const 63) + ) + (i32.and + (i32.shl + (get_local $10) + (i32.const 6) + ) + (i32.const 1984) + ) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store16 + (get_local $11) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $8) + (i32.const 2) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 240) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $8) + ) + (i32.const 3) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (set_local $3 + (i32.load8_s offset=1 + (get_local $8) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $8) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $10) + (i32.const 224) + ) + ) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 224) + ) + (i32.const 160) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 224) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $9 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (i32.and + (tee_local $3 + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 6) + ) + (i32.const 4032) + ) + (i32.shl + (get_local $10) + (i32.const 12) + ) + ) + (i32.and + (get_local $9) + (i32.const 63) + ) + ) + ) + (i32.const 65535) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store16 + (get_local $11) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $8) + (i32.const 3) + ) + ) + (br $do-once) + ) + ) + (if + (i32.ge_s + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 245) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $8) + ) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (set_local $3 + (i32.load8_s offset=1 + (get_local $8) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $8) + ) + ) + (set_local $12 + (i32.load8_u offset=3 + (get_local $8) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-case3 $switch-default4 + (i32.sub + (get_local $10) + (i32.const 240) + ) + ) + ) + (if + (i32.ge_s + (i32.and + (i32.add + (get_local $3) + (i32.const 112) + ) + (i32.const 255) + ) + (i32.const 48) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch1) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 240) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch1) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $8 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $9 + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $7) + (get_local $11) + ) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (i32.or + (i32.or + (i32.or + (i32.and + (i32.shl + (tee_local $3 + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 12) + ) + (i32.const 258048) + ) + (i32.shl + (tee_local $10 + (i32.and + (get_local $10) + (i32.const 7) + ) + ) + (i32.const 18) + ) + ) + (i32.and + (tee_local $12 + (i32.shl + (get_local $8) + (i32.const 6) + ) + ) + (i32.const 4032) + ) + ) + (tee_local $9 + (i32.and + (get_local $9) + (i32.const 63) + ) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store16 + (get_local $11) + (i32.or + (i32.or + (i32.or + (i32.and + (i32.shl + (get_local $3) + (i32.const 2) + ) + (i32.const 60) + ) + (i32.and + (i32.shr_u + (get_local $8) + (i32.const 4) + ) + (i32.const 3) + ) + ) + (i32.add + (i32.shl + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 4) + ) + (i32.const 3) + ) + (i32.shl + (get_local $10) + (i32.const 2) + ) + ) + (i32.const 6) + ) + (i32.const 16320) + ) + ) + (i32.const 55296) + ) + ) + (i32.store + (get_local $5) + (tee_local $3 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.store16 + (get_local $3) + (i32.or + (i32.or + (get_local $9) + (i32.and + (get_local $12) + (i32.const 960) + ) + ) + (i32.const 56320) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + (br $label$continue$L9) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.and + (get_local $3) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE5do_inERS1_PKcS5_RS5_PwS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $12 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $13 + (get_local $12) + ) + (set_local $8 + (get_local $2) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $8) + (get_local $3) + ) + (block + (set_local $8 + (get_local $3) + ) + (br $while-out) + ) + ) + (if + (i32.load8_s + (get_local $8) + ) + (block + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (i32.store + (get_local $7) + (get_local $5) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $14 + (get_local $6) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $0 + (get_local $8) + ) + (block $__rjto$6 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (loop $while-in1 + (br_if $__rjti$6 + (i32.or + (i32.eq + (get_local $5) + (get_local $6) + ) + (i32.eq + (get_local $2) + (get_local $3) + ) + ) + ) + (set_local $9 + (i32.load offset=4 + (tee_local $8 + (get_local $1) + ) + ) + ) + (i32.store + (tee_local $10 + (get_local $13) + ) + (i32.load + (get_local $8) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $9) + ) + (set_local $10 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $9 + (call $_mbsnrtowcs + (get_local $5) + (get_local $4) + (i32.sub + (tee_local $8 + (get_local $0) + ) + (get_local $2) + ) + (i32.shr_s + (i32.sub + (get_local $14) + (get_local $5) + ) + (i32.const 2) + ) + (get_local $1) + ) + ) + (if + (get_local $10) + (drop + (call $_uselocale + (get_local $10) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (i32.const -1) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $__rjti$3) + ) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (i32.load + (get_local $7) + ) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (br_if $__rjti$4 + (i32.eq + (get_local $5) + (get_local $6) + ) + ) + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + (block + (set_local $0 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $2 + (call $_mbrtowc + (get_local $5) + (get_local $2) + (i32.const 1) + (get_local $1) + ) + ) + (if + (get_local $0) + (drop + (call $_uselocale + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (block + (set_local $0 + (i32.const 2) + ) + (br $__rjto$6) + ) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $4) + (tee_local $2 + (i32.add + (i32.load + (get_local $4) + ) + (i32.const 1) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + (loop $while-in3 + (block $while-out2 + (if + (i32.eq + (get_local $0) + (get_local $3) + ) + (block + (set_local $0 + (get_local $3) + ) + (br $while-out2) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + ) + (set_local $5 + (i32.load + (get_local $7) + ) + ) + ) + ) + (br $while-in1) + ) + ) + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L29 + (i32.store + (get_local $7) + (get_local $5) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $0) + (i32.load + (get_local $4) + ) + ) + ) + (set_local $1 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $2 + (call $_mbrtowc + (get_local $5) + (get_local $0) + (i32.sub + (get_local $8) + (get_local $0) + ) + (get_local $13) + ) + ) + (if + (get_local $1) + (drop + (call $_uselocale + (get_local $1) + ) + ) + ) + (set_local $0 + (block $switch i32 + (block $switch-default + (block $switch-case5 + (block $switch-case4 + (block $switch-case + (br_table $switch-case4 $switch-case $switch-case5 $switch-default + (i32.sub + (get_local $2) + (i32.const -2) + ) + ) + ) + (br $__rjti$0) + ) + (br $__rjti$1) + ) + (br $switch + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.add + (get_local $0) + (get_local $2) + ) + ) + ) + (set_local $5 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const 4) + ) + ) + (br $label$continue$L29) + ) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $0 + (i32.const 2) + ) + (br $__rjto$6) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + (br $__rjto$6) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $0 + (i32.ne + (get_local $0) + (get_local $3) + ) + ) + (br $__rjto$6) + ) + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$6) + ) + (br $__rjto$6) + ) + (set_local $0 + (i32.ne + (get_local $2) + (get_local $3) + ) + ) + ) + (set_global $STACKTOP + (get_local $12) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE6do_outERS1_PKwS5_RS5_PcS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (set_local $10 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $12 + (get_local $10) + ) + (set_local $13 + (i32.add + (get_local $10) + (i32.const 8) + ) + ) + (set_local $8 + (get_local $2) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $8) + (get_local $3) + ) + (block + (set_local $8 + (get_local $3) + ) + (br $while-out) + ) + ) + (if + (i32.load + (get_local $8) + ) + (block + (set_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (i32.store + (get_local $7) + (get_local $5) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $14 + (get_local $6) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $0 + (get_local $8) + ) + (block $__rjto$4 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L6 + (br_if $__rjti$4 + (i32.or + (i32.eq + (get_local $5) + (get_local $6) + ) + (i32.eq + (get_local $2) + (get_local $3) + ) + ) + ) + (set_local $15 + (i32.load offset=4 + (tee_local $8 + (get_local $1) + ) + ) + ) + (i32.store + (tee_local $9 + (get_local $12) + ) + (i32.load + (get_local $8) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $15) + ) + (set_local $8 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $9 + (call $_wcsnrtombs + (get_local $5) + (get_local $4) + (i32.shr_s + (i32.sub + (get_local $0) + (get_local $2) + ) + (i32.const 2) + ) + (i32.sub + (get_local $14) + (get_local $5) + ) + (get_local $1) + ) + ) + (if + (get_local $8) + (drop + (call $_uselocale + (get_local $8) + ) + ) + ) + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-default + (i32.sub + (get_local $9) + (i32.const -1) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + (set_local $1 + (get_local $5) + ) + (br $__rjti$0) + ) + (set_local $0 + (i32.const 1) + ) + (br $__rjto$4) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (i32.load + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $5) + (get_local $6) + ) + ) + (if + (i32.eq + (get_local $0) + (get_local $3) + ) + (block + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (set_local $0 + (get_local $3) + ) + ) + (block + (set_local $2 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $0 + (call $_wcrtomb + (get_local $13) + (i32.const 0) + (get_local $1) + ) + ) + (if + (get_local $2) + (drop + (call $_uselocale + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.const -1) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $__rjto$4) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.sub + (get_local $14) + (i32.load + (get_local $7) + ) + ) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $__rjto$4) + ) + (set_local $2 + (get_local $13) + ) + ) + (loop $while-in2 + (if + (get_local $0) + (block + (set_local $5 + (i32.load8_s + (get_local $2) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (get_local $5) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in2) + ) + ) + ) + (i32.store + (get_local $4) + (tee_local $2 + (i32.add + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + ) + (set_local $0 + (get_local $2) + ) + (loop $while-in4 + (block $while-out3 + (if + (i32.eq + (get_local $0) + (get_local $3) + ) + (block + (set_local $0 + (get_local $3) + ) + (br $while-out3) + ) + ) + (if + (i32.load + (get_local $0) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in4) + ) + ) + ) + ) + (set_local $5 + (i32.load + (get_local $7) + ) + ) + ) + ) + (br $label$continue$L6) + ) + ) + (i32.store + (get_local $7) + (get_local $1) + ) + (loop $while-in6 + (if + (i32.ne + (get_local $0) + (i32.load + (get_local $4) + ) + ) + (block + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (set_local $2 + (call $_uselocale + (i32.load + (get_local $11) + ) + ) + ) + (set_local $1 + (call $_wcrtomb + (get_local $1) + (get_local $3) + (get_local $12) + ) + ) + (if + (get_local $2) + (drop + (call $_uselocale + (get_local $2) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (i32.const -1) + ) + (block + (i32.store + (get_local $7) + (tee_local $1 + (i32.add + (i32.load + (get_local $7) + ) + (get_local $1) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in6) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $0) + ) + (set_local $0 + (i32.const 2) + ) + (br $__rjto$4) + ) + (br $__rjto$4) + ) + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$4) + ) + (br $__rjto$4) + ) + (set_local $0 + (i32.ne + (get_local $2) + (get_local $3) + ) + ) + ) + (set_global $STACKTOP + (get_local $10) + ) + (get_local $0) + ) + (func $__ZNKSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (set_local $14 + (get_local $7) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 36) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 140) + ) + ) + ) + (i32.store + (tee_local $17 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $4) + ) + ) + (set_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $13) + (i32.const 19208) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 136) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (i32.load + (get_local $2) + ) + ) + (set_local $10 + (i32.load offset=4 + (get_local $4) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (i32.load + (get_local $12) + ) + ) + (if + (call $__ZNSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIcEERNS_10unique_ptrIcPFvPvEEERPcSM_ + (get_local $1) + (get_local $4) + (get_local $3) + (get_local $13) + (get_local $10) + (get_local $5) + (get_local $8) + (get_local $0) + (get_local $11) + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (i32.add + (get_local $9) + (i32.const 100) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $0) + (i32.const 15221) + (i32.const 15231) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (if + (i32.gt_s + (tee_local $0 + (i32.sub + (tee_local $10 + (i32.load + (get_local $16) + ) + ) + (tee_local $9 + (i32.load + (get_local $11) + ) + ) + ) + ) + (i32.const 98) + ) + (block + (set_local $3 + (tee_local $0 + (call $_malloc + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (block + (set_local $3 + (i32.const 0) + ) + (set_local $0 + (get_local $15) + ) + ) + ) + (if + (i32.load8_s + (get_local $8) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 45) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $4) + (i32.const 10) + ) + ) + (set_local $18 + (get_local $4) + ) + (set_local $8 + (get_local $0) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $9) + (get_local $10) + ) + (block + (set_local $10 + (i32.load8_s + (get_local $9) + ) + ) + (set_local $0 + (get_local $4) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.eq + (get_local $0) + (get_local $12) + ) + (block + (set_local $0 + (get_local $12) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (get_local $0) + ) + (get_local $10) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (i32.store8 + (get_local $8) + (i32.load8_s + (i32.add + (i32.sub + (get_local $0) + (get_local $18) + ) + (i32.const 15221) + ) + ) + ) + (set_local $10 + (i32.load + (get_local $16) + ) + ) + (set_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store8 + (get_local $8) + (i32.const 0) + ) + (i32.store + (get_local $14) + (get_local $6) + ) + (drop + (call $_sscanf + (get_local $15) + (i32.const 15232) + (get_local $14) + ) + ) + (if + (get_local $3) + (call $_free + (get_local $3) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $3 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $3) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (i32.load + (get_local $13) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $11) + ) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (if + (get_local $0) + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load + (get_local $17) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNSt3__2L13utf16_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L4 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (i32.and + (get_local $7) + (i32.const 2) + ) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $4) + (get_local $3) + ) + (i32.const 3) + ) + (set_local $0 + (i32.const 1) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.const -17) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const -69) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const -65) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L4) + ) + (set_local $3 + (get_local $1) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $while-in + (if + (i32.ge_u + (get_local $0) + (get_local $1) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L4) + ) + ) + (if + (i32.gt_u + (tee_local $7 + (i32.and + (tee_local $8 + (i32.load16_s + (get_local $0) + ) + ) + (i32.const 65535) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + ) + (block $do-once + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 65535) + ) + (i32.const 128) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 1) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (get_local $8) + ) + ) + (block + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 65535) + ) + (i32.const 2048) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 2) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $7) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.and + (get_local $7) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 65535) + ) + (i32.const 55296) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $7) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.and + (get_local $7) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once) + ) + ) + (if + (i32.ge_s + (i32.and + (get_local $8) + (i32.const 65535) + ) + (i32.const 56320) + ) + (block + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 65535) + ) + (i32.const 57344) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $7) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.or + (i32.and + (get_local $7) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $3) + (get_local $0) + ) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $0 + (i32.load16_u + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (i32.const 64512) + ) + (i32.const 56320) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $4) + (i32.load + (get_local $5) + ) + ) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (if + (i32.gt_u + (i32.or + (i32.or + (i32.add + (i32.shl + (tee_local $9 + (i32.and + (get_local $7) + (i32.const 960) + ) + ) + (i32.const 10) + ) + (i32.const 65536) + ) + (i32.and + (i32.shl + (get_local $7) + (i32.const 10) + ) + (i32.const 64512) + ) + ) + (i32.and + (get_local $0) + (i32.const 1023) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (i32.or + (i32.shr_u + (tee_local $8 + (i32.add + (i32.shr_u + (get_local $9) + (i32.const 6) + ) + (i32.const 1) + ) + ) + (i32.const 2) + ) + (i32.const 240) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $9 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $9) + (i32.or + (i32.or + (i32.and + (i32.shr_u + (get_local $7) + (i32.const 2) + ) + (i32.const 15) + ) + (i32.and + (i32.shl + (get_local $8) + (i32.const 4) + ) + (i32.const 48) + ) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $8) + (i32.or + (i32.or + (i32.and + (i32.shl + (get_local $7) + (i32.const 4) + ) + (i32.const 48) + ) + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 6) + ) + (i32.const 15) + ) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $7) + (i32.or + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 128) + ) + ) + ) + ) + ) + (i32.store + (get_local $2) + (tee_local $0 + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 2) + ) + ) + ) + (br $while-in) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__2L12utf8_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (if + (i32.and + (get_local $7) + (i32.const 4) + ) + (if + (i32.gt_s + (i32.sub + (tee_local $0 + (get_local $1) + ) + (tee_local $3 + (i32.load + (get_local $2) + ) + ) + ) + (i32.const 2) + ) + (if + (i32.eq + (i32.load8_s + (get_local $3) + ) + (i32.const -17) + ) + (if + (i32.eq + (i32.load8_s offset=1 + (get_local $3) + ) + (i32.const -69) + ) + (if + (i32.eq + (i32.load8_s offset=2 + (get_local $3) + ) + (i32.const -65) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 3) + ) + ) + ) + ) + ) + ) + (set_local $0 + (get_local $1) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $label$continue$L9 + (block $label$break$L9 + (br_if $__rjti$0 + (i32.eqz + (tee_local $3 + (i32.lt_u + (tee_local $7 + (i32.load + (get_local $2) + ) + ) + (get_local $1) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.ge_u + (tee_local $10 + (i32.load + (get_local $5) + ) + ) + (get_local $4) + ) + ) + (set_local $3 + (i32.and + (tee_local $8 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 255) + ) + ) + (block $do-once + (if + (i32.gt_s + (get_local $8) + (i32.const -1) + ) + (block + (if + (i32.gt_u + (get_local $3) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 194) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 224) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $7) + ) + (i32.const 2) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $8 + (i32.load8_u offset=1 + (get_local $7) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.or + (i32.and + (get_local $8) + (i32.const 63) + ) + (i32.and + (i32.shl + (get_local $3) + (i32.const 6) + ) + (i32.const 1984) + ) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $7) + (i32.const 2) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 240) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $7) + ) + (i32.const 3) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (set_local $8 + (i32.load8_s offset=1 + (get_local $7) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $7) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $3) + (i32.const 224) + ) + ) + ) + (if + (i32.ne + (i32.and + (get_local $8) + (i32.const 224) + ) + (i32.const 160) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch) + ) + (if + (i32.ne + (i32.and + (get_local $8) + (i32.const 224) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch) + ) + (if + (i32.ne + (i32.and + (get_local $8) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $9 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 6) + ) + (i32.const 4032) + ) + (i32.and + (i32.shl + (get_local $3) + (i32.const 12) + ) + (i32.const 61440) + ) + ) + (i32.and + (get_local $9) + (i32.const 63) + ) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $7) + (i32.const 3) + ) + ) + (br $do-once) + ) + ) + (if + (i32.ge_s + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 245) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $0) + (get_local $7) + ) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (set_local $8 + (i32.load8_s offset=1 + (get_local $7) + ) + ) + (set_local $9 + (i32.load8_u offset=2 + (get_local $7) + ) + ) + (set_local $11 + (i32.load8_u offset=3 + (get_local $7) + ) + ) + (block $switch1 + (block $switch-default4 + (block $switch-case3 + (block $switch-case2 + (br_table $switch-case2 $switch-default4 $switch-default4 $switch-default4 $switch-case3 $switch-default4 + (i32.sub + (get_local $3) + (i32.const 240) + ) + ) + ) + (if + (i32.ge_s + (i32.and + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.const 255) + ) + (i32.const 48) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch1) + ) + (if + (i32.ne + (i32.and + (get_local $8) + (i32.const 240) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (br $switch1) + ) + (if + (i32.ne + (i32.and + (get_local $8) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $9 + (get_local $9) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.ne + (i32.and + (tee_local $11 + (get_local $11) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.or + (i32.or + (i32.or + (i32.and + (i32.shl + (i32.and + (get_local $8) + (i32.const 255) + ) + (i32.const 12) + ) + (i32.const 258048) + ) + (i32.and + (i32.shl + (get_local $3) + (i32.const 18) + ) + (i32.const 1835008) + ) + ) + (i32.and + (i32.shl + (get_local $9) + (i32.const 6) + ) + (i32.const 4032) + ) + ) + (i32.and + (get_local $11) + (i32.const 63) + ) + ) + ) + (get_local $6) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L9) + ) + ) + (i32.store + (get_local $10) + (get_local $3) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const 4) + ) + ) + (br $label$continue$L9) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.and + (get_local $3) + (i32.const 1) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIwS3_NS_9allocatorIwEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 432) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (tee_local $15 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $4) + ) + ) + ) + (set_local $8 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $11) + (i32.const 19240) + ) + ) + (i32.store8 + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 428) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $0 + (get_local $7) + ) + (tee_local $10 + (i32.load + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 424) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (call $__ZNSt3__29money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIwEERNS_10unique_ptrIwPFvPvEEERPwSM_ + (get_local $1) + (get_local $16) + (get_local $3) + (get_local $11) + (get_local $4) + (get_local $5) + (get_local $12) + (get_local $8) + (get_local $9) + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (i32.add + (get_local $13) + (i32.const 400) + ) + ) + (block + (if + (i32.lt_s + (i32.load8_s + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $3) + (i32.const 0) + ) + ) + ) + (if + (i32.load8_s + (get_local $12) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw + (get_local $6) + (call_indirect $FUNCSIG$iii + (get_local $8) + (i32.const 45) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $8) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (set_local $3 + (call_indirect $FUNCSIG$iii + (get_local $8) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=44 + (i32.load + (get_local $8) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (set_local $8 + (i32.add + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.const -4) + ) + ) + (set_local $0 + (i32.load + (get_local $9) + ) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $0) + (get_local $8) + ) + (if + (i32.eq + (i32.load + (get_local $0) + ) + (get_local $3) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_ + (get_local $6) + (get_local $0) + (get_local $4) + ) + ) + ) + ) + (set_local $0 + (get_local $10) + ) + (set_local $3 + (if i32 + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $3 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $3) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $3) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $15) + ) + ) + (set_local $0 + (i32.load + (get_local $9) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (if + (get_local $0) + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load + (get_local $14) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNSt3__29__num_getIcE19__stage2_float_loopEcRbRcPcRS4_ccRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjS4_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (result i32) + (tee_local $0 + (block $label$break$L1 i32 + (if i32 + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (if i32 + (i32.load8_s + (get_local $1) + ) + (block i32 + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 46) + ) + (if i32 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (if i32 + (i32.lt_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + (block i32 + (set_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block i32 + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $5 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (block + (drop + (br_if $label$break$L1 + (i32.const -1) + (i32.eqz + (i32.load8_s + (get_local $1) + ) + ) + ) + ) + (drop + (br_if $label$break$L1 + (i32.const 0) + (i32.ge_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (br $label$break$L1 + (i32.const 0) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $11) + (i32.const 32) + ) + ) + (set_local $5 + (get_local $11) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-out) + ) + ) + (if + (i32.ne + (i32.load8_u + (get_local $5) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (block + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (if i32 + (i32.gt_s + (tee_local $5 + (i32.sub + (get_local $5) + (get_local $11) + ) + ) + (i32.const 31) + ) + (i32.const -1) + (block i32 + (set_local $0 + (i32.load8_s + (i32.add + (get_local $5) + (i32.const 13937) + ) + ) + ) + (block $switch-default + (block $switch-case1 + (block $switch-case + (br_table $switch-case1 $switch-case1 $switch-case $switch-case $switch-default + (i32.sub + (get_local $5) + (i32.const 22) + ) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (get_local $3) + ) + (drop + (br_if $label$break$L1 + (i32.const -1) + (i32.ne + (i32.and + (i32.load8_u + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 95) + ) + (i32.and + (i32.load8_u + (get_local $2) + ) + (i32.const 127) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (br $label$break$L1 + (i32.const 0) + ) + ) + (i32.store8 + (get_local $2) + (i32.const 80) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (br $label$break$L1 + (i32.const 0) + ) + ) + (if + (i32.eq + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 95) + ) + ) + (i32.load8_s + (get_local $2) + ) + ) + (block + (i32.store8 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 128) + ) + ) + (if + (i32.load8_s + (get_local $1) + ) + (block + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (if + (if i32 + (i32.lt_s + (tee_local $1 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (tee_local $1 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + (block + (set_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (drop + (br_if $label$break$L1 + (i32.const 0) + (i32.gt_s + (get_local $5) + (i32.const 21) + ) + ) + ) + (i32.store + (get_local $10) + (i32.add + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 f64) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 352) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.store + (tee_local $8 + (tee_local $0 + (get_local $6) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (set_local $11 + (call $__ZNSt3__214__num_put_base14__format_floatEPcPKcj + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 14191) + (i32.load offset=4 + (get_local $2) + ) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 300) + ) + ) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 308) + ) + ) + ) + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $7 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $5 + (if i32 + (i32.gt_s + (get_local $7) + (i32.const 29) + ) + (block i32 + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $0 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (if i32 + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + (get_local $9) + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + ) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $0 + (get_local $7) + ) + (i32.load + (get_local $10) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 72) + ) + ) + (set_local $12 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $0) + ) + ) + (get_local $2) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (get_local $5) + (get_local $8) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (get_local $7) + ) + (if i32 + (tee_local $0 + (call $_malloc + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + ) + (block i32 + (set_local $8 + (get_local $5) + ) + (get_local $0) + ) + (block i32 + (set_local $8 + (i32.load + (get_local $10) + ) + ) + (get_local $0) + ) + ) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 60) + ) + ) + (tee_local $10 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE23__widen_and_group_floatEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $8) + (get_local $12) + (get_local $11) + (get_local $5) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 68) + ) + ) + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 64) + ) + ) + (get_local $7) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $10) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $8 + (i32.load + (get_local $8) + ) + ) + (set_local $10 + (i32.load + (get_local $11) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 304) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (get_local $1) + (tee_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $11) + (get_local $5) + (get_local $8) + (get_local $10) + (get_local $2) + (get_local $3) + ) + ) + ) + (if + (get_local $0) + (call $_free + (get_local $0) + ) + ) + (call $_free + (get_local $9) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwd (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 f64) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 352) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.store + (tee_local $8 + (tee_local $0 + (get_local $6) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (set_local $11 + (call $__ZNSt3__214__num_put_base14__format_floatEPcPKcj + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 23209) + (i32.load offset=4 + (get_local $2) + ) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 300) + ) + ) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 308) + ) + ) + ) + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $7 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $5 + (if i32 + (i32.gt_s + (get_local $7) + (i32.const 29) + ) + (block i32 + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $0 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (if i32 + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + (get_local $9) + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + ) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $0 + (get_local $7) + ) + (i32.load + (get_local $10) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 72) + ) + ) + (set_local $12 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $0) + ) + ) + (get_local $2) + ) + ) + (set_local $5 + (if i32 + (i32.eq + (get_local $5) + (get_local $8) + ) + (block i32 + (set_local $0 + (i32.const 0) + ) + (get_local $7) + ) + (if i32 + (tee_local $0 + (call $_malloc + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + ) + (block i32 + (set_local $8 + (get_local $5) + ) + (get_local $0) + ) + (block i32 + (set_local $8 + (i32.load + (get_local $10) + ) + ) + (get_local $0) + ) + ) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 60) + ) + ) + (tee_local $10 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE23__widen_and_group_floatEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $8) + (get_local $12) + (get_local $11) + (get_local $5) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 68) + ) + ) + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 64) + ) + ) + (get_local $7) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $10) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $8 + (i32.load + (get_local $8) + ) + ) + (set_local $10 + (i32.load + (get_local $11) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 304) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (get_local $1) + (tee_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $11) + (get_local $5) + (get_local $8) + (get_local $10) + (get_local $2) + (get_local $3) + ) + ) + ) + (if + (get_local $0) + (call $_free + (get_local $0) + ) + ) + (call $_free + (get_local $9) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEce (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 f64) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 176) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.store + (tee_local $8 + (tee_local $0 + (get_local $6) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (set_local $11 + (call $__ZNSt3__214__num_put_base14__format_floatEPcPKcj + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 14191) + (i32.load offset=4 + (get_local $2) + ) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 72) + ) + ) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 138) + ) + ) + ) + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $7 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $5 + (if i32 + (i32.gt_s + (get_local $7) + (i32.const 29) + ) + (block i32 + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $0 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (if i32 + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + (get_local $9) + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + ) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $0 + (get_local $7) + ) + (i32.load + (get_local $10) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $12 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $0) + ) + ) + (get_local $2) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (get_local $5) + (get_local $8) + ) + (block i32 + (set_local $5 + (get_local $8) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $7) + ) + (if i32 + (tee_local $8 + (call $_malloc + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $8) + (block i32 + (set_local $5 + (i32.load + (get_local $10) + ) + ) + (set_local $8 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 60) + ) + ) + (tee_local $10 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE23__widen_and_group_floatEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $5) + (get_local $12) + (get_local $11) + (get_local $0) + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 68) + ) + ) + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 64) + ) + ) + (get_local $7) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $10) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $11) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 76) + ) + ) + (i32.load + (get_local $7) + ) + ) + (set_local $0 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $10) + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (call $_free + (get_local $8) + ) + (call $_free + (get_local $9) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcd (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 f64) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 176) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.store + (tee_local $8 + (tee_local $0 + (get_local $6) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (set_local $11 + (call $__ZNSt3__214__num_put_base14__format_floatEPcPKcj + (i32.add + (get_local $0) + (i32.const 1) + ) + (i32.const 23209) + (i32.load offset=4 + (get_local $2) + ) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 72) + ) + ) + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 138) + ) + ) + ) + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $7 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $8) + (i32.const 30) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $5 + (if i32 + (i32.gt_s + (get_local $7) + (i32.const 29) + ) + (block i32 + (set_local $7 + (call $__ZNSt3__26__clocEv) + ) + (set_local $0 + (if i32 + (get_local $11) + (block i32 + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $2) + ) + ) + (f64.store offset=8 + (get_local $5) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (f64.store + (get_local $9) + (get_local $4) + ) + (call $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz + (get_local $10) + (get_local $7) + (get_local $0) + (get_local $9) + ) + ) + ) + ) + (if i32 + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + (get_local $9) + (tee_local $9 + (i32.load + (get_local $10) + ) + ) + ) + ) + (block i32 + (set_local $9 + (i32.const 0) + ) + (set_local $0 + (get_local $7) + ) + (i32.load + (get_local $10) + ) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $12 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $5) + (tee_local $11 + (i32.add + (get_local $5) + (get_local $0) + ) + ) + (get_local $2) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (get_local $5) + (get_local $8) + ) + (block i32 + (set_local $5 + (get_local $8) + ) + (set_local $8 + (i32.const 0) + ) + (get_local $7) + ) + (if i32 + (tee_local $8 + (call $_malloc + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $8) + (block i32 + (set_local $5 + (i32.load + (get_local $10) + ) + ) + (set_local $8 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 60) + ) + ) + (tee_local $10 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE23__widen_and_group_floatEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $5) + (get_local $12) + (get_local $11) + (get_local $0) + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 68) + ) + ) + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 64) + ) + ) + (get_local $7) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $10) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $11) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 76) + ) + ) + (i32.load + (get_local $7) + ) + ) + (set_local $0 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $10) + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (call $_free + (get_local $8) + ) + (call $_free + (get_local $9) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNSt3__29__num_getIwE19__stage2_float_loopEwRbRcPcRS4_wwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSE_RjPw (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (param $10 i32) (param $11 i32) (result i32) + (tee_local $0 + (block $label$break$L1 i32 + (if i32 + (i32.eq + (get_local $0) + (get_local $5) + ) + (if i32 + (i32.load8_s + (get_local $1) + ) + (block i32 + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 46) + ) + (if i32 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (if i32 + (i32.lt_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + (block i32 + (set_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block i32 + (if + (i32.eq + (get_local $0) + (get_local $6) + ) + (if + (if i32 + (i32.lt_s + (tee_local $5 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (block + (drop + (br_if $label$break$L1 + (i32.const -1) + (i32.eqz + (i32.load8_s + (get_local $1) + ) + ) + ) + ) + (drop + (br_if $label$break$L1 + (i32.const 0) + (i32.ge_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $10) + (i32.const 0) + ) + (br $label$break$L1 + (i32.const 0) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $11) + (i32.const 128) + ) + ) + (set_local $5 + (get_local $11) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-out) + ) + ) + (if + (i32.ne + (i32.load + (get_local $5) + ) + (get_local $0) + ) + (block + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $6 + (i32.shr_s + (tee_local $5 + (i32.sub + (get_local $5) + (get_local $11) + ) + ) + (i32.const 2) + ) + ) + (if i32 + (i32.gt_s + (get_local $5) + (i32.const 124) + ) + (i32.const -1) + (block i32 + (set_local $0 + (i32.load8_s + (i32.add + (get_local $6) + (i32.const 13937) + ) + ) + ) + (block $switch + (block $switch-default + (block $switch-case1 + (block $switch-case + (br_table $switch-case1 $switch-case1 $switch-case $switch-case $switch-default + (i32.sub + (get_local $6) + (i32.const 22) + ) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (get_local $3) + ) + (drop + (br_if $label$break$L1 + (i32.const -1) + (i32.ne + (i32.and + (i32.load8_u + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 95) + ) + (i32.and + (i32.load8_u + (get_local $2) + ) + (i32.const 127) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (br $label$break$L1 + (i32.const 0) + ) + ) + (i32.store8 + (get_local $2) + (i32.const 80) + ) + (br $switch) + ) + (if + (i32.eq + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 95) + ) + ) + (i32.load8_s + (get_local $2) + ) + ) + (block + (i32.store8 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 128) + ) + ) + (if + (i32.load8_s + (get_local $1) + ) + (block + (i32.store8 + (get_local $1) + (i32.const 0) + ) + (if + (if i32 + (i32.lt_s + (tee_local $1 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (i32.lt_s + (i32.sub + (tee_local $1 + (i32.load + (get_local $9) + ) + ) + (get_local $8) + ) + (i32.const 160) + ) + (block + (set_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (if i32 + (i32.gt_s + (get_local $5) + (i32.const 84) + ) + (i32.const 0) + (block i32 + (i32.store + (get_local $10) + (i32.add + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNKSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjRNS_12basic_stringIcS3_NS_9allocatorIcEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 144) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (tee_local $13 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (get_local $9) + (i32.const 4) + ) + ) + (i32.const 107) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (tee_local $15 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $4) + ) + ) + ) + (set_local $8 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $11) + (i32.const 19208) + ) + ) + (i32.store8 + (tee_local $12 + (i32.add + (get_local $7) + (i32.const 28) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $0 + (get_local $7) + ) + (tee_local $10 + (i32.load + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (i32.store + (tee_local $16 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (call $__ZNSt3__29money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE8__do_getERS4_S4_bRKNS_6localeEjRjRbRKNS_5ctypeIcEERNS_10unique_ptrIcPFvPvEEERPcSM_ + (get_local $1) + (get_local $16) + (get_local $3) + (get_local $11) + (get_local $4) + (get_local $5) + (get_local $12) + (get_local $8) + (get_local $9) + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (i32.add + (get_local $13) + (i32.const 100) + ) + ) + (block + (if + (i32.lt_s + (i32.load8_s + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 11) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store8 + (i32.load + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + ) + (block + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $3) + (i32.const 0) + ) + ) + ) + (if + (i32.load8_s + (get_local $12) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $6) + (call_indirect $FUNCSIG$iii + (get_local $8) + (i32.const 45) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $8) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + ) + (set_local $3 + (call_indirect $FUNCSIG$iii + (get_local $8) + (i32.const 48) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $8) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (set_local $8 + (i32.add + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (set_local $0 + (i32.load + (get_local $9) + ) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $0) + (get_local $8) + ) + (if + (i32.eq + (i32.load8_u + (get_local $0) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_ + (get_local $6) + (get_local $0) + (get_local $4) + ) + ) + ) + ) + (set_local $3 + (get_local $10) + ) + (if + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (get_local $10) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $3) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $10) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjto$1) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.or + (i32.load + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $15) + ) + ) + (set_local $0 + (i32.load + (get_local $9) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (if + (get_local $0) + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load + (get_local $14) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $1) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $0 + (if i32 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 1) + ) + ) + (block $label$break$L22 + (block $__rjti$4 + (block $__rjti$3 + (if + (tee_local $5 + (i32.load + (get_local $2) + ) + ) + (if + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $5) + ) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (if + (get_local $0) + (br $__rjti$4) + (br $__rjti$3) + ) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $__rjti$4) + ) + ) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 6) + ) + ) + (br $label$break$L22) + ) + (if + (i32.ne + (i32.and + (call_indirect $FUNCSIG$iiii + (get_local $4) + (tee_local $0 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $4) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 255) + ) + (i32.const 37) + ) + (block + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 4) + ) + ) + (br $label$break$L22) + ) + ) + (block $do-once3 + (block $__rjti$0 + (if + (i32.eq + (tee_local $6 + (i32.load + (tee_local $4 + (i32.add + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br_if $__rjti$0 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (set_local $0 + (i32.const 1) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $__rjti$0) + ) + ) + (br $do-once3) + ) + (set_local $0 + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $5) + ) + ) + (if + (i32.eq + (tee_local $1 + (if i32 + (i32.eq + (tee_local $1 + (i32.load offset=12 + (get_local $5) + ) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $1) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $label$break$L22 + (get_local $0) + ) + ) + (br $__rjto$1) + ) + (br_if $label$break$L22 + (i32.eqz + (get_local $0) + ) + ) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNSt3__210__stdinbufIcE9__getcharEb (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $8 + (get_local $6) + ) + (if + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + ) + (block + (set_local $0 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (if + (get_local $1) + (block + (i32.store + (get_local $8) + (i32.const -1) + ) + (i32.store8 + (get_local $2) + (i32.const 0) + ) + ) + ) + ) + (block + (if + (i32.le_s + (tee_local $2 + (i32.load offset=44 + (get_local $0) + ) + ) + (i32.const 1) + ) + (set_local $2 + (i32.const 1) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (set_local $3 + (i32.const 0) + ) + (block $__rjto$3 + (block $__rjti$3 + (loop $while-in + (br_if $__rjti$3 + (i32.ge_s + (get_local $3) + (get_local $2) + ) + ) + (if + (i32.eq + (tee_local $10 + (call $_getc + (i32.load + (get_local $9) + ) + ) + ) + (i32.const -1) + ) + (set_local $0 + (i32.const -1) + ) + (block + (i32.store8 + (i32.add + (get_local $4) + (get_local $3) + ) + (get_local $10) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br $__rjto$3) + ) + (block $label$break$L21 + (block $__rjti$2 + (if + (i32.load8_s offset=53 + (get_local $0) + ) + (block + (i32.store8 + (get_local $5) + (i32.load8_s + (get_local $4) + ) + ) + (br $__rjti$2) + ) + (block + (set_local $3 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $14 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L11 + (block $label$break$L11 + (set_local $15 + (i32.load + (tee_local $7 + (tee_local $11 + (i32.load + (get_local $3) + ) + ) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (block $switch + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-case0 $switch-case $switch-default + (i32.sub + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $12 + (i32.load + (get_local $10) + ) + ) + (get_local $11) + (get_local $4) + (tee_local $11 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (get_local $13) + (get_local $5) + (get_local $14) + (get_local $8) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + (i32.const 1) + ) + ) + ) + (br $__rjti$0) + ) + (br $__rjti$1) + ) + (br $switch) + ) + (br $label$break$L11) + ) + (i32.store + (tee_local $12 + (i32.load + (get_local $3) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $12) + (get_local $7) + ) + (br_if $__rjti$1 + (i32.eq + (get_local $2) + (i32.const 8) + ) + ) + (br_if $__rjti$1 + (i32.eq + (tee_local $7 + (call $_getc + (i32.load + (get_local $9) + ) + ) + ) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $11) + (get_local $7) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $label$continue$L11) + ) + ) + (br $__rjto$1) + ) + (i32.store8 + (get_local $5) + (i32.load8_s + (get_local $4) + ) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const -1) + ) + (br $label$break$L21) + ) + (br $__rjti$2) + ) + ) + (br $label$break$L21) + ) + (if + (get_local $1) + (i32.store offset=48 + (get_local $0) + (i32.and + (tee_local $0 + (i32.load8_s + (get_local $5) + ) + ) + (i32.const 255) + ) + ) + (block + (loop $while-in4 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (br_if $while-in4 + (i32.ne + (call $_ungetc + (i32.load8_u + (i32.add + (get_local $4) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (i32.load + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + (set_local $0 + (i32.const -1) + ) + (br $label$break$L21) + ) + ) + ) + (set_local $0 + (i32.load8_u + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $_scanexp (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $4 + (block $switch i32 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $2 + (if i32 + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 100) + ) + ) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $4) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $2 + (i32.eq + (get_local $2) + (i32.const 45) + ) + ) + (br $switch + (if i32 + (i32.and + (i32.ne + (get_local $1) + (i32.const 0) + ) + (i32.gt_u + (i32.add + (tee_local $4 + (if i32 + (i32.lt_u + (tee_local $4 + (i32.load + (get_local $3) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $4) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + (i32.const 9) + ) + ) + (if i32 + (i32.load + (get_local $6) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (i32.const -1) + ) + ) + (set_local $1 + (get_local $4) + ) + (get_local $2) + ) + (block i32 + (set_local $1 + (get_local $4) + ) + (get_local $2) + ) + ) + (block i32 + (set_local $1 + (get_local $4) + ) + (get_local $2) + ) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $1) + (i32.const -48) + ) + (i32.const 9) + ) + (set_local $0 + (if i32 + (i32.load + (get_local $6) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (i32.const -1) + ) + ) + (set_local $1 + (i32.const -2147483648) + ) + (i32.const 0) + ) + (block i32 + (set_local $1 + (i32.const -2147483648) + ) + (i32.const 0) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (loop $while-in + (if + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $2) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + (i32.lt_s + (tee_local $5 + (i32.add + (i32.add + (get_local $1) + (i32.const -48) + ) + (i32.mul + (get_local $5) + (i32.const 10) + ) + ) + ) + (i32.const 214748364) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (br $while-in) + ) + (set_local $1 + (get_local $5) + ) + ) + ) + (set_local $7 + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $2) + (i32.const -48) + ) + (i32.const 10) + ) + (block + (set_local $5 + (get_local $1) + ) + (set_local $1 + (get_local $7) + ) + (loop $while-in2 + (set_local $1 + (call $___muldi3 + (get_local $5) + (get_local $1) + (i32.const 10) + (i32.const 0) + ) + ) + (set_local $5 + (get_global $tempRet0) + ) + (set_local $5 + (call $_i64Add + (call $_i64Add + (get_local $2) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $2) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (i32.const -48) + (i32.const -1) + ) + (get_global $tempRet0) + (get_local $1) + (get_local $5) + ) + ) + (set_local $1 + (get_global $tempRet0) + ) + (br_if $while-in2 + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $2) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + (i32.or + (i32.lt_s + (get_local $1) + (i32.const 21474836) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 21474836) + ) + (i32.lt_u + (get_local $5) + (i32.const 2061584302) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $1) + ) + (set_local $1 + (get_local $7) + ) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $2) + (i32.const -48) + ) + (i32.const 10) + ) + (loop $do-in + (br_if $do-in + (i32.lt_u + (i32.add + (tee_local $2 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $2) + ) + ) + (call $___shgetc + (get_local $0) + ) + ) + ) + (i32.const -48) + ) + (i32.const 10) + ) + ) + ) + ) + (if + (i32.load + (get_local $6) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (set_local $0 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $5) + (get_local $1) + ) + ) + (if + (tee_local $4 + (i32.ne + (get_local $4) + (i32.const 0) + ) + ) + (set_local $1 + (get_global $tempRet0) + ) + ) + (if + (i32.eqz + (get_local $4) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + ) + (set_global $tempRet0 + (get_local $1) + ) + (get_local $0) + ) + (func $__ZNSt3__210__stdinbufIwE9__getcharEb (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $8 + (get_local $6) + ) + (if + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + ) + (block + (set_local $0 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (if + (get_local $1) + (block + (i32.store + (get_local $8) + (i32.const -1) + ) + (i32.store8 + (get_local $2) + (i32.const 0) + ) + ) + ) + ) + (block + (if + (i32.le_s + (tee_local $2 + (i32.load offset=44 + (get_local $0) + ) + ) + (i32.const 1) + ) + (set_local $2 + (i32.const 1) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (set_local $3 + (i32.const 0) + ) + (block $__rjto$3 + (block $__rjti$3 + (loop $while-in + (br_if $__rjti$3 + (i32.ge_s + (get_local $3) + (get_local $2) + ) + ) + (if + (i32.eq + (tee_local $10 + (call $_getc + (i32.load + (get_local $9) + ) + ) + ) + (i32.const -1) + ) + (set_local $0 + (i32.const -1) + ) + (block + (i32.store8 + (i32.add + (get_local $4) + (get_local $3) + ) + (get_local $10) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br $__rjto$3) + ) + (block $label$break$L21 + (block $__rjti$2 + (if + (i32.load8_s offset=53 + (get_local $0) + ) + (block + (i32.store + (get_local $5) + (i32.load8_s + (get_local $4) + ) + ) + (br $__rjti$2) + ) + (block + (set_local $3 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $14 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L11 + (block $label$break$L11 + (set_local $15 + (i32.load + (tee_local $7 + (tee_local $11 + (i32.load + (get_local $3) + ) + ) + ) + ) + ) + (set_local $7 + (i32.load offset=4 + (get_local $7) + ) + ) + (block $switch + (block $switch-default + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case1 $switch-case0 $switch-case $switch-default + (i32.sub + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $12 + (i32.load + (get_local $10) + ) + ) + (get_local $11) + (get_local $4) + (tee_local $11 + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (get_local $13) + (get_local $5) + (get_local $14) + (get_local $8) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + (i32.const 1) + ) + ) + ) + (br $__rjti$0) + ) + (br $__rjti$1) + ) + (br $switch) + ) + (br $label$break$L11) + ) + (i32.store + (tee_local $12 + (i32.load + (get_local $3) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $12) + (get_local $7) + ) + (br_if $__rjti$1 + (i32.eq + (get_local $2) + (i32.const 8) + ) + ) + (br_if $__rjti$1 + (i32.eq + (tee_local $7 + (call $_getc + (i32.load + (get_local $9) + ) + ) + ) + (i32.const -1) + ) + ) + (i32.store8 + (get_local $11) + (get_local $7) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $label$continue$L11) + ) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.load8_s + (get_local $4) + ) + ) + (br $__rjto$1) + ) + (set_local $0 + (i32.const -1) + ) + (br $label$break$L21) + ) + (br $__rjti$2) + ) + ) + (br $label$break$L21) + ) + (if + (get_local $1) + (block + (i32.store offset=48 + (get_local $0) + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (br $label$break$L21) + ) + ) + (loop $while-in4 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (br_if $while-in4 + (i32.ne + (call $_ungetc + (i32.load8_s + (i32.add + (get_local $4) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (i32.load + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + (set_local $0 + (i32.const -1) + ) + (br $label$break$L21) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $5) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $5 + (if i32 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $6 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L1 + (i32.eqz + (get_local $5) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $5) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (br_if $label$break$L1 + (i32.eqz + (call_indirect $FUNCSIG$iiii + (get_local $4) + (i32.const 8192) + (tee_local $5 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (tee_local $5 + (i32.load + (get_local $1) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $6) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $4) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L1) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $label$continue$L1) + ) + ) + ) + ) + (set_local $1 + (if i32 + (tee_local $4 + (i32.load + (get_local $1) + ) + ) + (if i32 + (i32.eq + (tee_local $4 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (get_local $4) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $5) + ) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 1) + ) + (i32.eqz + (i32.load + (get_local $1) + ) + ) + ) + (i32.const 1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + (if + (i32.eq + (tee_local $0 + (if i32 + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $1) + ) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $1) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $_wcsrtombs (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (get_local $6) + ) + (block $label$break$L1 + (if + (get_local $0) + (block + (block $label$break$L9 + (if + (i32.gt_u + (get_local $2) + (i32.const 3) + ) + (block + (set_local $3 + (get_local $2) + ) + (set_local $5 + (i32.load + (get_local $1) + ) + ) + (loop $while-in2 + (block $while-out1 + (set_local $4 + (if i32 + (i32.gt_u + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const -1) + ) + (i32.const 126) + ) + (block i32 + (br_if $while-out1 + (i32.eqz + (get_local $4) + ) + ) + (if + (i32.eq + (tee_local $4 + (call $_wcrtomb + (get_local $0) + (get_local $4) + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $2 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $4) + ) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (block i32 + (i32.store8 + (get_local $0) + (get_local $4) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $5 + (i32.load + (get_local $1) + ) + ) + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (if + (i32.le_u + (get_local $4) + (i32.const 3) + ) + (block + (set_local $3 + (get_local $0) + ) + (set_local $0 + (get_local $4) + ) + (br $label$break$L9) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $while-in2) + ) + ) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (br $label$break$L1) + ) + (block + (set_local $3 + (get_local $0) + ) + (set_local $0 + (get_local $2) + ) + ) + ) + ) + (if + (get_local $0) + (block + (set_local $4 + (i32.load + (get_local $1) + ) + ) + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in4 + (set_local $0 + (if i32 + (i32.gt_u + (i32.add + (tee_local $5 + (i32.load + (get_local $4) + ) + ) + (i32.const -1) + ) + (i32.const 126) + ) + (block i32 + (br_if $__rjti$0 + (i32.eqz + (get_local $5) + ) + ) + (if + (i32.eq + (tee_local $5 + (call $_wcrtomb + (get_local $7) + (get_local $5) + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $2 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (br_if $__rjti$1 + (i32.lt_u + (get_local $0) + (get_local $5) + ) + ) + (drop + (call $_wcrtomb + (get_local $3) + (i32.load + (get_local $4) + ) + (i32.const 0) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $5) + ) + ) + (i32.sub + (get_local $0) + (get_local $5) + ) + ) + (block i32 + (i32.store8 + (get_local $3) + (get_local $5) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $4 + (i32.load + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + (br_if $while-in4 + (get_local $0) + ) + (br $label$break$L1) + ) + ) + (i32.store8 + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (set_local $2 + (i32.sub + (get_local $2) + (get_local $0) + ) + ) + (br $label$break$L1) + ) + (set_local $2 + (i32.sub + (get_local $2) + (get_local $0) + ) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (tee_local $1 + (i32.load + (get_local $1) + ) + ) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (loop $while-in + (if + (i32.gt_u + (get_local $0) + (i32.const 127) + ) + (if + (i32.eq + (tee_local $0 + (call $_wcrtomb + (get_local $7) + (get_local $0) + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $2 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $0 + (i32.const 1) + ) + ) + (set_local $2 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (br_if $while-in + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $2) + ) + (func $__ZNKSt3__28messagesIwE6do_getEiiiRKNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 176) + ) + ) + (set_local $15 + (i32.add + (get_local $7) + (i32.const 168) + ) + ) + (set_local $1 + (i32.add + (get_local $7) + (i32.const 40) + ) + ) + (set_local $10 + (i32.add + (get_local $7) + (i32.const 36) + ) + ) + (set_local $9 + (i32.add + (get_local $7) + (i32.const 32) + ) + ) + (set_local $11 + (i32.add + (get_local $7) + (i32.const 24) + ) + ) + (set_local $12 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.store + (tee_local $8 + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $8) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $8) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $6) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $8) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 9040) + ) + (set_local $13 + (i32.add + (tee_local $6 + (if i32 + (tee_local $14 + (i32.lt_s + (tee_local $13 + (i32.load8_s offset=11 + (get_local $5) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + ) + (i32.shl + (if i32 + (get_local $14) + (i32.load offset=4 + (get_local $5) + ) + (i32.and + (get_local $13) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (set_local $14 + (i32.add + (get_local $1) + (i32.const 32) + ) + ) + (set_local $5 + (i32.const 0) + ) + (loop $while-in1 + (if + (i32.and + (i32.ne + (get_local $5) + (i32.const 2) + ) + (i32.lt_u + (get_local $6) + (get_local $13) + ) + ) + (block + (i32.store + (get_local $9) + (get_local $6) + ) + (set_local $5 + (call_indirect $FUNCSIG$iiiiiiiii + (get_local $11) + (get_local $15) + (get_local $6) + (get_local $13) + (get_local $9) + (get_local $1) + (get_local $14) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $11) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (set_local $6 + (get_local $1) + ) + (loop $while-in3 + (if + (i32.lt_u + (get_local $6) + (i32.load + (get_local $10) + ) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $8) + (i32.load8_s + (get_local $6) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (set_local $6 + (i32.load + (get_local $9) + ) + ) + (br $while-in1) + ) + ) + ) + (set_local $3 + (call $_catgets + (if i32 + (i32.eq + (get_local $2) + (i32.const -1) + ) + (i32.const -1) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (get_local $3) + (get_local $4) + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $8) + ) + (i32.const 0) + ) + (i32.load + (get_local $8) + ) + (get_local $8) + ) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in5 + (if + (i32.ne + (get_local $2) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.const 0) + ) + (i32.store + (get_local $12) + (i32.const 9088) + ) + (set_local $5 + (tee_local $4 + (i32.add + (get_local $3) + (call $_strlen + (get_local $3) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const 128) + ) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in7 + (if + (i32.and + (i32.ne + (get_local $2) + (i32.const 2) + ) + (i32.lt_u + (get_local $3) + (get_local $4) + ) + ) + (block + (i32.store + (get_local $9) + (get_local $3) + ) + (set_local $2 + (call_indirect $FUNCSIG$iiiiiiiii + (get_local $12) + (get_local $15) + (get_local $3) + (if i32 + (i32.gt_s + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.const 32) + ) + (i32.add + (get_local $3) + (i32.const 32) + ) + (get_local $4) + ) + (get_local $9) + (get_local $1) + (get_local $6) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $12) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $while-in9 + (if + (i32.lt_u + (get_local $3) + (i32.load + (get_local $10) + ) + ) + (block + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw + (get_local $0) + (i32.load + (get_local $3) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (br $while-in9) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $9) + ) + ) + (br $while-in7) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $8) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_mbsnrtowcs (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 1040) + ) + ) + (set_local $11 + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + (i32.store + (tee_local $8 + (get_local $9) + ) + (tee_local $6 + (i32.load + (get_local $1) + ) + ) + ) + (set_local $5 + (if i32 + (tee_local $12 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (get_local $3) + (i32.const 256) + ) + ) + (if + (i32.eqz + (get_local $12) + ) + (set_local $0 + (get_local $11) + ) + ) + (set_local $7 + (get_local $6) + ) + (set_local $2 + (block $label$break$L1 i32 + (if i32 + (i32.and + (i32.ne + (get_local $5) + (i32.const 0) + ) + (i32.ne + (get_local $6) + (i32.const 0) + ) + ) + (block i32 + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $5) + ) + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.or + (i32.gt_u + (get_local $3) + (i32.const 131) + ) + (tee_local $10 + (i32.ge_u + (tee_local $5 + (i32.shr_u + (get_local $3) + (i32.const 2) + ) + ) + (get_local $2) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $label$break$L1 + (get_local $6) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (if i32 + (get_local $10) + (tee_local $5 + (get_local $2) + ) + (get_local $5) + ) + ) + ) + (br_if $while-out + (i32.eq + (tee_local $7 + (call $_mbsrtowcs + (get_local $0) + (get_local $8) + (get_local $5) + (get_local $4) + ) + ) + (i32.const -1) + ) + ) + (set_local $5 + (i32.sub + (get_local $2) + (tee_local $10 + (if i32 + (tee_local $13 + (i32.eq + (get_local $0) + (get_local $11) + ) + ) + (i32.const 0) + (get_local $7) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $13) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $7) + (get_local $6) + ) + ) + (drop + (br_if $label$break$L1 + (get_local $6) + (i32.eqz + (i32.and + (i32.ne + (get_local $2) + (get_local $10) + ) + (i32.ne + (tee_local $7 + (i32.load + (get_local $8) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $5) + ) + (br $while-in) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (i32.load + (get_local $8) + ) + ) + (i32.const -1) + ) + (block i32 + (set_local $3 + (get_local $2) + ) + (i32.const 0) + ) + ) + ) + ) + (block $label$break$L8 + (if + (get_local $7) + (if + (i32.and + (i32.ne + (get_local $5) + (i32.const 0) + ) + (i32.ne + (get_local $3) + (i32.const 0) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $0) + ) + (loop $while-in2 + (if + (i32.ge_u + (i32.add + (tee_local $0 + (call $_mbrtowc + (get_local $5) + (get_local $7) + (get_local $3) + (get_local $4) + ) + ) + (i32.const 2) + ) + (i32.const 3) + ) + (block + (i32.store + (get_local $8) + (tee_local $7 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $0) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br_if $label$break$L8 + (i32.eqz + (i32.and + (i32.ne + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.const 0) + ) + (i32.ne + (get_local $3) + (get_local $0) + ) + ) + ) + ) + (set_local $3 + (i32.sub + (get_local $3) + (get_local $0) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (br $while-in2) + ) + ) + ) + (block $switch-default + (block $switch-case3 + (block $switch-case + (br_table $switch-case $switch-case3 $switch-default + (i32.sub + (get_local $0) + (i32.const -1) + ) + ) + ) + (set_local $2 + (i32.const -1) + ) + (br $label$break$L8) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (br $label$break$L8) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $12) + (i32.store + (get_local $1) + (i32.load + (get_local $8) + ) + ) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $2) + ) + (func $_main (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 f64) + (local $10 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $3) + (tee_local $1 + (tee_local $0 + (call $__Znwj + (i32.const 1600000000) + ) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (i32.add + (get_local $0) + (i32.const 1600000000) + ) + ) + (set_local $10 + (i32.add + (tee_local $1 + (get_local $7) + ) + (i32.const 8) + ) + ) + (set_local $2 + (i32.const 0) + ) + (loop $do-in + (set_local $4 + (f64.add + (f64.div + (f64.mul + (f64.convert_s/i32 + (get_local $2) + ) + (f64.const 2) + ) + (f64.const 9999) + ) + (f64.const -1) + ) + ) + (set_local $6 + (i32.const 0) + ) + (loop $do-in1 + (f64.store + (get_local $1) + (get_local $4) + ) + (f64.store + (get_local $10) + (f64.add + (f64.div + (f64.mul + (f64.convert_s/i32 + (get_local $6) + ) + (f64.const 2) + ) + (f64.const 9999) + ) + (f64.const -1) + ) + ) + (if + (i32.eq + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.load + (get_local $8) + ) + ) + (call $__ZNSt3__26vectorI5pointNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ + (get_local $3) + (get_local $1) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (i32.store offset=12 + (get_local $0) + (i32.load offset=12 + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (br_if $do-in1 + (i32.lt_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 10000) + ) + ) + ) + (br_if $do-in + (i32.lt_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 10000) + ) + ) + ) + (set_local $4 + (if f64 + (i32.eq + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (tee_local $6 + (i32.load + (get_local $5) + ) + ) + ) + (block f64 + (set_local $9 + (f64.const 0) + ) + (f64.const 0) + ) + (block f64 + (set_local $8 + (i32.shr_u + (i32.sub + (i32.add + (get_local $6) + (i32.const -16) + ) + (get_local $2) + ) + (i32.const 4) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (set_local $0 + (i32.add + (f64.lt + (f64.add + (f64.mul + (tee_local $4 + (f64.load + (get_local $2) + ) + ) + (get_local $4) + ) + (f64.mul + (tee_local $4 + (f64.load offset=8 + (get_local $2) + ) + ) + (get_local $4) + ) + ) + (f64.const 1) + ) + (get_local $0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $9 + (f64.mul + (f64.convert_s/i32 + (get_local $0) + ) + (f64.const 4) + ) + ) + (f64.convert_s/i32 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store + (get_local $1) + (call $__ZNKSt3__28ios_base6getlocEv + (i32.add + (tee_local $0 + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEElsEd + (call $__ZNSt3__224__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j + (i32.const 18336) + (i32.const 10520) + (i32.const 8) + ) + (f64.div + (get_local $9) + (get_local $4) + ) + ) + ) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (set_local $2 + (call_indirect $FUNCSIG$iii + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 19208) + ) + ) + (i32.const 10) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $1) + ) + (drop + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE3putEc + (get_local $0) + (get_local $2) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE5flushEv + (get_local $0) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + ) + (block + (set_global $STACKTOP + (get_local $7) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load + (get_local $5) + ) + ) + (get_local $0) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $1) + (i32.shl + (i32.xor + (i32.shr_u + (i32.sub + (i32.add + (get_local $1) + (i32.const -16) + ) + (get_local $0) + ) + (i32.const 4) + ) + (i32.const -1) + ) + (i32.const 4) + ) + ) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + (set_global $STACKTOP + (get_local $7) + ) + (i32.const 0) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE8__monthsEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 16968) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16968) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 16976) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16976) + ) + (block + (set_local $0 + (i32.const 19452) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 19740) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 100) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19452) + (i32.const 14544) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19464) + (i32.const 14552) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19476) + (i32.const 14561) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19488) + (i32.const 14567) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19500) + (i32.const 14573) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19512) + (i32.const 14577) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19524) + (i32.const 14582) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19536) + (i32.const 14587) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19548) + (i32.const 14594) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19560) + (i32.const 14604) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19572) + (i32.const 14612) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19584) + (i32.const 14621) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19596) + (i32.const 14630) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19608) + (i32.const 14634) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19620) + (i32.const 14638) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19632) + (i32.const 14642) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19644) + (i32.const 14573) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19656) + (i32.const 14646) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19668) + (i32.const 14650) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19680) + (i32.const 14654) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19692) + (i32.const 14658) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19704) + (i32.const 14662) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19716) + (i32.const 14666) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19728) + (i32.const 14670) + ) + ) + (i32.store + (i32.const 19740) + (i32.const 19452) + ) + ) + ) + ) + (i32.load + (i32.const 19740) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE8__monthsEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17048) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17048) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 17056) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17056) + ) + (block + (set_local $0 + (i32.const 20264) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 20552) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 104) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20264) + (i32.const 7836) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20276) + (i32.const 7868) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20288) + (i32.const 7904) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20300) + (i32.const 7928) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20312) + (i32.const 7952) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20324) + (i32.const 7968) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20336) + (i32.const 7988) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20348) + (i32.const 8008) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20360) + (i32.const 8036) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20372) + (i32.const 8076) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20384) + (i32.const 8108) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20396) + (i32.const 8144) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20408) + (i32.const 8180) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20420) + (i32.const 8196) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20432) + (i32.const 8212) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20444) + (i32.const 8228) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20456) + (i32.const 7952) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20468) + (i32.const 8244) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20480) + (i32.const 8260) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20492) + (i32.const 8276) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20504) + (i32.const 8292) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20516) + (i32.const 8308) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20528) + (i32.const 8324) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20540) + (i32.const 8340) + ) + ) + (i32.store + (i32.const 20552) + (i32.const 20264) + ) + ) + ) + ) + (i32.load + (i32.const 20552) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_white_spaceERS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (if + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $4 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + ) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (get_local $4) + (br $__rjto$0) + (br $label$break$L1) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$0) + ) + (br_if $label$break$L1 + (i32.eqz + (get_local $4) + ) + ) + ) + (br $__rjto$0) + ) + (if + (get_local $4) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (br_if $label$break$L1 + (i32.le_s + (i32.shr_s + (i32.shl + (i32.and + (tee_local $4 + (if i32 + (i32.eq + (tee_local $5 + (i32.load offset=12 + (tee_local $4 + (i32.load + (get_local $1) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_s + (get_local $5) + ) + ) + ) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + ) + (br_if $label$break$L1 + (i32.eqz + (i32.and + (i32.load16_s + (i32.add + (i32.load + (get_local $6) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 1) + ) + ) + ) + (i32.const 8192) + ) + ) + ) + (if + (i32.eq + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br $label$continue$L1) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br $label$continue$L1) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $4) + ) + (i32.load offset=16 + (get_local $4) + ) + ) + (set_local $4 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $4) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + (set_local $4 + (i32.const 0) + ) + ) + (set_local $1 + (i32.eqz + (get_local $4) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $0) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $1) + ) + ) + (br $__rjto$2) + ) + (br_if $__rjti$2 + (get_local $1) + ) + (br $__rjto$2) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_percentERS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (if + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $label$break$L16 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (if + (tee_local $5 + (i32.load + (get_local $2) + ) + ) + (block + (if + (i32.eq + (i32.load offset=12 + (get_local $5) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$2) + ) + ) + ) + (br_if $__rjti$3 + (i32.eqz + (get_local $0) + ) + ) + (br $__rjti$4) + ) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $__rjti$4) + ) + ) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 6) + ) + ) + (br $label$break$L16) + ) + (if + (i32.ne + (i32.and + (call_indirect $FUNCSIG$iiii + (get_local $4) + (i32.and + (tee_local $0 + (if i32 + (i32.eq + (tee_local $6 + (i32.load offset=12 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.load8_u + (get_local $6) + ) + ) + ) + (i32.const 255) + ) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $4) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 255) + ) + (i32.const 37) + ) + (block + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 4) + ) + ) + (br $label$break$L16) + ) + ) + (block $do-once3 + (block $__rjti$0 + (if + (i32.eq + (tee_local $6 + (i32.load + (tee_local $4 + (i32.add + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (block + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (br_if $__rjti$0 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $4) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $__rjti$0) + ) + ) + (br $do-once3) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $0) + ) + (i32.load offset=16 + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.eqz + (get_local $0) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (br_if $__rjti$1 + (i32.eqz + (get_local $5) + ) + ) + (if + (i32.eq + (i32.load offset=12 + (get_local $5) + ) + (i32.load offset=16 + (get_local $5) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $5) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $5) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $2) + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + (br_if $label$break$L16 + (get_local $0) + ) + (br $__rjto$1) + ) + (br_if $label$break$L16 + (i32.eqz + (get_local $0) + ) + ) + ) + (i32.store + (get_local $3) + (i32.or + (i32.load + (get_local $3) + ) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNSt3__2L12ucs4_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (block $label$break$L4 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (i32.and + (get_local $7) + (i32.const 2) + ) + ) + ) + (if + (i32.lt_s + (i32.sub + (get_local $4) + (get_local $3) + ) + (i32.const 3) + ) + (set_local $0 + (i32.const 1) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.const -17) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const -69) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const -65) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L4) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $while-in + (if + (i32.ge_u + (get_local $0) + (get_local $1) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L4) + ) + ) + (if + (i32.or + (i32.gt_u + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $6) + ) + (i32.eq + (i32.and + (get_local $0) + (i32.const -2048) + ) + (i32.const 55296) + ) + ) + (block + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 128) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 1) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $0) + (i32.const 2048) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $4) + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 2) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.shr_u + (get_local $0) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once) + ) + ) + (set_local $7 + (i32.sub + (get_local $4) + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.const 65536) + ) + (block + (if + (i32.lt_s + (get_local $7) + (i32.const 3) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.shr_u + (get_local $0) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 128) + ) + ) + ) + (block + (if + (i32.lt_s + (get_local $7) + (i32.const 4) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $label$break$L4) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.shr_u + (get_local $0) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (i32.or + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 128) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $2) + (tee_local $0 + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + ) + (br $while-in) + ) + ) + (get_local $0) + ) + (func $_pop_arg (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 17600) + ) + (block + (call $_pthread_cleanup_push + (i32.const 94) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if i32 + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block i32 + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (if i32 + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + (get_local $3) + ) + (block i32 + (set_local $7 + (get_local $5) + ) + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_wcsnrtombs (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 272) + ) + ) + (set_local $10 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (i32.store + (tee_local $7 + (get_local $8) + ) + (tee_local $5 + (i32.load + (get_local $1) + ) + ) + ) + (if + (i32.eqz + (tee_local $11 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + ) + (set_local $3 + (i32.const 256) + ) + ) + (if + (i32.eqz + (get_local $11) + ) + (set_local $0 + (get_local $10) + ) + ) + (set_local $4 + (get_local $5) + ) + (set_local $3 + (block $label$break$L1 i32 + (if i32 + (i32.and + (i32.ne + (get_local $3) + (i32.const 0) + ) + (i32.ne + (get_local $5) + (i32.const 0) + ) + ) + (block i32 + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (i32.or + (tee_local $5 + (i32.ge_u + (get_local $2) + (get_local $3) + ) + ) + (i32.gt_u + (get_local $2) + (i32.const 32) + ) + ) + ) + (block + (set_local $5 + (get_local $3) + ) + (br $label$break$L1 + (get_local $6) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (tee_local $4 + (if i32 + (get_local $5) + (get_local $3) + (get_local $2) + ) + ) + ) + ) + (br_if $while-out + (i32.eq + (tee_local $9 + (call $_wcsrtombs + (get_local $0) + (get_local $7) + (get_local $4) + (i32.const 0) + ) + ) + (i32.const -1) + ) + ) + (set_local $5 + (i32.sub + (get_local $3) + (tee_local $4 + (if i32 + (tee_local $12 + (i32.eq + (get_local $0) + (get_local $10) + ) + ) + (i32.const 0) + (get_local $9) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $12) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $9) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (get_local $6) + ) + ) + (drop + (br_if $label$break$L1 + (get_local $6) + (i32.eqz + (i32.and + (i32.ne + (get_local $3) + (get_local $4) + ) + (i32.ne + (tee_local $4 + (i32.load + (get_local $7) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $3 + (get_local $5) + ) + (br $while-in) + ) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $4 + (i32.load + (get_local $7) + ) + ) + (i32.const -1) + ) + (block i32 + (set_local $5 + (get_local $3) + ) + (i32.const 0) + ) + ) + ) + ) + (block $label$break$L8 + (if + (get_local $4) + (if + (i32.and + (i32.ne + (get_local $5) + (i32.const 0) + ) + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (block + (loop $while-in2 + (block $while-out1 + (if + (i32.lt_u + (i32.add + (tee_local $6 + (call $_wcrtomb + (get_local $0) + (i32.load + (get_local $4) + ) + (i32.const 0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + (block + (set_local $0 + (get_local $6) + ) + (br $while-out1) + ) + ) + (i32.store + (get_local $7) + (tee_local $4 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const 4) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br_if $label$break$L8 + (i32.eqz + (i32.and + (i32.ne + (get_local $5) + (get_local $6) + ) + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (set_local $5 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $6) + ) + ) + (br $while-in2) + ) + ) + (if + (get_local $0) + (set_local $3 + (i32.const -1) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (if + (get_local $11) + (i32.store + (get_local $1) + (i32.load + (get_local $7) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $3) + ) + (func $__ZNSt3__29__num_getIwE17__stage2_int_loopEwiPcRS2_RjwRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_Pw (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (result i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (tee_local $0 + (block $label$break$L6 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $12 + (i32.eq + (tee_local $10 + (i32.load + (get_local $3) + ) + ) + (get_local $2) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $11 + (i32.eq + (i32.load offset=96 + (get_local $9) + ) + (get_local $0) + ) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load offset=100 + (get_local $9) + ) + (get_local $0) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (if i32 + (get_local $11) + (i32.const 43) + (i32.const 45) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + (set_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (if + (if i32 + (i32.eq + (get_local $0) + (get_local $5) + ) + (if i32 + (i32.lt_s + (get_local $11) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + (i32.const 0) + ) + (block + (drop + (br_if $label$break$L6 + (i32.const 0) + (i32.ge_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $8) + ) + ) + (get_local $7) + ) + (i32.const 160) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $4) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (i32.const 104) + ) + ) + (set_local $5 + (get_local $9) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-out) + ) + ) + (if + (i32.ne + (i32.load + (get_local $5) + ) + (get_local $0) + ) + (block + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (set_local $0 + (i32.shr_s + (tee_local $5 + (i32.sub + (get_local $5) + (get_local $9) + ) + ) + (i32.const 2) + ) + ) + (if i32 + (i32.gt_s + (get_local $5) + (i32.const 92) + ) + (i32.const -1) + (block i32 + (block $switch-default + (block $switch-case2 + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case2 $switch-default + (i32.sub + (get_local $1) + (i32.const 8) + ) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ge_s + (get_local $0) + (get_local $1) + ) + ) + ) + (br $switch-default) + ) + (if + (i32.ge_s + (get_local $5) + (i32.const 88) + ) + (block + (drop + (br_if $label$break$L6 + (i32.const -1) + (get_local $12) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ge_s + (i32.sub + (get_local $10) + (get_local $2) + ) + (i32.const 3) + ) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ne + (i32.load8_s + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (i32.const 48) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (i32.load8_s + (i32.add + (get_local $0) + (i32.const 13937) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.load8_s + (i32.add + (get_local $0) + (i32.const 13937) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (func $__ZNSt3__29__num_getIcE17__stage2_int_loopEciPcRS2_RjcRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjRSD_S2_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (param $9 i32) (result i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (tee_local $0 + (block $label$break$L6 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (tee_local $12 + (i32.eq + (tee_local $10 + (i32.load + (get_local $3) + ) + ) + (get_local $2) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $11 + (i32.eq + (i32.load8_u offset=24 + (get_local $9) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_u offset=25 + (get_local $9) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (if i32 + (get_local $11) + (i32.const 43) + (i32.const 45) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + (set_local $11 + (i32.load8_s offset=11 + (get_local $6) + ) + ) + (if + (if i32 + (i32.eq + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (if i32 + (i32.lt_s + (get_local $11) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $11) + (i32.const 255) + ) + ) + (i32.const 0) + ) + (block + (drop + (br_if $label$break$L6 + (i32.const 0) + (i32.ge_s + (i32.sub + (tee_local $0 + (i32.load + (get_local $8) + ) + ) + (get_local $7) + ) + (i32.const 160) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $4) + ) + ) + (i32.store + (get_local $8) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $9) + (i32.const 26) + ) + ) + (set_local $5 + (get_local $9) + ) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $5) + (get_local $6) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $while-out) + ) + ) + (if + (i32.ne + (i32.load8_u + (get_local $5) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (block + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (if i32 + (i32.gt_s + (tee_local $0 + (i32.sub + (get_local $5) + (get_local $9) + ) + ) + (i32.const 23) + ) + (i32.const -1) + (block i32 + (block $switch-default + (block $switch-case2 + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case2 $switch-default + (i32.sub + (get_local $1) + (i32.const 8) + ) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ge_s + (get_local $0) + (get_local $1) + ) + ) + ) + (br $switch-default) + ) + (if + (i32.ge_s + (get_local $0) + (i32.const 22) + ) + (block + (drop + (br_if $label$break$L6 + (i32.const -1) + (get_local $12) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ge_s + (i32.sub + (get_local $10) + (get_local $2) + ) + (i32.const 3) + ) + ) + ) + (drop + (br_if $label$break$L6 + (i32.const -1) + (i32.ne + (i32.load8_s + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (i32.const 48) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (i32.load8_s + (i32.add + (get_local $0) + (i32.const 13937) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $0) + ) + (br $label$break$L6 + (i32.const 0) + ) + ) + ) + ) + (set_local $0 + (i32.load8_s + (i32.add + (get_local $0) + (i32.const 13937) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $10) + (get_local $0) + ) + (i32.store + (get_local $4) + (i32.add + (i32.load + (get_local $4) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (set_local $8 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $11 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + (set_local $12 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (if + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 1) + ) + (block + (i32.store + (get_local $9) + (tee_local $0 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $9) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (i32.store + (get_local $14) + (tee_local $0 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $3 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $14) + (i32.const 19248) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $7) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (call_indirect $FUNCSIG$vii + (i32.add + (get_local $7) + (i32.const 12) + ) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $10) + ) + ) + (i32.store8 + (get_local $5) + (i32.eq + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $1) + (get_local $8) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 24) + ) + (get_local $9) + (get_local $4) + (i32.const 1) + ) + (get_local $7) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + ) + (block + (i32.store + (get_local $11) + (i32.const -1) + ) + (set_local $10 + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (i32.store + (get_local $1) + (tee_local $0 + (call_indirect $FUNCSIG$iiiiiii + (get_local $0) + (get_local $7) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $11) + (i32.add + (i32.and + (get_local $10) + (i32.const 63) + ) + (i32.const 240) + ) + ) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-default + (i32.load + (get_local $11) + ) + ) + ) + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (br $switch) + ) + (i32.store8 + (get_local $5) + (i32.const 1) + ) + (br $switch) + ) + (i32.store8 + (get_local $5) + (i32.const 1) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (set_local $8 + (i32.add + (get_local $6) + (i32.const 48) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + (set_local $11 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + (set_local $12 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $14 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (set_local $10 + (get_local $6) + ) + (if + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const 1) + ) + (block + (i32.store + (get_local $9) + (tee_local $0 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $9) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (i32.store + (get_local $14) + (tee_local $0 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $3 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $14) + (i32.const 19220) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $7) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (call_indirect $FUNCSIG$vii + (i32.add + (get_local $7) + (i32.const 12) + ) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $10) + ) + ) + (i32.store8 + (get_local $5) + (i32.eq + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $1) + (get_local $8) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 24) + ) + (get_local $9) + (get_local $4) + (i32.const 1) + ) + (get_local $7) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + ) + (block + (i32.store + (get_local $11) + (i32.const -1) + ) + (set_local $10 + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $12) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $12) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $13) + ) + ) + (i32.store + (get_local $1) + (tee_local $0 + (call_indirect $FUNCSIG$iiiiiii + (get_local $0) + (get_local $7) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $11) + (i32.add + (i32.and + (get_local $10) + (i32.const 63) + ) + (i32.const 240) + ) + ) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-default + (i32.load + (get_local $11) + ) + ) + ) + (i32.store8 + (get_local $5) + (i32.const 0) + ) + (br $switch) + ) + (i32.store8 + (get_local $5) + (i32.const 1) + ) + (br $switch) + ) + (i32.store8 + (get_local $5) + (i32.const 1) + ) + (i32.store + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (block $__rjti$1 + (if + (i32.and + (tee_local $3 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $0) + ) + (get_local $4) + ) + ) + (br_if $while-in + (i32.and + (tee_local $3 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + (br $__rjti$1) + ) + ) + ) + ) + (br_if $__rjti$2 + (get_local $3) + ) + (set_local $2 + (i32.const 0) + ) + (br $label$break$L8) + ) + (if + (i32.ne + (i32.load8_u + (get_local $0) + ) + (tee_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $2) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.xor + (i32.load + (get_local $0) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (set_local $2 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $0) + ) + (get_local $4) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + ) + ) + (if i32 + (get_local $2) + (get_local $0) + (i32.const 0) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (if + (i32.gt_u + (get_local $1) + (i32.const -17) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (set_local $3 + (if i32 + (tee_local $2 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (block i32 + (set_local $5 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (get_local $0) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (block i32 + (set_local $5 + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (i32.const 10) + ) + ) + ) + (if + (i32.ne + (tee_local $6 + (if i32 + (i32.lt_u + (if i32 + (i32.gt_u + (get_local $5) + (get_local $1) + ) + (tee_local $1 + (get_local $5) + ) + (get_local $1) + ) + (i32.const 11) + ) + (i32.const 10) + (i32.add + (i32.and + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.const -16) + ) + (i32.const -1) + ) + ) + ) + (get_local $3) + ) + (block + (if + (tee_local $4 + (i32.add + (tee_local $4 + (block $__rjto$1 i32 + (block $__rjti$1 + (if + (i32.eq + (get_local $6) + (i32.const 10) + ) + (block + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (if + (get_local $2) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 0) + ) + ) + (block + (set_local $1 + (get_local $0) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $7 + (i32.const 1) + ) + (br $__rjti$1) + ) + ) + ) + (block + (set_local $1 + (call $__Znwj + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + (if + (get_local $2) + (block + (set_local $2 + (i32.const 1) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (i32.const 1) + ) + (set_local $3 + (get_local $0) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + ) + ) + (set_local $7 + (i32.const 1) + ) + (br $__rjto$1 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + (i32.const 1) + ) + ) + (drop + (call $_memcpy + (get_local $1) + (get_local $3) + (get_local $4) + ) + ) + ) + (if + (get_local $7) + (call $__ZdlPv + (get_local $3) + ) + ) + (if + (get_local $2) + (block + (i32.store offset=8 + (get_local $0) + (i32.or + (i32.add + (get_local $6) + (i32.const 1) + ) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $5) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (i32.store8 + (get_local $8) + (get_local $5) + ) + ) + ) + ) + ) + (func $__ZNSt3__28ios_base4InitC2Ev (param $0 i32) + (local $1 i32) + (call $__ZNSt3__210__stdinbufIcEC2EP8_IO_FILEP11__mbstate_t + (i32.const 18840) + (tee_local $0 + (i32.load + (i32.const 2816) + ) + ) + (i32.const 18896) + ) + (i32.store + (i32.const 18160) + (i32.const 6436) + ) + (i32.store + (i32.const 18168) + (i32.const 6456) + ) + (i32.store + (i32.const 18164) + (i32.const 0) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18168) + (i32.const 18840) + ) + (i32.store + (i32.const 18240) + (i32.const 0) + ) + (i32.store + (i32.const 18244) + (i32.const -1) + ) + (call $__ZNSt3__210__stdinbufIwEC2EP8_IO_FILEP11__mbstate_t + (i32.const 18904) + (get_local $0) + (i32.const 18960) + ) + (i32.store + (i32.const 18248) + (i32.const 6476) + ) + (i32.store + (i32.const 18256) + (i32.const 6496) + ) + (i32.store + (i32.const 18252) + (i32.const 0) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18256) + (i32.const 18904) + ) + (i32.store + (i32.const 18328) + (i32.const 0) + ) + (i32.store + (i32.const 18332) + (i32.const -1) + ) + (call $__ZNSt3__211__stdoutbufIcEC2EP8_IO_FILEP11__mbstate_t + (i32.const 18968) + (tee_local $0 + (i32.load + (i32.const 2932) + ) + ) + (i32.const 19016) + ) + (i32.store + (i32.const 18336) + (i32.const 6516) + ) + (i32.store + (i32.const 18340) + (i32.const 6536) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18340) + (i32.const 18968) + ) + (i32.store + (i32.const 18412) + (i32.const 0) + ) + (i32.store + (i32.const 18416) + (i32.const -1) + ) + (call $__ZNSt3__211__stdoutbufIwEC2EP8_IO_FILEP11__mbstate_t + (i32.const 19024) + (get_local $0) + (i32.const 19072) + ) + (i32.store + (i32.const 18420) + (i32.const 6556) + ) + (i32.store + (i32.const 18424) + (i32.const 6576) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18424) + (i32.const 19024) + ) + (i32.store + (i32.const 18496) + (i32.const 0) + ) + (i32.store + (i32.const 18500) + (i32.const -1) + ) + (call $__ZNSt3__211__stdoutbufIcEC2EP8_IO_FILEP11__mbstate_t + (i32.const 19080) + (tee_local $0 + (i32.load + (i32.const 2700) + ) + ) + (i32.const 19128) + ) + (i32.store + (i32.const 18504) + (i32.const 6516) + ) + (i32.store + (i32.const 18508) + (i32.const 6536) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18508) + (i32.const 19080) + ) + (i32.store + (i32.const 18580) + (i32.const 0) + ) + (i32.store + (i32.const 18584) + (i32.const -1) + ) + (set_local $1 + (i32.load + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18504) + ) + (i32.const -12) + ) + ) + (i32.const 18528) + ) + ) + ) + (i32.store + (i32.const 18672) + (i32.const 6516) + ) + (i32.store + (i32.const 18676) + (i32.const 6536) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18676) + (get_local $1) + ) + (i32.store + (i32.const 18748) + (i32.const 0) + ) + (i32.store + (i32.const 18752) + (i32.const -1) + ) + (call $__ZNSt3__211__stdoutbufIwEC2EP8_IO_FILEP11__mbstate_t + (i32.const 19136) + (get_local $0) + (i32.const 19184) + ) + (i32.store + (i32.const 18588) + (i32.const 6556) + ) + (i32.store + (i32.const 18592) + (i32.const 6576) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18592) + (i32.const 19136) + ) + (i32.store + (i32.const 18664) + (i32.const 0) + ) + (i32.store + (i32.const 18668) + (i32.const -1) + ) + (set_local $0 + (i32.load + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18588) + ) + (i32.const -12) + ) + ) + (i32.const 18612) + ) + ) + ) + (i32.store + (i32.const 18756) + (i32.const 6556) + ) + (i32.store + (i32.const 18760) + (i32.const 6576) + ) + (call $__ZNSt3__28ios_base4initEPv + (i32.const 18760) + (get_local $0) + ) + (i32.store + (i32.const 18832) + (i32.const 0) + ) + (i32.store + (i32.const 18836) + (i32.const -1) + ) + (i32.store + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18160) + ) + (i32.const -12) + ) + ) + (i32.const 18232) + ) + (i32.const 18336) + ) + (i32.store + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18248) + ) + (i32.const -12) + ) + ) + (i32.const 18320) + ) + (i32.const 18420) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18504) + ) + (i32.const -12) + ) + ) + (i32.const 18508) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 8192) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18588) + ) + (i32.const -12) + ) + ) + (i32.const 18592) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 8192) + ) + ) + (i32.store + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18504) + ) + (i32.const -12) + ) + ) + (i32.const 18576) + ) + (i32.const 18336) + ) + (i32.store + (i32.add + (i32.load + (i32.add + (i32.load + (i32.const 18588) + ) + (i32.const -12) + ) + ) + (i32.const 18660) + ) + (i32.const 18420) + ) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $5 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $7) + ) + (if + (i32.and + (i32.load offset=4 + (get_local $2) + ) + (i32.const 1) + ) + (block + (i32.store + (get_local $6) + (tee_local $2 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (set_local $0 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19248) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $2) + ) + ) + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (if + (get_local $4) + (call_indirect $FUNCSIG$vii + (get_local $5) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=24 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $5) + (get_local $0) + (i32.add + (i32.and + (i32.load offset=28 + (get_local $2) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (set_local $2 + (tee_local $4 + (i32.load8_s + (tee_local $8 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + ) + ) + (set_local $3 + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + ) + (if + (i32.ge_s + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (get_local $5) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.add + (if i32 + (tee_local $4 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $2) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (get_local $3) + (get_local $5) + ) + (i32.shl + (if i32 + (get_local $4) + (i32.load + (get_local $6) + ) + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (block + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (block + (if + (i32.eq + (tee_local $4 + (i32.load + (tee_local $9 + (i32.add + (get_local $3) + (i32.const 24) + ) + ) + ) + ) + (i32.load offset=28 + (get_local $3) + ) + ) + (set_local $2 + (call_indirect $FUNCSIG$iii + (get_local $3) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $3) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (block + (i32.store + (get_local $9) + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const -1) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + ) + ) + ) + (set_local $2 + (i32.load8_s + (get_local $8) + ) + ) + (set_local $3 + (i32.load + (get_local $5) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $5) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (call_indirect $FUNCSIG$iiiiii + (get_local $0) + (get_local $5) + (get_local $2) + (get_local $3) + (i32.and + (get_local $4) + (i32.const 1) + ) + (i32.add + (i32.and + (get_local $6) + (i32.const 31) + ) + (i32.const 429) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (block $do-once + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=4 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 28) + ) + ) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + ) + ) + (block + (if + (i32.ne + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$viiiii + (tee_local $0 + (i32.load offset=8 + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + (i32.const 3) + ) + (i32.const 40) + ) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (i32.load offset=16 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store offset=32 + (get_local $1) + (get_local $3) + ) + (br_if $do-once + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 44) + ) + ) + ) + (i32.const 4) + ) + ) + (i32.store8 + (tee_local $6 + (i32.add + (get_local $1) + (i32.const 52) + ) + ) + (i32.const 0) + ) + (i32.store8 + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 53) + ) + ) + (i32.const 0) + ) + (call_indirect $FUNCSIG$viiiiii + (tee_local $0 + (i32.load offset=8 + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + (get_local $2) + (i32.const 1) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 405) + ) + ) + (i32.store + (get_local $3) + (tee_local $0 + (block $__rjto$1 i32 + (block $__rjti$1 + (if + (i32.load8_s + (get_local $7) + ) + (if + (i32.load8_s + (get_local $6) + ) + (br $__rjti$1) + (set_local $0 + (i32.const 1) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (i32.store + (get_local $5) + (get_local $2) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 40) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 1) + ) + ) + (if + (i32.eq + (i32.load offset=36 + (get_local $1) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load offset=24 + (get_local $1) + ) + (i32.const 2) + ) + (block + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1 + (i32.const 4) + ) + ) + ) + ) + (br_if $__rjti$1 + (get_local $0) + ) + (br $__rjto$1 + (i32.const 4) + ) + ) + (i32.const 3) + ) + ) + ) + (br $do-once) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 1) + ) + (i32.store offset=32 + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcb (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $5 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $7 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $8) + ) + (if + (i32.and + (i32.load offset=4 + (get_local $2) + ) + (i32.const 1) + ) + (block + (i32.store + (get_local $6) + (tee_local $0 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (set_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19220) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (if + (get_local $4) + (call_indirect $FUNCSIG$vii + (get_local $5) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=24 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $5) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=28 + (get_local $0) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (set_local $6 + (tee_local $0 + (i32.load8_s + (tee_local $3 + (i32.add + (get_local $5) + (i32.const 11) + ) + ) + ) + ) + ) + (set_local $0 + (if i32 + (i32.lt_s + (get_local $0) + (i32.const 0) + ) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.add + (if i32 + (tee_local $2 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + (if i32 + (get_local $2) + (i32.load + (get_local $4) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + (block + (set_local $7 + (i32.load8_s + (get_local $0) + ) + ) + (block $do-once + (if + (tee_local $9 + (i32.load + (get_local $1) + ) + ) + (block + (if + (i32.ne + (tee_local $6 + (i32.load + (tee_local $2 + (i32.add + (get_local $9) + (i32.const 24) + ) + ) + ) + ) + (i32.load offset=28 + (get_local $9) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $6) + (get_local $7) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $9) + (i32.and + (get_local $7) + (i32.const 255) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + ) + ) + ) + ) + (set_local $6 + (i32.load8_s + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $5) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $7) + ) + ) + (set_local $0 + (call_indirect $FUNCSIG$iiiiii + (get_local $0) + (get_local $5) + (get_local $2) + (get_local $3) + (i32.and + (get_local $4) + (i32.const 1) + ) + (i32.add + (i32.and + (get_local $6) + (i32.const 31) + ) + (i32.const 429) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $0) + ) + (func $_mbrtowc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $4 + (get_local $6) + ) + (set_local $3 + (i32.load + (tee_local $5 + (if i32 + (get_local $3) + (get_local $3) + (i32.const 17648) + ) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $1) + (block + (set_local $7 + (if i32 + (get_local $0) + (get_local $0) + (get_local $4) + ) + ) + (set_local $0 + (if i32 + (get_local $2) + (block i32 + (block $label$break$L11 + (block $__rjti$0 + (if + (get_local $3) + (block + (set_local $0 + (get_local $2) + ) + (br $__rjti$0) + ) + (block + (set_local $0 + (i32.and + (tee_local $3 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const 255) + ) + ) + (if + (i32.gt_s + (get_local $3) + (i32.const -1) + ) + (block + (i32.store + (get_local $7) + (get_local $0) + ) + (set_local $0 + (i32.ne + (get_local $3) + (i32.const 0) + ) + ) + (br $__rjto$1) + ) + ) + (br_if $__rjti$1 + (i32.gt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -194) + ) + ) + (i32.const 50) + ) + ) + (set_local $3 + (i32.load + (i32.add + (i32.shl + (get_local $0) + (i32.const 2) + ) + (i32.const 2496) + ) + ) + ) + (if + (tee_local $0 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $__rjti$0) + ) + ) + ) + ) + (br $label$break$L11) + ) + (br_if $__rjti$1 + (i32.gt_u + (i32.or + (i32.add + (tee_local $8 + (i32.shr_u + (i32.and + (tee_local $4 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const 255) + ) + (i32.const 3) + ) + ) + (i32.const -16) + ) + (i32.add + (get_local $8) + (i32.shr_s + (get_local $3) + (i32.const 26) + ) + ) + ) + (i32.const 7) + ) + ) + (loop $while-in + (block $while-out + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + (br_if $while-out + (i32.ge_s + (tee_local $3 + (i32.or + (i32.add + (i32.and + (get_local $4) + (i32.const 255) + ) + (i32.const -128) + ) + (i32.shl + (get_local $3) + (i32.const 6) + ) + ) + ) + (i32.const 0) + ) + ) + (br_if $label$break$L11 + (i32.eqz + (get_local $0) + ) + ) + (br_if $while-in + (i32.eq + (i32.and + (tee_local $4 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + ) + (br $__rjti$1) + ) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $7) + (get_local $3) + ) + (set_local $0 + (i32.sub + (get_local $2) + (get_local $0) + ) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (get_local $3) + ) + (i32.const -2) + ) + (i32.const -2) + ) + ) + ) + (if + (get_local $3) + (br $__rjti$1) + (set_local $0 + (i32.const 0) + ) + ) + ) + (br $__rjto$1) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (set_local $0 + (i32.const -1) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (if + (i32.gt_u + (get_local $1) + (i32.const 1073741807) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (block $do-once + (if + (i32.ne + (tee_local $5 + (if i32 + (i32.lt_u + (if i32 + (i32.gt_u + (tee_local $4 + (if i32 + (tee_local $7 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (tee_local $8 + (i32.add + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (block i32 + (set_local $2 + (i32.add + (i32.and + (i32.load + (get_local $6) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (block i32 + (set_local $2 + (i32.const 1) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + ) + ) + (get_local $1) + ) + (tee_local $1 + (get_local $4) + ) + (get_local $1) + ) + (i32.const 2) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.add + (get_local $1) + (i32.const 4) + ) + (i32.const -4) + ) + (i32.const -1) + ) + ) + ) + (get_local $2) + ) + (block + (block $__rjti$2 + (block $__rjti$1 + (if + (i32.eq + (get_local $5) + (i32.const 1) + ) + (block + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (if + (get_local $7) + (block + (set_local $1 + (get_local $0) + ) + (set_local $3 + (i32.const 0) + ) + ) + (block + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $0) + (get_local $2) + (i32.add + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 1) + ) + ) + ) + (call $__ZdlPv + (get_local $2) + ) + (br $__rjti$2) + ) + ) + ) + (block + (if + (i32.gt_u + (tee_local $1 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + ) + (set_local $1 + (call $__Znwj + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (if + (get_local $7) + (block + (set_local $3 + (i32.const 1) + ) + (set_local $2 + (i32.load + (get_local $0) + ) + ) + ) + (block + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $1) + (get_local $0) + (i32.add + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 1) + ) + ) + ) + (br $__rjti$1) + ) + ) + ) + ) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $1) + (get_local $2) + (i32.add + (i32.load offset=4 + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (call $__ZdlPv + (get_local $2) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $3) + ) + ) + ) + (i32.store + (get_local $6) + (i32.or + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $4) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (br $do-once) + ) + (i32.store8 + (get_local $8) + (get_local $4) + ) + ) + ) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE7__weeksEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 16952) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16952) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 16960) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16960) + ) + (block + (set_local $0 + (i32.const 19280) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 19448) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 99) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19280) + (i32.const 14459) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19292) + (i32.const 14466) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19304) + (i32.const 14473) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19316) + (i32.const 14481) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19328) + (i32.const 14491) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19340) + (i32.const 14500) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19352) + (i32.const 14507) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19364) + (i32.const 14516) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19376) + (i32.const 14520) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19388) + (i32.const 14524) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19400) + (i32.const 14528) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19412) + (i32.const 14532) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19424) + (i32.const 14536) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19436) + (i32.const 14540) + ) + ) + (i32.store + (i32.const 19448) + (i32.const 19280) + ) + ) + ) + ) + (i32.load + (i32.const 19448) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE7__weeksEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17032) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17032) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 17040) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17040) + ) + (block + (set_local $0 + (i32.const 20092) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 20260) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 103) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20092) + (i32.const 7496) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20104) + (i32.const 7524) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20116) + (i32.const 7552) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20128) + (i32.const 7584) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20140) + (i32.const 7624) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20152) + (i32.const 7660) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20164) + (i32.const 7688) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20176) + (i32.const 7724) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20188) + (i32.const 7740) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20200) + (i32.const 7756) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20212) + (i32.const 7772) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20224) + (i32.const 7788) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20236) + (i32.const 7804) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20248) + (i32.const 7820) + ) + ) + (i32.store + (i32.const 20260) + (i32.const 20092) + ) + ) + ) + ) + (i32.load + (i32.const 20260) + ) + ) + (func $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.eqz + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + ) + (block + (set_global $STACKTOP + (get_local $8) + ) + (return + (i32.const 0) + ) + ) + ) + (set_local $9 + (i32.load + (tee_local $11 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + ) + (if + (i32.gt_s + (tee_local $10 + (i32.sub + (tee_local $4 + (get_local $2) + ) + (tee_local $7 + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.ne + (call_indirect $FUNCSIG$iiii + (get_local $6) + (get_local $1) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_global $STACKTOP + (get_local $8) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (set_local $1 + (get_local $8) + ) + (block $do-once + (if + (i32.gt_s + (tee_local $7 + (if i32 + (i32.gt_s + (get_local $9) + (tee_local $7 + (i32.sub + (get_local $3) + (get_local $7) + ) + ) + ) + (i32.sub + (get_local $9) + (get_local $7) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEjc + (get_local $1) + (get_local $7) + (get_local $5) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$iiii + (get_local $6) + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $1) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + (get_local $1) + ) + (get_local $7) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $7) + ) + (block + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $1) + ) + (br $do-once) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $1) + ) + (set_global $STACKTOP + (get_local $8) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.gt_s + (tee_local $1 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.const 0) + ) + (if + (i32.ne + (call_indirect $FUNCSIG$iiii + (get_local $6) + (get_local $2) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_global $STACKTOP + (get_local $8) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $6) + ) + (func $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (get_local $8) + ) + (block $label$break$L1 + (if + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $9 + (i32.load + (tee_local $11 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + ) + (set_local $10 + (i32.shr_s + (tee_local $13 + (i32.sub + (tee_local $4 + (get_local $2) + ) + (tee_local $12 + (get_local $1) + ) + ) + ) + (i32.const 2) + ) + ) + (if + (i32.gt_s + (get_local $13) + (i32.const 0) + ) + (if + (i32.ne + (call_indirect $FUNCSIG$iiii + (get_local $6) + (get_local $1) + (get_local $10) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + ) + (if + (i32.gt_s + (tee_local $1 + (if i32 + (i32.gt_s + (get_local $9) + (tee_local $1 + (i32.shr_s + (i32.sub + (get_local $3) + (get_local $12) + ) + (i32.const 2) + ) + ) + ) + (i32.sub + (get_local $9) + (get_local $1) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEjw + (get_local $7) + (get_local $1) + (get_local $5) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$iiii + (get_local $6) + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $7) + ) + (i32.const 0) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $7) + ) + (set_local $6 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + ) + ) + (set_local $1 + (i32.shr_s + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + (i32.const 2) + ) + ) + (if + (i32.gt_s + (get_local $3) + (i32.const 0) + ) + (if + (i32.ne + (call_indirect $FUNCSIG$iiii + (get_local $6) + (get_local $2) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $6) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + ) + (set_local $6 + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $6) + ) + (func $___cxx_global_array_dtor_112 (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20832) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20820) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20808) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20796) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20784) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20772) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20760) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20748) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20736) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20724) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20712) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20700) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20688) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20676) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20664) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20652) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20640) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20628) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20616) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20604) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20592) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20580) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20568) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20556) + ) + ) + (func $___cxx_global_array_dtor_109 (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20020) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20008) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19996) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19984) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19972) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19960) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19948) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19936) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19924) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19912) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19900) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19888) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19876) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19864) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19852) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19840) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19828) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19816) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19804) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19792) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19780) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19768) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19756) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19744) + ) + ) + (func $___cxx_global_array_dtor_85 (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20540) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20528) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20516) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20504) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20492) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20480) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20468) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20456) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20444) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20432) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20420) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20408) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20396) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20384) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20372) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20360) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20348) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20336) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20324) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20312) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20300) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20288) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20276) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20264) + ) + ) + (func $___cxx_global_array_dtor_61 (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19728) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19716) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19704) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19692) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19680) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19668) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19656) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19644) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19632) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19620) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19608) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19596) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19584) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19572) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19560) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19548) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19536) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19524) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19512) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19500) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19488) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19476) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19464) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19452) + ) + ) + (func $___dynamic_cast (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $9 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.load + (i32.add + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.const -8) + ) + ) + ) + ) + (set_local $6 + (i32.load + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + ) + (i32.store + (tee_local $4 + (get_local $9) + ) + (get_local $2) + ) + (i32.store offset=4 + (get_local $4) + (get_local $0) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $3) + ) + (set_local $3 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + (set_local $10 + (i32.add + (get_local $4) + (i32.const 24) + ) + ) + (set_local $11 + (i32.add + (get_local $4) + (i32.const 28) + ) + ) + (set_local $12 + (i32.add + (get_local $4) + (i32.const 32) + ) + ) + (set_local $13 + (i32.add + (get_local $4) + (i32.const 40) + ) + ) + (set_local $1 + (i32.eq + (get_local $6) + (get_local $2) + ) + ) + (set_local $0 + (i32.add + (tee_local $8 + (tee_local $7 + (i32.add + (get_local $4) + (i32.const 16) + ) + ) + ) + (i32.const 36) + ) + ) + (loop $do-in + (i32.store + (get_local $8) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store16 offset=36 + (get_local $7) + (i32.const 0) + ) + (i32.store8 offset=38 + (get_local $7) + (i32.const 0) + ) + (block $label$break$L1 + (if + (get_local $1) + (block + (i32.store offset=48 + (get_local $4) + (i32.const 1) + ) + (call_indirect $FUNCSIG$viiiiii + (get_local $2) + (get_local $4) + (get_local $5) + (get_local $5) + (i32.const 1) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $2) + ) + ) + (i32.const 7) + ) + (i32.const 405) + ) + ) + (if + (i32.ne + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (block + (call_indirect $FUNCSIG$viiiii + (get_local $6) + (get_local $4) + (get_local $5) + (i32.const 1) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $6) + ) + ) + (i32.const 3) + ) + (i32.const 40) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-default + (i32.load offset=36 + (get_local $4) + ) + ) + ) + (set_local $5 + (if i32 + (i32.and + (i32.and + (i32.eq + (i32.load + (get_local $13) + ) + (i32.const 1) + ) + (i32.eq + (i32.load + (get_local $11) + ) + (i32.const 1) + ) + ) + (i32.eq + (i32.load + (get_local $12) + ) + (i32.const 1) + ) + ) + (i32.load + (get_local $3) + ) + (i32.const 0) + ) + ) + (br $label$break$L1) + ) + (br $switch) + ) + (set_local $5 + (i32.const 0) + ) + (br $label$break$L1) + ) + (if + (i32.ne + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + (if + (i32.eqz + (i32.and + (i32.and + (i32.eqz + (i32.load + (get_local $13) + ) + ) + (i32.eq + (i32.load + (get_local $11) + ) + (i32.const 1) + ) + ) + (i32.eq + (i32.load + (get_local $12) + ) + (i32.const 1) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + ) + (set_local $5 + (i32.load + (get_local $7) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $9) + ) + (get_local $5) + ) + (func $__ZNSt3__211__stdoutbufIcE8overflowEi (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (set_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $3) + ) + (block $__rjto$3 + (block $__rjti$3 + (br_if $__rjti$3 + (tee_local $8 + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + ) + (i32.store8 + (get_local $2) + (get_local $1) + ) + (if + (i32.load8_s offset=44 + (get_local $0) + ) + (if + (i32.eq + (call $_fwrite + (get_local $2) + (i32.const 1) + (i32.const 1) + (i32.load offset=32 + (get_local $0) + ) + ) + (i32.const 1) + ) + (br $__rjti$3) + (block + (set_local $1 + (i32.const -1) + ) + (br $__rjto$3) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $4) + ) + (set_local $9 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $12 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $4) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (set_local $0 + (get_local $2) + ) + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (set_local $2 + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.load + (get_local $11) + ) + (get_local $0) + (get_local $9) + (get_local $6) + (get_local $4) + (get_local $12) + (get_local $5) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $2) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (br_if $__rjti$2 + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $0) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $2) + (i32.const 3) + ) + ) + (br_if $__rjti$2 + (i32.ne + (i32.or + (get_local $2) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (br_if $__rjti$2 + (i32.ne + (call $_fwrite + (get_local $4) + (i32.const 1) + (tee_local $0 + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $13) + ) + ) + (i32.load + (get_local $7) + ) + ) + (get_local $0) + ) + ) + (br_if $__rjti$3 + (i32.ne + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + (br $while-in) + ) + ) + (br_if $__rjti$2 + (i32.ne + (call $_fwrite + (get_local $0) + (i32.const 1) + (i32.const 1) + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + ) + (br $__rjti$3) + ) + (set_local $1 + (i32.const -1) + ) + (br $__rjto$3) + ) + (if + (get_local $8) + (set_local $1 + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $__ZNSt3__211__stdoutbufIwE8overflowEj (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (set_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $6 + (get_local $3) + ) + (block $__rjto$3 + (block $__rjti$3 + (br_if $__rjti$3 + (tee_local $8 + (i32.eq + (get_local $1) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $1) + ) + (if + (i32.load8_s offset=44 + (get_local $0) + ) + (if + (i32.eq + (call $_fwrite + (get_local $2) + (i32.const 4) + (i32.const 1) + (i32.load offset=32 + (get_local $0) + ) + ) + (i32.const 1) + ) + (br $__rjti$3) + (block + (set_local $1 + (i32.const -1) + ) + (br $__rjto$3) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $4) + ) + (set_local $9 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $12 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $4) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (set_local $0 + (get_local $2) + ) + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (set_local $2 + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.load + (get_local $11) + ) + (get_local $0) + (get_local $9) + (get_local $6) + (get_local $4) + (get_local $12) + (get_local $5) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $2) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (br_if $__rjti$2 + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $0) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $2) + (i32.const 3) + ) + ) + (br_if $__rjti$2 + (i32.ne + (i32.or + (get_local $2) + (i32.const 1) + ) + (i32.const 1) + ) + ) + (br_if $__rjti$2 + (i32.ne + (call $_fwrite + (get_local $4) + (i32.const 1) + (tee_local $0 + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $13) + ) + ) + (i32.load + (get_local $7) + ) + ) + (get_local $0) + ) + ) + (br_if $__rjti$3 + (i32.ne + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + (br $while-in) + ) + ) + (br_if $__rjti$2 + (i32.ne + (call $_fwrite + (get_local $0) + (i32.const 1) + (i32.const 1) + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + ) + (br $__rjti$3) + ) + (set_local $1 + (i32.const -1) + ) + (br $__rjto$3) + ) + (if + (get_local $8) + (set_local $1 + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $__ZNKSt3__28messagesIcE6do_getEiiiRKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $6) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $6) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $6) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $5 + (i32.add + (tee_local $1 + (if i32 + (tee_local $9 + (i32.lt_s + (tee_local $8 + (i32.load8_s offset=11 + (get_local $5) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $5) + ) + (get_local $5) + ) + ) + (if i32 + (get_local $9) + (i32.load offset=4 + (get_local $5) + ) + (i32.and + (get_local $8) + (i32.const 255) + ) + ) + ) + ) + (loop $while-in1 + (if + (i32.lt_u + (get_local $1) + (get_local $5) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $6) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in1) + ) + ) + ) + (set_local $1 + (call $_catgets + (if i32 + (i32.eq + (get_local $2) + (i32.const -1) + ) + (i32.const -1) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (get_local $3) + (get_local $4) + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $6) + ) + (i32.const 0) + ) + (i32.load + (get_local $6) + ) + (get_local $6) + ) + ) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in3 + (if + (i32.ne + (get_local $2) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $1) + (call $_strlen + (get_local $1) + ) + ) + ) + (loop $while-in5 + (if + (i32.lt_u + (get_local $1) + (get_local $2) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (get_local $6) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 128) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 116) + ) + ) + (i32.load8_s + (i32.const 14180) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14181) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14182) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14183) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14184) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14185) + ) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const 14186) + (i32.const 0) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $7 + (get_local $0) + ) + (get_local $4) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 104) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 12) + (get_local $6) + (get_local $5) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 144) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 126) + ) + ) + (i32.load8_s + (i32.const 14180) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14181) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14182) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14183) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14184) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14185) + ) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const 14186) + (i32.const 1) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $7 + (get_local $0) + ) + (get_local $4) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 112) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 13) + (get_local $6) + (get_local $5) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (i32.load8_s + (i32.const 14180) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14181) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14182) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14183) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14184) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14185) + ) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const 14186) + (i32.const 0) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $7 + (get_local $0) + ) + (get_local $4) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 12) + (get_local $6) + (get_local $5) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (i32.load8_s + (i32.const 14180) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14181) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14182) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14183) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14184) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14185) + ) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const 14186) + (i32.const 1) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $7 + (get_local $0) + ) + (get_local $4) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 43) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 13) + (get_local $6) + (get_local $5) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNSt3__224__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_ + (tee_local $6 + (get_local $3) + ) + (get_local $0) + ) + (if + (i32.eqz + (i32.load8_s + (get_local $6) + ) + ) + (block + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $6) + ) + (set_global $STACKTOP + (get_local $3) + ) + (return + (get_local $0) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (i32.load offset=24 + (tee_local $7 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + ) + (set_local $9 + (i32.load offset=4 + (get_local $7) + ) + ) + (if + (i32.eq + (tee_local $4 + (i32.load + (tee_local $10 + (i32.add + (get_local $7) + (i32.const 76) + ) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $5) + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $7) + ) + ) + (set_local $4 + (call_indirect $FUNCSIG$iii + (tee_local $4 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19208) + ) + ) + (i32.const 32) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $4) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $5) + ) + (i32.store + (get_local $10) + (tee_local $4 + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $8) + ) + ) + (if + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $5) + (get_local $1) + (if i32 + (i32.eq + (i32.and + (get_local $9) + (i32.const 176) + ) + (i32.const 32) + ) + (get_local $2) + (get_local $1) + ) + (get_local $2) + (get_local $7) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (block + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $6) + ) + (set_global $STACKTOP + (get_local $3) + ) + (return + (get_local $0) + ) + ) + ) + (call $__ZNSt3__28ios_base5clearEj + (tee_local $1 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + (i32.or + (i32.load offset=16 + (get_local $1) + ) + (i32.const 5) + ) + ) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $6) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $_vfprintf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (if + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (set_local $1 + (i32.const -1) + ) + (block + (set_local $14 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $3) + ) + ) + (set_local $1 + (i32.const -1) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $0) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 32) + ) + (set_local $1 + (i32.const -1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $1) + ) + (func $__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (block + (set_local $9 + (i32.and + (tee_local $7 + (i32.load16_s + (tee_local $6 + (i32.add + (get_local $1) + (i32.const 52) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (set_local $10 + (i32.shr_u + (i32.and + (get_local $7) + (i32.const 65535) + ) + (i32.const 8) + ) + ) + (set_local $11 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (tee_local $8 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.const 3) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 53) + ) + ) + (i32.const 0) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib + (i32.add + (get_local $0) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + ) + (block $label$break$L4 + (if + (i32.gt_s + (get_local $8) + (i32.const 1) + ) + (block + (set_local $12 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + (set_local $8 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $13 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (loop $do-in + (br_if $label$break$L4 + (i32.load8_s + (get_local $13) + ) + ) + (if + (i32.and + (tee_local $14 + (i32.load16_s + (get_local $6) + ) + ) + (i32.const 255) + ) + (block + (br_if $label$break$L4 + (i32.eq + (i32.load + (get_local $12) + ) + (i32.const 1) + ) + ) + (br_if $label$break$L4 + (i32.eqz + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.ge_s + (i32.and + (get_local $14) + (i32.const 65535) + ) + (i32.const 256) + ) + (br_if $label$break$L4 + (i32.eqz + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 0) + ) + (i32.store8 + (get_local $7) + (i32.const 0) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + ) + (br_if $do-in + (i32.lt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $11) + ) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $6) + (get_local $9) + ) + (i32.store8 + (get_local $7) + (get_local $10) + ) + ) + ) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPKv (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 192) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 180) + ) + ) + (i32.load8_s + (i32.const 14193) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14194) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14195) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14196) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14197) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14198) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $8 + (get_local $0) + ) + (get_local $4) + ) + (set_local $6 + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 160) + ) + ) + (i32.const 20) + (get_local $6) + (get_local $5) + (get_local $8) + ) + ) + (set_local $10 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (tee_local $9 + (i32.add + (get_local $4) + (get_local $6) + ) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 156) + ) + ) + (tee_local $11 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $11) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $7) + (get_local $4) + (get_local $9) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $7) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $7) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $8) + (get_local $5) + (if i32 + (i32.eq + (get_local $10) + (get_local $9) + ) + (get_local $6) + (i32.add + (get_local $5) + (i32.shl + (i32.sub + (get_local $10) + (get_local $4) + ) + (i32.const 2) + ) + ) + ) + (get_local $6) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNSt3__210__stdinbufIwE9pbackfailEj (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (set_local $6 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $7 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $5 + (get_local $3) + ) + (set_local $2 + (i32.ne + (i32.load8_s + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + ) + (i32.const 0) + ) + ) + (block $label$break$L1 + (if + (i32.eq + (get_local $1) + (i32.const -1) + ) + (if + (get_local $2) + (set_local $1 + (i32.const -1) + ) + (i32.store8 + (get_local $8) + (i32.ne + (tee_local $1 + (i32.load offset=48 + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (get_local $2) + (block + (i32.store + (get_local $7) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (block $switch-default + (block $switch-case2 + (block $switch-case + (br_table $switch-case $switch-case $switch-case2 $switch-default + (i32.sub + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $9 + (i32.load offset=36 + (get_local $0) + ) + ) + (i32.load offset=40 + (get_local $0) + ) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 4) + ) + (get_local $5) + (get_local $4) + (i32.add + (get_local $4) + (i32.const 8) + ) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + (i32.const 1) + ) + ) + ) + (set_local $1 + (i32.const -1) + ) + (br $label$break$L1) + ) + (i32.store8 + (get_local $4) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$1 + (i32.le_u + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (get_local $4) + ) + ) + (i32.store + (get_local $6) + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + (br_if $while-in + (i32.ne + (call $_ungetc + (i32.load8_s + (get_local $5) + ) + (i32.load + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (br $__rjti$0) + ) + ) + (set_local $1 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $2 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $1) + ) + (i32.store8 + (get_local $8) + (i32.const 1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $__ZNSt3__210__stdinbufIcE9pbackfailEi (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (set_local $6 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $7 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $5 + (get_local $3) + ) + (set_local $2 + (i32.ne + (i32.load8_s + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + ) + (i32.const 0) + ) + ) + (block $label$break$L1 + (if + (i32.eq + (get_local $1) + (i32.const -1) + ) + (if + (get_local $2) + (set_local $1 + (i32.const -1) + ) + (i32.store8 + (get_local $8) + (i32.ne + (tee_local $1 + (i32.load offset=48 + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (get_local $2) + (block + (i32.store8 + (get_local $7) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (block $switch-default + (block $switch-case2 + (block $switch-case + (br_table $switch-case $switch-case $switch-case2 $switch-default + (i32.sub + (call_indirect $FUNCSIG$iiiiiiiii + (tee_local $9 + (i32.load offset=36 + (get_local $0) + ) + ) + (i32.load offset=40 + (get_local $0) + ) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 1) + ) + (get_local $5) + (get_local $4) + (i32.add + (get_local $4) + (i32.const 8) + ) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $9) + ) + ) + (i32.const 15) + ) + (i32.const 381) + ) + ) + (i32.const 1) + ) + ) + ) + (set_local $1 + (i32.const -1) + ) + (br $label$break$L1) + ) + (i32.store8 + (get_local $4) + (i32.load + (get_local $2) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (br_if $__rjti$1 + (i32.le_u + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (get_local $4) + ) + ) + (i32.store + (get_local $6) + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + (br_if $while-in + (i32.ne + (call $_ungetc + (i32.load8_s + (get_local $5) + ) + (i32.load + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (br $__rjti$0) + ) + ) + (set_local $1 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $2 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $1) + ) + (i32.store8 + (get_local $8) + (i32.const 1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPKv (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 72) + ) + ) + (i32.load8_s + (i32.const 14193) + ) + ) + (i32.store8 offset=1 + (get_local $5) + (i32.load8_s + (i32.const 14194) + ) + ) + (i32.store8 offset=2 + (get_local $5) + (i32.load8_s + (i32.const 14195) + ) + ) + (i32.store8 offset=3 + (get_local $5) + (i32.load8_s + (i32.const 14196) + ) + ) + (i32.store8 offset=4 + (get_local $5) + (i32.load8_s + (i32.const 14197) + ) + ) + (i32.store8 offset=5 + (get_local $5) + (i32.load8_s + (i32.const 14198) + ) + ) + (set_local $6 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $8 + (get_local $0) + ) + (get_local $4) + ) + (set_local $6 + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (i32.const 20) + (get_local $6) + (get_local $5) + (get_local $8) + ) + ) + (set_local $10 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (tee_local $9 + (i32.add + (get_local $4) + (get_local $6) + ) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (tee_local $11 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $11) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (get_local $7) + (get_local $4) + (get_local $9) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $7) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $5) + (get_local $6) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $7) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $8) + (get_local $5) + (if i32 + (i32.eq + (get_local $10) + (get_local $9) + ) + (get_local $6) + (i32.add + (get_local $5) + (i32.sub + (get_local $10) + (get_local $4) + ) + ) + ) + (get_local $6) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwy (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (i32.store + (tee_local $7 + (tee_local $6 + (get_local $0) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $6) + (i32.const 1) + ) + (i32.const 14188) + (i32.const 0) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $9 + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (i32.store offset=4 + (get_local $9) + (get_local $5) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 204) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 23) + (get_local $8) + (get_local $6) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwx (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 240) + ) + ) + (i32.store + (tee_local $7 + (tee_local $6 + (get_local $0) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $6) + (i32.const 1) + ) + (i32.const 14188) + (i32.const 1) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $9 + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (i32.store offset=4 + (get_local $9) + (get_local $5) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 204) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 23) + (get_local $8) + (get_local $6) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIwE21__widen_and_group_intEPcS2_S2_PwRS3_S4_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcy (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (i32.store + (tee_local $7 + (tee_local $6 + (get_local $0) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $6) + (i32.const 1) + ) + (i32.const 14188) + (i32.const 0) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $9 + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (i32.store offset=4 + (get_local $9) + (get_local $5) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 75) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 23) + (get_local $8) + (get_local $6) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $__ZNKSt3__27num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcx (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (i32.store + (tee_local $7 + (tee_local $6 + (get_local $0) + ) + ) + (i32.const 37) + ) + (i32.store offset=4 + (get_local $7) + (i32.const 0) + ) + (call $__ZNSt3__214__num_put_base12__format_intEPcPKcbj + (i32.add + (get_local $6) + (i32.const 1) + ) + (i32.const 14188) + (i32.const 1) + (i32.load offset=4 + (get_local $2) + ) + ) + (set_local $8 + (call $__ZNSt3__26__clocEv) + ) + (i32.store + (tee_local $9 + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (i32.store offset=4 + (get_local $9) + (get_local $5) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 75) + ) + ) + (call $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz + (get_local $4) + (i32.const 23) + (get_local $8) + (get_local $6) + (get_local $7) + ) + ) + ) + (set_local $6 + (call $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE + (get_local $4) + (get_local $5) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (tee_local $9 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $2) + ) + ) + ) + (call $__ZNSt3__29__num_putIcE21__widen_and_group_intEPcS2_S2_S2_RS2_S3_RKNS_6localeE + (get_local $4) + (get_local $6) + (get_local $5) + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $8) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $9) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.load + (get_local $5) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $8) + ) + ) + (set_local $1 + (call $__ZNSt3__216__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ + (get_local $7) + (get_local $4) + (get_local $1) + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $1) + ) + (func $___stdio_read (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (set_local $3 + (get_local $6) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (get_local $1) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.sub + (get_local $2) + (i32.ne + (tee_local $9 + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store offset=12 + (get_local $4) + (get_local $9) + ) + (if + (i32.load + (i32.const 17600) + ) + (block + (call $_pthread_cleanup_push + (i32.const 95) + (get_local $0) + ) + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $3) + (i32.const 2) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall145 + (i32.const 145) + (get_local $3) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $7) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $7) + (get_local $4) + ) + (i32.store offset=8 + (get_local $7) + (i32.const 2) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall145 + (i32.const 145) + (get_local $7) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $3) + (i32.const 1) + ) + (block + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.xor + (i32.and + (get_local $3) + (i32.const 48) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (get_local $3) + ) + ) + (if + (i32.gt_u + (get_local $3) + (tee_local $8 + (i32.load + (get_local $8) + ) + ) + ) + (block + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (tee_local $5 + (i32.load + (get_local $5) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.add + (get_local $5) + (i32.sub + (get_local $3) + (get_local $8) + ) + ) + ) + (if + (i32.load + (get_local $10) + ) + (block + (i32.store + (get_local $9) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.load8_s + (get_local $5) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $2) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEjjjjjjPKw (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (if + (i32.lt_u + (i32.sub + (i32.const 1073741806) + (get_local $1) + ) + (get_local $2) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (set_local $9 + (if i32 + (i32.lt_s + (i32.load8_s offset=3 + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 536870887) + ) + (if + (i32.lt_u + (if i32 + (i32.lt_u + (tee_local $11 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + (tee_local $2 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $11) + ) + ) + (i32.const 2) + ) + (set_local $8 + (i32.const 2) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.and + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.const -4) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + (set_local $8 + (get_local $2) + ) + ) + ) + (set_local $8 + (i32.const 1073741807) + ) + ) + (set_local $2 + (call $__Znwj + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + ) + (if + (get_local $4) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $2) + (get_local $9) + (get_local $4) + ) + ) + ) + (if + (get_local $6) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (i32.add + (get_local $2) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $7) + (get_local $6) + ) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (get_local $4) + ) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.add + (i32.add + (get_local $9) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (i32.const 1) + ) + (call $__ZdlPv + (get_local $9) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $10) + (i32.or + (get_local $8) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (tee_local $0 + (i32.add + (get_local $3) + (get_local $6) + ) + ) + ) + (i32.store + (i32.add + (get_local $2) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__26vectorI5pointNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (i32.shr_s + (i32.sub + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 4) + ) + (i32.const 1) + ) + ) + (i32.const 268435455) + ) + (call $__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (i32.lt_u + (i32.shr_s + (tee_local $7 + (i32.sub + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + ) + (i32.const 4) + ) + (i32.const 134217727) + ) + (block + (set_local $5 + (i32.shr_s + (i32.sub + (tee_local $4 + (i32.load + (get_local $6) + ) + ) + (get_local $3) + ) + (i32.const 4) + ) + ) + (if + (if i32 + (i32.lt_u + (tee_local $7 + (i32.shr_s + (get_local $7) + (i32.const 3) + ) + ) + (get_local $2) + ) + (get_local $2) + (tee_local $2 + (get_local $7) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.const 268435455) + ) + (block + (call $__ZNSt9bad_allocC2Ev + (tee_local $2 + (call $___cxa_allocate_exception + (i32.const 4) + ) + ) + ) + (call $___cxa_throw + (get_local $2) + (i32.const 2432) + (i32.const 91) + ) + ) + (br $__rjti$0) + ) + (block + (set_local $9 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $10 + (get_local $5) + ) + (set_local $11 + (get_local $4) + ) + ) + ) + ) + (block + (set_local $2 + (i32.const 268435455) + ) + (set_local $4 + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + ) + (set_local $5 + (i32.shr_s + (i32.sub + (get_local $5) + (get_local $3) + ) + (i32.const 4) + ) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (set_local $9 + (get_local $2) + ) + (set_local $8 + (call $__Znwj + (i32.shl + (get_local $2) + (i32.const 4) + ) + ) + ) + (set_local $10 + (get_local $5) + ) + (set_local $11 + (get_local $4) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $8) + (i32.shl + (get_local $10) + (i32.const 4) + ) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.store offset=8 + (get_local $2) + (i32.load offset=8 + (get_local $1) + ) + ) + (i32.store offset=12 + (get_local $2) + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (get_local $2) + (i32.shl + (i32.sub + (i32.const 0) + (i32.shr_s + (tee_local $1 + (i32.sub + (get_local $11) + (get_local $3) + ) + ) + (i32.const 4) + ) + ) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_s + (get_local $1) + (i32.const 0) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $3) + (get_local $1) + ) + ) + ) + (i32.store + (get_local $0) + (get_local $4) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + (i32.store + (get_local $12) + (i32.add + (get_local $8) + (i32.shl + (get_local $9) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (return) + ) + (call $__ZdlPv + (get_local $3) + ) + ) + (func $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEElsEd (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (set_local $7 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + (set_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_ + (tee_local $8 + (get_local $3) + ) + (get_local $0) + ) + (if + (i32.load8_s + (get_local $8) + ) + (block + (i32.store + (get_local $2) + (call $__ZNKSt3__28ios_base6getlocEv + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (set_local $9 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $2) + (i32.const 19264) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $2) + ) + (set_local $10 + (i32.load offset=24 + (tee_local $5 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $2 + (i32.load + (tee_local $6 + (i32.add + (get_local $5) + (i32.const 76) + ) + ) + ) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $4) + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $5) + ) + ) + (set_local $2 + (call_indirect $FUNCSIG$iii + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $4) + (i32.const 19208) + ) + ) + (i32.const 32) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $4) + ) + (i32.store + (get_local $6) + (tee_local $2 + (i32.shr_s + (i32.shl + (get_local $2) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + ) + ) + (set_local $6 + (i32.load offset=32 + (i32.load + (get_local $9) + ) + ) + ) + (i32.store + (get_local $7) + (get_local $10) + ) + (i32.store + (get_local $4) + (i32.load + (get_local $7) + ) + ) + (if + (i32.eqz + (call_indirect $FUNCSIG$iiiiid + (get_local $9) + (get_local $4) + (get_local $5) + (i32.and + (get_local $2) + (i32.const 255) + ) + (get_local $1) + (i32.add + (i32.and + (get_local $6) + (i32.const 7) + ) + (i32.const 304) + ) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 5) + ) + ) + ) + ) + ) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $8) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $__ZNSt3__216__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $6 + (i32.lt_s + (tee_local $5 + (i32.load8_s offset=11 + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (set_local $4 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (set_local $7 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (block $do-once + (if + (if i32 + (get_local $6) + (get_local $4) + (get_local $7) + ) + (block + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $5 + (get_local $1) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $5) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + ) + (block + (set_local $9 + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $4) + ) + ) + (i32.store + (get_local $4) + (get_local $9) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $8) + ) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + (set_local $6 + (i32.add + (if i32 + (get_local $6) + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $0) + ) + (if i32 + (get_local $6) + (get_local $4) + (get_local $7) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in1 + (block $while-out0 + (set_local $4 + (i32.or + (i32.lt_s + (tee_local $2 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.eq + (get_local $2) + (i32.const 127) + ) + ) + ) + (br_if $while-out0 + (i32.ge_u + (get_local $1) + (get_local $5) + ) + ) + (if + (i32.eqz + (get_local $4) + ) + (br_if $__rjti$0 + (i32.ne + (get_local $2) + (i32.load + (get_local $1) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.sub + (get_local $6) + (get_local $0) + ) + (i32.const 1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + (br $__rjto$0) + ) + (i32.store + (get_local $3) + (i32.const 4) + ) + (br $do-once) + ) + (if + (i32.eqz + (get_local $4) + ) + (if + (i32.ge_u + (i32.add + (i32.load + (get_local $5) + ) + (i32.const -1) + ) + (get_local $2) + ) + (i32.store + (get_local $3) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNSt3__214__num_put_base14__format_floatEPcPKcj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.and + (get_local $2) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 43) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 1024) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 35) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (set_local $5 + (if i32 + (tee_local $4 + (i32.eq + (tee_local $3 + (i32.and + (get_local $2) + (i32.const 260) + ) + ) + (i32.const 260) + ) + ) + (i32.const 0) + (block i32 + (i32.store8 + (get_local $0) + (i32.const 46) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.const 42) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.shr_u + (get_local $2) + (i32.const 14) + ) + ) + (loop $while-in + (if + (tee_local $6 + (i32.load8_s + (get_local $1) + ) + ) + (block + (i32.store8 + (get_local $0) + (get_local $6) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (block $label$break$L14 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $3) + (i32.const 4) + ) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 70) + ) + (br $label$break$L14) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 102) + ) + (br $label$break$L14) + ) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 69) + ) + (br $label$break$L14) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 101) + ) + (br $label$break$L14) + ) + ) + ) + (set_local $1 + (i32.ne + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 0) + ) + ) + (if + (get_local $4) + (if + (get_local $1) + (i32.store8 + (get_local $0) + (i32.const 65) + ) + (i32.store8 + (get_local $0) + (i32.const 97) + ) + ) + (if + (get_local $1) + (i32.store8 + (get_local $0) + (i32.const 71) + ) + (i32.store8 + (get_local $0) + (i32.const 103) + ) + ) + ) + ) + (get_local $5) + ) + (func $__ZL25default_terminate_handlerv + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $2 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + (set_local $5 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const 36) + ) + ) + (if + (tee_local $0 + (call $___cxa_get_globals_fast) + ) + (if + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (i32.and + (i32.eq + (i32.and + (tee_local $7 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 48) + ) + ) + ) + ) + (i32.const -256) + ) + (i32.const 1126902528) + ) + (i32.eq + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 1129074247) + ) + ) + ) + (block + (i32.store + (get_local $2) + (i32.load + (i32.const 9688) + ) + ) + (call $_abort_message + (i32.const 16718) + (get_local $2) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $0 + (if i32 + (i32.and + (i32.eq + (get_local $7) + (i32.const 1126902529) + ) + (i32.eq + (get_local $0) + (i32.const 1129074247) + ) + ) + (i32.load offset=44 + (get_local $4) + ) + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + ) + (set_local $2 + (i32.load offset=4 + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + ) + (if + (call_indirect $FUNCSIG$iiii + (i32.const 2368) + (get_local $0) + (get_local $6) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (i32.const 2368) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (block + (set_local $7 + (i32.load + (i32.const 9688) + ) + ) + (set_local $0 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.load + (get_local $6) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $3) + (get_local $7) + ) + (i32.store offset=4 + (get_local $3) + (get_local $2) + ) + (i32.store offset=8 + (get_local $3) + (get_local $0) + ) + (call $_abort_message + (i32.const 16632) + (get_local $3) + ) + ) + (block + (i32.store + (get_local $5) + (i32.load + (i32.const 9688) + ) + ) + (i32.store offset=4 + (get_local $5) + (get_local $2) + ) + (call $_abort_message + (i32.const 16677) + (get_local $5) + ) + ) + ) + ) + ) + ) + (call $_abort_message + (i32.const 16756) + (i32.add + (get_local $1) + (i32.const 32) + ) + ) + ) + (func $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8__appendEj (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $4 + (get_local $5) + ) + (if + (i32.lt_u + (i32.shr_s + (i32.sub + (tee_local $6 + (i32.load offset=8 + (get_local $0) + ) + ) + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + ) + (i32.const 2) + ) + (get_local $1) + ) + (block + (if + (i32.gt_u + (tee_local $3 + (i32.add + (tee_local $7 + (i32.shr_s + (i32.sub + (get_local $3) + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 2) + ) + ) + (get_local $1) + ) + ) + (i32.const 1073741823) + ) + (call $__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (if + (i32.lt_u + (i32.shr_s + (tee_local $2 + (i32.sub + (get_local $6) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 536870911) + ) + (if + (i32.ge_u + (tee_local $2 + (i32.shr_s + (get_local $2) + (i32.const 1) + ) + ) + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + ) + (set_local $3 + (i32.const 1073741823) + ) + ) + (call $__ZNSt3__214__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEEC2EjjS6_ + (get_local $4) + (get_local $3) + (get_local $7) + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (drop + (call $_memset + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.const 0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (call $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE + (get_local $0) + (get_local $4) + ) + (call $__ZNSt3__214__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEED2Ev + (get_local $4) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.store + (get_local $2) + (tee_local $3 + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + ) + (br_if $do-in + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + ) + (func $_mbtowc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $3 + (get_local $5) + ) + (set_local $0 + (block $label$break$L1 i32 + (if i32 + (get_local $1) + (block i32 + (block $do-once + (if + (get_local $2) + (block + (if + (i32.eqz + (get_local $0) + ) + (set_local $0 + (get_local $3) + ) + ) + (set_local $4 + (i32.and + (tee_local $3 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const 255) + ) + ) + (if + (i32.gt_s + (get_local $3) + (i32.const -1) + ) + (block + (i32.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1 + (i32.ne + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + (if + (i32.le_u + (tee_local $3 + (i32.add + (get_local $4) + (i32.const -194) + ) + ) + (i32.const 50) + ) + (block + (set_local $3 + (i32.load + (i32.add + (i32.shl + (get_local $3) + (i32.const 2) + ) + (i32.const 2496) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 4) + ) + (br_if $do-once + (i32.and + (get_local $3) + (i32.shr_u + (i32.const -2147483648) + (i32.add + (i32.mul + (get_local $2) + (i32.const 6) + ) + (i32.const -6) + ) + ) + ) + ) + ) + (if + (i32.le_u + (i32.or + (i32.add + (tee_local $4 + (i32.shr_u + (tee_local $2 + (i32.load8_u offset=1 + (get_local $1) + ) + ) + (i32.const 3) + ) + ) + (i32.const -16) + ) + (i32.add + (get_local $4) + (i32.shr_s + (get_local $3) + (i32.const 26) + ) + ) + ) + (i32.const 7) + ) + (block + (if + (i32.ge_s + (tee_local $2 + (i32.or + (i32.add + (get_local $2) + (i32.const -128) + ) + (i32.shl + (get_local $3) + (i32.const 6) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (br $label$break$L1 + (i32.const 2) + ) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $3 + (i32.load8_u offset=2 + (get_local $1) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (if + (i32.ge_s + (tee_local $2 + (i32.or + (i32.add + (get_local $3) + (i32.const -128) + ) + (i32.shl + (get_local $2) + (i32.const 6) + ) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (br $label$break$L1 + (i32.const 3) + ) + ) + ) + (if + (i32.eq + (i32.and + (tee_local $1 + (i32.load8_u offset=3 + (get_local $1) + ) + ) + (i32.const 192) + ) + (i32.const 128) + ) + (block + (i32.store + (get_local $0) + (i32.or + (i32.add + (get_local $1) + (i32.const -128) + ) + (i32.shl + (get_local $2) + (i32.const 6) + ) + ) + ) + (br $label$break$L1 + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8ios_baseEcPK2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (i32.store + (tee_local $3 + (get_local $7) + ) + (i32.add + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (i32.const 100) + ) + ) + (call $__ZNKSt3__210__time_put8__do_putEPcRS1_PK2tmcc + (i32.add + (get_local $0) + (i32.const 8) + ) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + ) + (set_local $3 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $2) + (get_local $3) + ) + (block + (set_local $5 + (i32.load8_s + (get_local $2) + ) + ) + (if + (get_local $0) + (if + (i32.eq + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + ) + (i32.load offset=28 + (get_local $0) + ) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $0) + (i32.and + (get_local $5) + (i32.const 255) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + (set_local $0 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $1) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $4) + (get_local $5) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_ (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $4 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (tee_local $8 + (i32.add + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $5 + (i32.add + (i32.and + (i32.load + (get_local $3) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (block i32 + (set_local $5 + (i32.const 1) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + ) + (if + (tee_local $7 + (i32.shr_s + (i32.sub + (get_local $2) + (tee_local $3 + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $5) + (get_local $4) + ) + (get_local $7) + ) + (block + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEjjjjjj + (get_local $0) + (get_local $5) + (i32.sub + (i32.add + (get_local $4) + (get_local $7) + ) + (get_local $5) + ) + (get_local $4) + (get_local $4) + (i32.const 0) + (i32.const 0) + ) + (set_local $6 + (i32.load8_s + (get_local $8) + ) + ) + ) + ) + (set_local $9 + (i32.add + (get_local $4) + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 2) + ) + ) + ) + (set_local $3 + (i32.add + (tee_local $6 + (if i32 + (tee_local $5 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $6) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store + (get_local $3) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (i32.add + (get_local $6) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $4) + (get_local $7) + ) + ) + (if + (get_local $5) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (i32.store8 + (get_local $8) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr38__libcpp_string_gets_noexcept_iteratorIS9_EE5valueERS5_E4typeES9_S9_ (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $3 + (if i32 + (i32.lt_s + (tee_local $5 + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $4 + (i32.add + (i32.and + (i32.load offset=8 + (get_local $0) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (block i32 + (set_local $4 + (i32.const 10) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $2) + (tee_local $6 + (get_local $1) + ) + ) + ) + (if + (i32.ne + (get_local $2) + (get_local $1) + ) + (block + (if + (i32.lt_u + (i32.sub + (get_local $4) + (get_local $3) + ) + (get_local $8) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj + (get_local $0) + (get_local $4) + (i32.sub + (i32.add + (get_local $3) + (get_local $8) + ) + (get_local $4) + ) + (get_local $3) + (get_local $3) + (i32.const 0) + (i32.const 0) + ) + (set_local $5 + (i32.load8_s + (get_local $7) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $2) + (i32.sub + (get_local $3) + (get_local $6) + ) + ) + ) + (set_local $6 + (i32.add + (tee_local $5 + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $5) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store8 + (get_local $6) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (get_local $4) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $3) + (get_local $8) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (get_local $7) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (i32.store8 + (get_local $7) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEjjjjjjPKc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) + (local $8 i32) + (local $9 i32) + (if + (i32.lt_u + (i32.sub + (i32.const -18) + (get_local $1) + ) + (get_local $2) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (set_local $8 + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (set_local $2 + (call $__Znwj + (tee_local $9 + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 2147483623) + ) + (if i32 + (i32.lt_u + (if i32 + (i32.lt_u + (tee_local $9 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + (tee_local $2 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $9) + ) + ) + (i32.const 11) + ) + (i32.const 11) + (i32.and + (i32.add + (get_local $2) + (i32.const 16) + ) + (i32.const -16) + ) + ) + (i32.const -17) + ) + ) + ) + ) + (if + (get_local $4) + (drop + (call $_memcpy + (get_local $2) + (get_local $8) + (get_local $4) + ) + ) + ) + (if + (get_local $6) + (drop + (call $_memcpy + (i32.add + (get_local $2) + (get_local $4) + ) + (get_local $7) + (get_local $6) + ) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (get_local $4) + ) + (drop + (call $_memcpy + (i32.add + (i32.add + (get_local $2) + (get_local $4) + ) + (get_local $6) + ) + (i32.add + (i32.add + (get_local $8) + (get_local $4) + ) + (get_local $5) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (i32.const 10) + ) + (call $__ZdlPv + (get_local $8) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $9) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (tee_local $0 + (i32.add + (get_local $3) + (get_local $6) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $2) + (get_local $0) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEjjjjjj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (if + (i32.lt_u + (i32.sub + (i32.const 1073741807) + (get_local $1) + ) + (get_local $2) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (set_local $8 + (if i32 + (i32.lt_s + (i32.load8_s offset=3 + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 536870887) + ) + (if + (i32.lt_u + (if i32 + (i32.lt_u + (tee_local $10 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + (tee_local $2 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $10) + ) + ) + (i32.const 2) + ) + (set_local $7 + (i32.const 2) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.and + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.const -4) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + (set_local $7 + (get_local $2) + ) + ) + ) + (set_local $7 + (i32.const 1073741807) + ) + ) + (set_local $2 + (call $__Znwj + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + (if + (get_local $4) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $2) + (get_local $8) + (get_local $4) + ) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (get_local $4) + ) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (i32.add + (i32.add + (get_local $2) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + (i32.add + (i32.add + (get_local $8) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (i32.const 1) + ) + (call $__ZdlPv + (get_local $8) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $9) + (i32.or + (get_local $7) + (i32.const -2147483648) + ) + ) + ) + (func $__ZNKSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_RNS_8ios_baseEwPK2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (local $7 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 416) + ) + ) + (i32.store + (tee_local $3 + (get_local $7) + ) + (i32.add + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 8) + ) + ) + (i32.const 400) + ) + ) + (call $__ZNKSt3__210__time_put8__do_putEPwRS1_PK2tmcc + (i32.add + (get_local $0) + (i32.const 8) + ) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + ) + (set_local $4 + (i32.load + (get_local $3) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $2) + (get_local $4) + ) + (block + (set_local $1 + (i32.load + (get_local $2) + ) + ) + (if + (get_local $0) + (block + (if + (i32.eq + (tee_local $5 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + ) + ) + (i32.load offset=28 + (get_local $0) + ) + ) + (set_local $1 + (call_indirect $FUNCSIG$iii + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (i32.store + (get_local $5) + (get_local $1) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const -1) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + (get_local $0) + ) + (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect $FUNCSIG$iiii + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (br $label$break$L5) + ) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect $FUNCSIG$iiii + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (get_local $3) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=11 + (tee_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (set_local $10 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=23 + (get_local $6) + ) + ) + (i32.const 0) + ) + (i32.load offset=16 + (get_local $6) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $0 + (get_local $7) + ) + (block $do-once + (if + (i32.eq + (get_local $9) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $3) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $0) + ) + ) + (if + (i32.and + (i32.eq + (tee_local $2 + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $8) + (get_local $6) + (i32.add + (get_local $6) + (i32.const 24) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + ) + (get_local $6) + ) + (i32.eq + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $do-once) + ) + ) + (if + (i32.and + (i32.lt_s + (get_local $0) + (i32.const 12) + ) + (i32.eq + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 12) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_am_pmERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=11 + (tee_local $6 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.load offset=4 + (get_local $6) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (set_local $10 + (if i32 + (i32.lt_s + (tee_local $0 + (i32.load8_s offset=23 + (get_local $6) + ) + ) + (i32.const 0) + ) + (i32.load offset=16 + (get_local $6) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (set_local $8 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (set_local $0 + (get_local $7) + ) + (block $do-once + (if + (i32.eq + (get_local $9) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + (i32.store + (get_local $4) + (i32.or + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $3) + ) + ) + (i32.store + (get_local $8) + (i32.load + (get_local $0) + ) + ) + (if + (i32.and + (i32.eq + (tee_local $2 + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $8) + (get_local $6) + (i32.add + (get_local $6) + (i32.const 24) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + ) + (get_local $6) + ) + (i32.eq + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (i32.const 12) + ) + ) + (block + (i32.store + (get_local $1) + (i32.const 0) + ) + (br $do-once) + ) + ) + (if + (i32.and + (i32.lt_s + (get_local $0) + (i32.const 12) + ) + (i32.eq + (i32.sub + (get_local $2) + (get_local $6) + ) + (i32.const 12) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $___shgetc (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $__rjto$2 + (block $__rjti$2 + (if + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 104) + ) + ) + ) + ) + (br_if $__rjti$2 + (i32.ge_s + (i32.load offset=108 + (get_local $0) + ) + (get_local $2) + ) + ) + ) + (br_if $__rjti$2 + (i32.lt_s + (tee_local $2 + (call $___uflow + (get_local $0) + ) + ) + (i32.const 0) + ) + ) + (set_local $1 + (i32.load offset=8 + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (tee_local $4 + (i32.load + (get_local $3) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (br_if $__rjti$0 + (i32.lt_s + (i32.sub + (get_local $1) + (tee_local $5 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + (tee_local $4 + (i32.sub + (get_local $4) + (i32.load offset=108 + (get_local $0) + ) + ) + ) + ) + ) + (i32.store offset=100 + (get_local $0) + (i32.add + (get_local $5) + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (i32.store offset=100 + (get_local $0) + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (if + (get_local $3) + (i32.store + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (i32.add + (i32.sub + (i32.add + (get_local $3) + (i32.const 1) + ) + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (i32.load + (get_local $4) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $1) + ) + ) + ) + (if + (i32.ne + (i32.load8_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (get_local $2) + ) + (i32.store8 + (get_local $0) + (get_local $2) + ) + ) + (br $__rjto$2) + ) + (i32.store offset=100 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (i32.const -1) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__225__num_get_signed_integralIlEET_PKcS3_Rji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (get_local $6) + ) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.load + (tee_local $5 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (set_local $0 + (call $_strtoll_l + (get_local $0) + (get_local $7) + (get_local $3) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $4) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (block $label$break$L7 + (set_local $0 + (if i32 + (i32.eq + (i32.load + (get_local $7) + ) + (get_local $1) + ) + (block i32 + (block $do-once + (if + (i32.eq + (get_local $3) + (i32.const 34) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (if + (i32.or + (i32.gt_s + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.gt_u + (get_local $0) + (i32.const 0) + ) + ) + ) + (block + (set_local $0 + (i32.const 2147483647) + ) + (br $label$break$L7) + ) + ) + ) + (block + (if + (i32.or + (i32.lt_s + (get_local $4) + (i32.const -1) + ) + (i32.and + (i32.eq + (get_local $4) + (i32.const -1) + ) + (i32.lt_u + (get_local $0) + (i32.const -2147483648) + ) + ) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (br $do-once) + ) + ) + (br_if $label$break$L7 + (i32.eqz + (i32.or + (i32.gt_s + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.gt_u + (get_local $0) + (i32.const 2147483647) + ) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 2147483647) + ) + (br $label$break$L7) + ) + ) + ) + (i32.const -2147483648) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $_vsnprintf (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 128) + ) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 112) + ) + ) + (set_local $7 + (i32.const 3052) + ) + (set_local $9 + (i32.add + (tee_local $8 + (tee_local $5 + (get_local $6) + ) + ) + (i32.const 112) + ) + ) + (loop $do-in + (i32.store + (get_local $8) + (i32.load + (get_local $7) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $do-in + (i32.lt_s + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (i32.gt_u + (i32.add + (get_local $1) + (i32.const -1) + ) + (i32.const 2147483646) + ) + (if + (get_local $1) + (block + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (set_local $0 + (i32.const -1) + ) + ) + (block + (set_local $0 + (get_local $4) + ) + (set_local $4 + (i32.const 1) + ) + (br $__rjti$0) + ) + ) + (block + (set_local $4 + (get_local $1) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (i32.store offset=48 + (get_local $5) + (if i32 + (i32.gt_u + (get_local $4) + (tee_local $1 + (i32.sub + (i32.const -2) + (get_local $0) + ) + ) + ) + (get_local $1) + (tee_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + (get_local $0) + ) + (i32.store offset=44 + (get_local $5) + (get_local $0) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + (tee_local $0 + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ) + (i32.store offset=28 + (get_local $5) + (get_local $0) + ) + (set_local $0 + (call $_vfprintf + (get_local $5) + (get_local $2) + (get_local $3) + ) + ) + (if + (get_local $1) + (i32.store8 + (i32.add + (tee_local $1 + (i32.load + (get_local $9) + ) + ) + (i32.shr_s + (i32.shl + (i32.eq + (get_local $1) + (i32.load + (get_local $4) + ) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (local $7 i32) + (local $8 i32) + (if + (i32.lt_u + (i32.sub + (i32.const -17) + (get_local $1) + ) + (get_local $2) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (set_local $8 + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $0) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (set_local $7 + (call $__Znwj + (tee_local $2 + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 2147483623) + ) + (if i32 + (i32.lt_u + (if i32 + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + (tee_local $2 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $7) + ) + ) + (i32.const 11) + ) + (i32.const 11) + (i32.and + (i32.add + (get_local $2) + (i32.const 16) + ) + (i32.const -16) + ) + ) + (i32.const -17) + ) + ) + ) + ) + (if + (get_local $4) + (drop + (call $_memcpy + (get_local $7) + (get_local $8) + (get_local $4) + ) + ) + ) + (if + (i32.ne + (tee_local $3 + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (get_local $4) + ) + (drop + (call $_memcpy + (i32.add + (i32.add + (get_local $7) + (get_local $4) + ) + (get_local $6) + ) + (i32.add + (i32.add + (get_local $8) + (get_local $4) + ) + (get_local $5) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + ) + ) + ) + (if + (i32.ne + (get_local $1) + (i32.const 10) + ) + (call $__ZdlPv + (get_local $8) + ) + ) + (i32.store + (get_local $0) + (get_local $7) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $2) + (i32.const -2147483648) + ) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $10 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $8 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (set_local $2 + (i32.add + (tee_local $1 + (if i32 + (tee_local $2 + (i32.lt_s + (tee_local $12 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (i32.shl + (if i32 + (get_local $2) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $11) + ) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $10) + (get_local $9) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_dateES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $10 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $8) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $8 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (set_local $2 + (i32.add + (tee_local $1 + (if i32 + (tee_local $2 + (i32.lt_s + (tee_local $12 + (i32.load8_s offset=11 + (get_local $7) + ) + ) + (i32.const 0) + ) + ) + (i32.load + (get_local $7) + ) + (get_local $7) + ) + ) + (if i32 + (get_local $2) + (i32.load offset=4 + (get_local $7) + ) + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $11) + ) + ) + (i32.store + (get_local $9) + (i32.load + (get_local $8) + ) + ) + (set_local $0 + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $10) + (get_local $9) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (i32.store8 offset=53 + (get_local $1) + (i32.const 1) + ) + (block $do-once + (if + (i32.eq + (i32.load offset=4 + (get_local $1) + ) + (get_local $3) + ) + (block + (i32.store8 offset=52 + (get_local $1) + (i32.const 1) + ) + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=24 + (get_local $1) + (get_local $4) + ) + (i32.store offset=36 + (get_local $1) + (i32.const 1) + ) + (br_if $do-once + (i32.eqz + (if i32 + (i32.eq + (get_local $4) + (i32.const 1) + ) + (i32.eq + (i32.load offset=48 + (get_local $1) + ) + (i32.const 1) + ) + (i32.const 0) + ) + ) + ) + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + (br $do-once) + ) + ) + (if + (i32.ne + (get_local $3) + (get_local $2) + ) + (block + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 36) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + ) + ) + (i32.const 2) + ) + (i32.store + (get_local $2) + (get_local $4) + ) + (set_local $4 + (get_local $0) + ) + ) + (if + (if i32 + (i32.eq + (get_local $4) + (i32.const 1) + ) + (i32.eq + (i32.load offset=48 + (get_local $1) + ) + (i32.const 1) + ) + (i32.const 0) + ) + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (func $___cxx_global_array_dtor_46 (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20248) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20236) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20224) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20212) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20200) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20188) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20176) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20164) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20152) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20140) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20128) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20116) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20104) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 20092) + ) + ) + (func $___cxx_global_array_dtor (param $0 i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19436) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19424) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19412) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19400) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19388) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19376) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19364) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19352) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19340) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19328) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19316) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19304) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19292) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.const 19280) + ) + ) + (func $__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (block $do-once + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (if + (i32.eq + (i32.load offset=4 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 28) + ) + ) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + ) + ) + (if + (i32.eq + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (block + (if + (i32.ne + (i32.load offset=16 + (get_local $1) + ) + (get_local $2) + ) + (if + (i32.ne + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + (get_local $2) + ) + (block + (i32.store offset=32 + (get_local $1) + (get_local $3) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 40) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (if + (i32.eq + (i32.load offset=36 + (get_local $1) + ) + (i32.const 1) + ) + (if + (i32.eq + (i32.load offset=24 + (get_local $1) + ) + (i32.const 2) + ) + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.store offset=44 + (get_local $1) + (i32.const 4) + ) + (br $do-once) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.const 1) + ) + (i32.store offset=32 + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + ) + ) + (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $___uremdi3 + (get_local $0) + (get_local $3) + (i32.const 10) + (i32.const 0) + ) + (i32.const 48) + ) + ) + (set_local $1 + (call $___udivdi3 + (get_local $0) + (get_local $3) + (i32.const 10) + (i32.const 0) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $3) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $3) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (set_local $3 + (get_global $tempRet0) + ) + (br $while-in) + ) + (set_local $0 + (get_local $1) + ) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (i32.rem_u + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (i32.div_u + (get_local $0) + (i32.const 10) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_ (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.gt_u + (tee_local $3 + (i32.shr_s + (i32.sub + (get_local $2) + (tee_local $4 + (get_local $1) + ) + ) + (i32.const 2) + ) + ) + (i32.const 1073741807) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 2) + ) + (block + (i32.store8 offset=11 + (get_local $0) + (get_local $3) + ) + (set_local $5 + (get_local $0) + ) + ) + (if + (i32.gt_u + (tee_local $6 + (i32.and + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.const -4) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + (block + (i32.store + (get_local $0) + (tee_local $5 + (call $__Znwj + (i32.shl + (get_local $6) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $6) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + ) + ) + ) + (set_local $4 + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $4) + ) + (i32.const 2) + ) + ) + (set_local $0 + (get_local $5) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store + (i32.add + (get_local $5) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__227__num_get_unsigned_integralIyEET_PKcS3_Rji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_global $tempRet0 + (tee_local $1 + (block $do-once i32 + (if i32 + (i32.eq + (get_local $0) + (get_local $1) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (if + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const 45) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + (set_local $7 + (i32.load + (tee_local $4 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (call $_strtoull_l + (get_local $0) + (get_local $6) + (get_local $3) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $4) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + ) + (set_local $3 + (get_global $tempRet0) + ) + (if i32 + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $1) + ) + (if i32 + (i32.eq + (get_local $8) + (i32.const 34) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const -1) + ) + (i32.const -1) + ) + (get_local $3) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNSt3__29__num_getIwE19__stage2_float_prepERNS_8ios_baseEPwRwS5_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $5) + ) + (tee_local $7 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19240) + ) + ) + (i32.const 13937) + (i32.const 13969) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $1) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $3) + (call_indirect $FUNCSIG$ii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19248) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $7) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + ) + (func $__ZNSt3__29__num_getIcE19__stage2_float_prepERNS_8ios_baseEPcRcS5_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $5) + ) + (tee_local $7 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19208) + ) + ) + (i32.const 13937) + (i32.const 13969) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store8 + (get_local $3) + (call_indirect $FUNCSIG$ii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $6) + (i32.const 19220) + ) + ) + (i32.add + (i32.and + (i32.load offset=12 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 + (get_local $4) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $7) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + ) + (func $_fflush (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (get_local $2) + (get_local $1) + (block i32 + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if i32 + (i32.load + (i32.const 3048) + ) + (call $_fflush + (i32.load + (i32.const 3048) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 17628) + ) + (if + (tee_local $1 + (i32.load + (i32.const 17624) + ) + ) + (loop $while-in + (set_local $2 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 17628) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__227__num_get_unsigned_integralItEET_PKcS3_Rji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_local $0 + (block $do-once i32 + (if i32 + (i32.eq + (get_local $0) + (get_local $1) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (i32.const 0) + ) + (block i32 + (if + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const 45) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + (set_local $7 + (i32.load + (tee_local $4 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (call $_strtoull_l + (get_local $0) + (get_local $6) + (get_local $3) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $4) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + ) + (set_local $3 + (get_global $tempRet0) + ) + (if i32 + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $1) + ) + (if i32 + (i32.or + (i32.or + (i32.gt_u + (get_local $3) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $3) + ) + (i32.gt_u + (get_local $0) + (i32.const 65535) + ) + ) + ) + (i32.eq + (get_local $8) + (i32.const 34) + ) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (i32.const -1) + ) + (i32.and + (get_local $0) + (i32.const 65535) + ) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNSt3__227__num_get_unsigned_integralImEET_PKcS3_Rji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (get_local $6) + ) + (block $do-once + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + ) + (block + (if + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const 45) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (br $do-once) + ) + ) + (set_local $4 + (i32.load + (tee_local $5 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (set_local $0 + (call $_strtoull_l + (get_local $0) + (get_local $7) + (get_local $3) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $4) + ) + ) + (set_local $4 + (get_global $tempRet0) + ) + (if + (i32.eq + (i32.load + (get_local $7) + ) + (get_local $1) + ) + (if + (i32.or + (i32.or + (i32.gt_u + (get_local $4) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $4) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (i32.eq + (get_local $3) + (i32.const 34) + ) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const -1) + ) + ) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNSt3__225__num_get_signed_integralIxEET_PKcS3_Rji (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $6 + (get_local $5) + ) + (set_global $tempRet0 + (tee_local $1 + (if i32 + (i32.eq + (get_local $0) + (get_local $1) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $7 + (i32.load + (tee_local $4 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $0 + (call $_strtoll_l + (get_local $0) + (get_local $6) + (get_local $3) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $8 + (i32.load + (get_local $4) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + ) + (set_local $3 + (get_global $tempRet0) + ) + (if i32 + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $1) + ) + (if i32 + (i32.eq + (get_local $8) + (i32.const 34) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (if i32 + (tee_local $1 + (i32.or + (i32.gt_s + (get_local $3) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $3) + ) + (i32.gt_u + (get_local $0) + (i32.const 0) + ) + ) + ) + ) + (i32.const -1) + (i32.const 0) + ) + ) + (if i32 + (get_local $1) + (i32.const 2147483647) + (i32.const -2147483648) + ) + ) + (get_local $3) + ) + (block i32 + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $0 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNSt3__214__num_put_base12__format_intEPcPKcbj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (if + (i32.and + (get_local $3) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 43) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.and + (get_local $3) + (i32.const 512) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 35) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (loop $while-in + (if + (tee_local $4 + (i32.load8_s + (get_local $1) + ) + ) + (block + (i32.store8 + (get_local $0) + (get_local $4) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (block $label$break$L10 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.and + (get_local $3) + (i32.const 74) + ) + (i32.const 8) + ) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 111) + ) + (br $label$break$L10) + ) + (if + (i32.and + (get_local $3) + (i32.const 16384) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 88) + ) + (br $label$break$L10) + ) + (block + (i32.store8 + (get_local $0) + (i32.const 120) + ) + (br $label$break$L10) + ) + ) + ) + (if + (get_local $2) + (i32.store8 + (get_local $0) + (i32.const 100) + ) + (i32.store8 + (get_local $0) + (i32.const 117) + ) + ) + ) + ) + (func $__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (set_local $3 + (get_local $5) + ) + (set_local $0 + (if i32 + (i32.eq + (get_local $0) + (get_local $1) + ) + (i32.const 1) + (if i32 + (get_local $1) + (if i32 + (tee_local $4 + (call $___dynamic_cast + (get_local $1) + (i32.const 2408) + (i32.const 2376) + (i32.const 0) + ) + ) + (block i32 + (set_local $6 + (i32.add + (tee_local $1 + (get_local $3) + ) + (i32.const 56) + ) + ) + (loop $do-in + (i32.store + (get_local $1) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (get_local $6) + ) + ) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (i32.store offset=8 + (get_local $3) + (get_local $0) + ) + (i32.store offset=12 + (get_local $3) + (i32.const -1) + ) + (i32.store offset=48 + (get_local $3) + (i32.const 1) + ) + (call_indirect $FUNCSIG$viiii + (get_local $4) + (get_local $3) + (i32.load + (get_local $2) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $4) + ) + ) + (i32.const 7) + ) + (i32.const 461) + ) + ) + (if i32 + (i32.eq + (i32.load offset=24 + (get_local $3) + ) + (i32.const 1) + ) + (block i32 + (i32.store + (get_local $2) + (i32.load offset=16 + (get_local $3) + ) + ) + (i32.const 1) + ) + (i32.const 0) + ) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$L1 + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + (block + (set_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (tee_local $4 + (i32.load offset=12 + (get_local $0) + ) + ) + (i32.const 3) + ) + ) + ) + (call $__ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi + (i32.add + (get_local $0) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (get_local $3) + ) + (if + (i32.gt_s + (get_local $4) + (i32.const 1) + ) + (block + (set_local $4 + (i32.add + (get_local $1) + (i32.const 54) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (loop $do-in + (call $__ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + (br_if $label$break$L1 + (i32.load8_s + (get_local $4) + ) + ) + (br_if $do-in + (i32.lt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $5) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $2 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (tee_local $4 + (i32.add + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (block i32 + (set_local $3 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.add + (i32.and + (i32.load + (get_local $2) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (block i32 + (set_local $3 + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.const 1) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (block + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEjjjjjj + (get_local $0) + (get_local $2) + (i32.const 1) + (get_local $2) + (get_local $2) + (i32.const 0) + (i32.const 0) + ) + (br_if $__rjti$1 + (i32.lt_s + (i32.load8_s + (get_local $4) + ) + (i32.const 0) + ) + ) + ) + (br_if $__rjti$1 + (get_local $5) + ) + ) + (i32.store8 + (get_local $4) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $__rjto$1) + ) + (set_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $2) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $0) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + ) + (func $_strlen (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (i32.and + (tee_local $2 + (get_local $0) + ) + (i32.const 3) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $__rjto$0) + ) + ) + (br_if $while-in + (i32.and + (tee_local $1 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + (br $__rjto$0) + ) + (loop $while-in1 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (loop $while-in3 + (br_if $while-in3 + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (call $_uselocale + (i32.load offset=8 + (get_local $0) + ) + ) + ) + (set_local $1 + (call $_wcrtomb + (tee_local $0 + (get_local $5) + ) + (i32.const 0) + (get_local $1) + ) + ) + (if + (get_local $2) + (drop + (call $_uselocale + (get_local $2) + ) + ) + ) + (block $label$break$L4 + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-case $switch-default + (i32.sub + (get_local $1) + (i32.const -1) + ) + ) + ) + (set_local $0 + (i32.const 2) + ) + (br $label$break$L4) + ) + (if + (i32.gt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (i32.load + (get_local $4) + ) + ) + ) + (set_local $0 + (i32.const 1) + ) + (loop $while-in + (if + (get_local $1) + (block + (set_local $2 + (i32.load8_s + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $3) + (get_local $2) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $label$break$L4) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $3 + (i32.add + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.shl + (i32.sub + (i32.const 0) + (i32.shr_s + (tee_local $6 + (i32.sub + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $3) + ) + (set_local $2 + (if i32 + (i32.gt_s + (get_local $6) + (i32.const 0) + ) + (block i32 + (drop + (call $_memcpy + (get_local $3) + (get_local $4) + (get_local $6) + ) + ) + (set_local $4 + (get_local $2) + ) + (i32.load + (get_local $2) + ) + ) + (block i32 + (set_local $4 + (get_local $2) + ) + (get_local $3) + ) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (set_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $5) + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (get_local $3) + ) + (set_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store + (get_local $1) + (i32.load + (get_local $4) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKci (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (set_local $8 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (br_if $while-out + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (if + (i32.ge_u + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (tee_local $7 + (i32.load + (get_local $8) + ) + ) + ) + (block + (br_if $while-out + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $0) + (i32.load8_u + (get_local $3) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (if + (if i32 + (i32.lt_s + (tee_local $4 + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (tee_local $7 + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + ) + (get_local $4) + (tee_local $4 + (get_local $7) + ) + ) + (block + (drop + (call $_memcpy + (get_local $5) + (get_local $3) + (get_local $4) + ) + ) + (set_local $5 + (i32.load + (get_local $6) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $5) + (get_local $4) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + (set_local $1 + (i32.add + (get_local $4) + (get_local $1) + ) + ) + (br $while-in) + ) + ) + (get_local $1) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $3 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $2 + (i32.load8_s + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (block i32 + (set_local $2 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (get_local $0) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (block i32 + (set_local $2 + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (i32.const 10) + ) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj + (get_local $0) + (get_local $3) + (i32.const 1) + (get_local $3) + (get_local $3) + (i32.const 0) + (i32.const 0) + ) + (br_if $__rjti$1 + (i32.lt_s + (i32.load8_s + (get_local $4) + ) + (i32.const 0) + ) + ) + ) + (br_if $__rjti$1 + (get_local $5) + ) + ) + (i32.store8 + (get_local $4) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $__rjto$1) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $3) + ) + ) + (i32.store8 + (tee_local $0 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $1) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.const 0) + ) + ) + (func $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE3putEc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_ + (tee_local $4 + (get_local $3) + ) + (get_local $0) + ) + (block $label$break$L1 + (if + (i32.load8_s + (get_local $4) + ) + (block + (set_local $2 + (tee_local $5 + (i32.load offset=24 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + ) + (if + (get_local $5) + (if + (i32.eq + (tee_local $6 + (i32.load + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 24) + ) + ) + ) + ) + (i32.load offset=28 + (get_local $2) + ) + ) + (br_if $label$break$L1 + (i32.ne + (call_indirect $FUNCSIG$iii + (get_local $2) + (i32.and + (get_local $1) + (i32.const 255) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $5) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + ) + (block + (i32.store + (get_local $7) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $6) + (get_local $1) + ) + (br $label$break$L1) + ) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.or + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $4) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE9do_lengthERS1_PKcS5_j (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $8 + (get_local $3) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $0 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (br_if $label$break$L1 + (i32.or + (i32.eq + (get_local $2) + (get_local $3) + ) + (i32.ge_u + (get_local $6) + (get_local $4) + ) + ) + ) + (set_local $7 + (call $_uselocale + (i32.load + (get_local $9) + ) + ) + ) + (set_local $5 + (call $_mbrlen + (get_local $2) + (i32.sub + (get_local $8) + (get_local $2) + ) + (get_local $1) + ) + ) + (if + (get_local $7) + (drop + (call $_uselocale + (get_local $7) + ) + ) + ) + (set_local $2 + (block $switch i32 + (block $switch-default + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case $switch-case1 $switch-default + (i32.sub + (get_local $5) + (i32.const -2) + ) + ) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.const 1) + ) + (br $switch + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.add + (get_local $2) + (get_local $5) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $5) + (get_local $0) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br $label$continue$L1) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6xsputnEPKwi (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.lt_u + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (tee_local $8 + (i32.load + (get_local $7) + ) + ) + ) + (block + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $5) + (get_local $3) + (if i32 + (i32.lt_s + (tee_local $4 + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (tee_local $5 + (i32.shr_s + (i32.sub + (get_local $8) + (get_local $5) + ) + (i32.const 2) + ) + ) + ) + (get_local $4) + (tee_local $4 + (get_local $5) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $4) + (get_local $1) + ) + ) + (br $while-in) + ) + ) + (if + (i32.ne + (call_indirect $FUNCSIG$iii + (get_local $0) + (i32.load + (get_local $3) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (get_local $1) + ) + (func $__ZNSt3__211__stdoutbufIwE4syncEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $7 + (i32.add + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 8) + ) + ) + (set_local $8 + (get_local $2) + ) + (set_local $4 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $9 + (call_indirect $FUNCSIG$iiiiii + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.load + (get_local $6) + ) + (get_local $2) + (get_local $7) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $0) + ) + ) + (i32.const 31) + ) + (i32.const 429) + ) + ) + ) + (if + (i32.ne + (call $_fwrite + (get_local $2) + (i32.const 1) + (tee_local $0 + (i32.sub + (i32.load + (get_local $3) + ) + (get_local $8) + ) + ) + (i32.load + (get_local $4) + ) + ) + (get_local $0) + ) + (block + (set_local $0 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-case0 $switch-default + (i32.sub + (get_local $9) + (i32.const 1) + ) + ) + ) + (br $switch) + ) + (set_local $0 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$0) + ) + (br $label$continue$L1) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.shr_s + (i32.shl + (i32.ne + (call $_fflush + (i32.load + (get_local $4) + ) + ) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_ (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.gt_u + (tee_local $4 + (i32.sub + (get_local $2) + (tee_local $3 + (get_local $1) + ) + ) + ) + (i32.const -17) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 11) + ) + (i32.store8 offset=11 + (get_local $0) + (get_local $4) + ) + (block + (i32.store + (get_local $0) + (tee_local $5 + (call $__Znwj + (tee_local $6 + (i32.and + (i32.add + (get_local $4) + (i32.const 16) + ) + (i32.const -16) + ) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $6) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $4) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + (set_local $5 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (set_local $3 + (get_local $0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store8 + (get_local $3) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $0) + (get_local $5) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEjc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (get_local $1) + (block + (set_local $3 + (if i32 + (i32.lt_s + (tee_local $4 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $5 + (i32.add + (i32.and + (i32.load offset=8 + (get_local $0) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + ) + (i32.load offset=4 + (get_local $0) + ) + ) + (block i32 + (set_local $5 + (i32.const 10) + ) + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + ) + (if + (i32.lt_u + (i32.sub + (get_local $5) + (get_local $3) + ) + (get_local $1) + ) + (block + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj + (get_local $0) + (get_local $5) + (i32.add + (i32.sub + (get_local $1) + (get_local $5) + ) + (get_local $3) + ) + (get_local $3) + (get_local $3) + (i32.const 0) + (i32.const 0) + ) + (set_local $4 + (i32.load8_s + (get_local $6) + ) + ) + ) + ) + (drop + (call $_memset + (i32.add + (tee_local $4 + (if i32 + (i32.lt_s + (i32.shr_s + (i32.shl + (get_local $4) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 0) + ) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (get_local $3) + ) + (get_local $2) + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + (if + (i32.lt_s + (i32.load8_s + (get_local $6) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (i32.store8 + (get_local $6) + (get_local $1) + ) + ) + (i32.store8 + (i32.add + (get_local $4) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + (get_local $0) + ) + (func $_pad (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (set_local $5 + (get_local $6) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $5) + (get_local $1) + (if i32 + (i32.gt_u + (tee_local $1 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.const 256) + ) + (i32.const 256) + (get_local $1) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $1) + (i32.const 255) + ) + (block + (set_local $7 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $5) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $1 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $1) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.lt_u + (tee_local $3 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (tee_local $4 + (i32.add + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.add + (i32.and + (i32.load + (get_local $3) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 1) + ) + ) + (get_local $2) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE21__grow_by_and_replaceEjjjjjjPKw + (get_local $0) + (get_local $3) + (i32.sub + (get_local $2) + (get_local $3) + ) + (tee_local $4 + (if i32 + (get_local $5) + (i32.load offset=4 + (get_local $0) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + (i32.const 0) + (get_local $4) + (get_local $2) + (get_local $1) + ) + (block + (drop + (call $__ZNSt3__211char_traitsIwE4moveEPwPKwj + (tee_local $3 + (if i32 + (get_local $5) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.add + (get_local $3) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (if + (i32.lt_s + (i32.load8_s + (get_local $4) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + (i32.store8 + (get_local $4) + (get_local $2) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.sub + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $3) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 288) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (i32.const 288) + ) + (i32.store + (get_local $1) + (i32.rem_s + (i32.div_s + (get_local $0) + (i32.const 12) + ) + (i32.const 12) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.sub + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $3) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 288) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (i32.const 288) + ) + (i32.store + (get_local $1) + (i32.rem_s + (i32.div_s + (get_local $0) + (i32.const 12) + ) + (i32.const 12) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE16do_get_monthnameES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__get_monthnameERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 16) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE14do_get_weekdayES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 24) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.sub + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $3) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 168) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (i32.const 168) + ) + (i32.store + (get_local $1) + (i32.rem_s + (i32.div_s + (get_local $0) + (i32.const 12) + ) + (i32.const 7) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__get_weekdaynameERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.and + (i32.load + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.sub + (call $__ZNSt3__214__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb + (get_local $2) + (get_local $3) + (get_local $7) + (i32.add + (get_local $7) + (i32.const 168) + ) + (get_local $5) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (i32.const 168) + ) + (i32.store + (get_local $1) + (i32.rem_s + (i32.div_s + (get_local $0) + (i32.const 12) + ) + (i32.const 7) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19240) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIwEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_yearES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (tee_local $3 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $3) + ) + ) + ) + (set_local $7 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $7) + (i32.const 19208) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $3) + ) + ) + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIcEE + (get_local $0) + (i32.add + (get_local $5) + (i32.const 20) + ) + (get_local $1) + (get_local $2) + (get_local $4) + (get_local $7) + ) + (set_global $STACKTOP + (get_local $6) + ) + (i32.load + (get_local $1) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.lt_u + (tee_local $3 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $6 + (i32.load8_s + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.add + (i32.and + (i32.load offset=8 + (get_local $0) + ) + (i32.const 2147483647) + ) + (i32.const -1) + ) + (i32.const 10) + ) + ) + (get_local $2) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEjjjjjjPKc + (get_local $0) + (get_local $3) + (i32.sub + (get_local $2) + (get_local $3) + ) + (tee_local $4 + (if i32 + (get_local $5) + (i32.load offset=4 + (get_local $0) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + ) + (i32.const 0) + (get_local $4) + (get_local $2) + (get_local $1) + ) + (block + (set_local $3 + (if i32 + (get_local $5) + (i32.load + (get_local $0) + ) + (get_local $0) + ) + ) + (if + (get_local $2) + (drop + (call $_memmove + (get_local $3) + (get_local $1) + (get_local $2) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.const 0) + ) + (if + (i32.lt_s + (i32.load8_s + (get_local $4) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + (i32.store8 + (get_local $4) + (get_local $2) + ) + ) + ) + ) + (get_local $0) + ) + (func $_fputc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (block $do-once + (block $__rjti$1 + (br_if $__rjti$1 + (i32.lt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const 0) + ) + ) + (br_if $__rjti$1 + (i32.eqz + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $1) + ) + ) + ) + (set_local $0 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eq + (i32.load8_s offset=75 + (get_local $1) + ) + (get_local $0) + ) + ) + (br_if $__rjti$0 + (i32.ge_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $0) + ) + (br $__rjto$0 + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + ) + (call $___overflow + (get_local $1) + (get_local $0) + ) + ) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $1) + ) + (br $do-once) + ) + (if + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (get_local $0) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (get_local $0) + ) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (br $do-once) + ) + ) + ) + (set_local $0 + (call $___overflow + (get_local $1) + (get_local $0) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__29__num_getIwE17__stage2_int_prepERNS_8ios_baseEPwRw (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $5 + (get_local $4) + ) + (tee_local $6 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19240) + ) + ) + (i32.const 13937) + (i32.const 13963) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=48 + (i32.load + (get_local $1) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store + (get_local $3) + (call_indirect $FUNCSIG$ii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19248) + ) + ) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $6) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + ) + (func $__ZNSt3__29__num_getIcE17__stage2_int_prepERNS_8ios_baseEPcRc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $5 + (get_local $4) + ) + (tee_local $6 + (call $__ZNKSt3__28ios_base6getlocEv + (get_local $1) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiiii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19208) + ) + ) + (i32.const 13937) + (i32.const 13963) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=32 + (i32.load + (get_local $1) + ) + ) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (i32.store8 + (get_local $3) + (call_indirect $FUNCSIG$ii + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $5) + (i32.const 19220) + ) + ) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 176) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $6) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + ) + (func $__ZNSt3__219__double_or_nothingIwEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.const 107) + ) + ) + (set_local $7 + (if i32 + (tee_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.load + (get_local $2) + ) + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + (i32.const -1) + ) + ) + (get_local $3) + (i32.const 4) + ) + ) + (set_local $8 + (i32.shr_s + (i32.sub + (i32.load + (get_local $1) + ) + (get_local $4) + ) + (i32.const 2) + ) + ) + (set_local $3 + (call $_realloc + (if i32 + (get_local $6) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (if + (get_local $6) + (i32.store + (get_local $0) + (get_local $3) + ) + (block + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (if + (get_local $4) + (block + (call_indirect $FUNCSIG$vi + (get_local $4) + (i32.add + (i32.and + (i32.load + (get_local $5) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.const 108) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.shl + (get_local $8) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $0) + ) + (i32.shl + (i32.shr_u + (get_local $7) + (i32.const 2) + ) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNKSt3__210__time_put8__do_putEPwRS1_PK2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 128) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.add + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (i32.const 100) + ) + ) + (call $__ZNKSt3__210__time_put8__do_putEPcRS1_PK2tmcc + (get_local $0) + (get_local $7) + (get_local $8) + (get_local $3) + (get_local $4) + (get_local $5) + ) + (i32.store + (tee_local $4 + (tee_local $3 + (get_local $6) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $4) + (i32.const 0) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (get_local $7) + ) + (set_local $5 + (i32.shr_s + (i32.sub + (i32.load + (get_local $2) + ) + (get_local $1) + ) + (i32.const 2) + ) + ) + (set_local $0 + (call $_uselocale + (i32.load + (get_local $0) + ) + ) + ) + (set_local $3 + (call $_mbsrtowcs + (get_local $1) + (get_local $4) + (get_local $5) + (get_local $3) + ) + ) + (if + (get_local $0) + (drop + (call $_uselocale + (get_local $0) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNSt3__219__double_or_nothingIcEEvRNS_10unique_ptrIT_PFvPvEEERPS2_S9_ (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.const 107) + ) + ) + (set_local $7 + (if i32 + (tee_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.load + (get_local $2) + ) + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.const 2147483647) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + (i32.const -1) + ) + ) + (get_local $3) + (i32.const 1) + ) + ) + (set_local $8 + (i32.sub + (i32.load + (get_local $1) + ) + (get_local $4) + ) + ) + (set_local $3 + (call $_realloc + (if i32 + (get_local $6) + (get_local $4) + (i32.const 0) + ) + (get_local $7) + ) + ) + (if + (get_local $6) + (i32.store + (get_local $0) + (get_local $3) + ) + (block + (set_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (if + (get_local $4) + (block + (call_indirect $FUNCSIG$vi + (get_local $4) + (i32.add + (i32.and + (i32.load + (get_local $5) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + (set_local $3 + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.const 108) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (get_local $8) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $0) + ) + (get_local $7) + ) + ) + ) + (func $_scalbn (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (if + (i32.gt_s + (get_local $1) + (i32.const 1023) + ) + (block + (set_local $0 + (f64.mul + (get_local $0) + (f64.const 8988465674311579538646525e283) + ) + ) + (if + (i32.gt_s + (tee_local $2 + (i32.add + (get_local $1) + (i32.const -1023) + ) + ) + (i32.const 1023) + ) + (block + (if + (i32.gt_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -2046) + ) + ) + (i32.const 1023) + ) + (set_local $1 + (i32.const 1023) + ) + ) + (set_local $0 + (f64.mul + (get_local $0) + (f64.const 8988465674311579538646525e283) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + ) + (if + (i32.lt_s + (get_local $1) + (i32.const -1022) + ) + (block + (set_local $0 + (f64.mul + (get_local $0) + (f64.const 2.2250738585072014e-308) + ) + ) + (if + (i32.lt_s + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 1022) + ) + ) + (i32.const -1022) + ) + (block + (if + (i32.lt_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 2044) + ) + ) + (i32.const -1022) + ) + (set_local $1 + (i32.const -1022) + ) + ) + (set_local $0 + (f64.mul + (get_local $0) + (f64.const 2.2250738585072014e-308) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + ) + ) + ) + ) + (set_local $1 + (call $_bitshift64Shl + (i32.add + (get_local $1) + (i32.const 1023) + ) + (i32.const 0) + (i32.const 52) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $1) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (get_global $tempRet0) + ) + (f64.mul + (get_local $0) + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (func $_wcrtomb (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once i32 + (if i32 + (get_local $0) + (block i32 + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if i32 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block i32 + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKcSC_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 14411) + (i32.const 14419) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tm (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE3getES4_S4_RNS_8ios_baseERjP2tmPKwSC_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 7304) + (i32.const 7336) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE7__am_pmEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 16984) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16984) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 16992) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16992) + ) + (block + (set_local $0 + (i32.const 19744) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 20032) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 101) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19744) + (i32.const 14674) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc + (i32.const 19756) + (i32.const 14677) + ) + ) + (i32.store + (i32.const 20032) + (i32.const 19744) + ) + ) + ) + ) + (i32.load + (i32.const 20032) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE7__am_pmEv (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17064) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17064) + ) + (block + (if + (i32.eqz + (i32.load8_s + (i32.const 17072) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17072) + ) + (block + (set_local $0 + (i32.const 20556) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (br_if $do-in + (i32.ne + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 20844) + ) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 105) + (i32.const 0) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20556) + (i32.const 8356) + ) + ) + (drop + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw + (i32.const 20568) + (i32.const 8368) + ) + ) + (i32.store + (i32.const 20844) + (i32.const 20556) + ) + ) + ) + ) + (i32.load + (i32.const 20844) + ) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRf (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRf (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIfEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRe (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE23__do_get_floating_pointIeEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (set_local $0 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (block + (if + (i32.lt_s + (get_local $0) + (i32.const 69) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 2000) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $0) + (i32.const -69) + ) + (i32.const 31) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1900) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const -1900) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_yearERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $0 + (get_local $6) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + (set_local $0 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (block + (if + (i32.lt_s + (get_local $0) + (i32.const 69) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 2000) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $0) + (i32.const -69) + ) + (i32.const 31) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1900) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const -1900) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjS8_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedImEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRy (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRt (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRy (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedIyEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRt (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE17__do_get_unsignedItEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRx (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjRl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRx (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIxEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjRl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (i32.load + (get_local $1) + ) + ) + (i32.store + (tee_local $1 + (get_local $6) + ) + (i32.load + (get_local $2) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.load + (get_local $7) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (call $__ZNKSt3__27num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE15__do_get_signedIlEES4_S4_S4_RNS_8ios_baseERjRT_ + (get_local $0) + (get_local $2) + (get_local $7) + (get_local $3) + (get_local $4) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $0) + ) + (func $_strerror (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.eq + (i32.load8_u + (i32.add + (get_local $1) + (i32.const 11285) + ) + ) + (get_local $0) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $__rjti$0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $2 + (i32.const 87) + ) + (set_local $0 + (i32.const 11373) + ) + (br $__rjti$1) + ) + ) + (if + (get_local $0) + (block + (set_local $2 + (get_local $0) + ) + (set_local $0 + (i32.const 11373) + ) + (br $__rjti$1) + ) + (set_local $0 + (i32.const 11373) + ) + ) + (br $__rjto$1) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $1 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $1) + ) + ) + ) + (br_if $while-in1 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___overflow (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $4 + (get_local $3) + ) + (tee_local $7 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block $do-once + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $5 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $0) + ) + (set_local $1 + (i32.const -1) + ) + (block + (set_local $5 + (i32.load + (get_local $2) + ) + ) + (br $__rjti$0) + ) + ) + (br $do-once) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $5) + ) + (if + (i32.ne + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $6) + (get_local $7) + ) + (br $do-once) + ) + ) + ) + (set_local $1 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$iiii + (get_local $0) + (get_local $4) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $_frexp (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $4 + (i32.and + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $3 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if i32 + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block i32 + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $4) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $3) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPci (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (set_local $4 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (br_if $while-out + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (set_local $3 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_s + (get_local $3) + ) + ) + (block i32 + (br_if $while-out + (i32.eq + (tee_local $3 + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.const -1) + ) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + ) + ) + (i32.store8 + (get_local $4) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (get_local $1) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6xsgetnEPwi (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (set_local $4 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (block $while-out + (br_if $while-out + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.load + (get_local $6) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $3 + (i32.load + (get_local $3) + ) + ) + ) + (br_if $while-out + (i32.eq + (tee_local $3 + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=40 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (get_local $1) + ) + (func $__ZNSt3__214__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $__rjto$0 + (block $__rjti$0 + (block $switch-default8 + (block $switch-case7 + (block $switch-case6 + (br_table $switch-case6 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-default8 $switch-case7 $switch-default8 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $2) + ) + (i32.const 176) + ) + (i32.const 16) + ) + ) + ) + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-case $switch-default + (i32.sub + (tee_local $2 + (i32.load8_s + (get_local $0) + ) + ) + (i32.const 43) + ) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $__rjto$0) + ) + (br_if $__rjto$0 + (i32.eqz + (i32.and + (i32.gt_s + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const 1) + ) + (i32.eq + (get_local $2) + (i32.const 48) + ) + ) + ) + ) + (block $switch2 + (block $switch-default5 + (block $switch-case3 + (br_table $switch-case3 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-default5 $switch-case3 $switch-default5 + (i32.sub + (i32.load8_s offset=1 + (get_local $0) + ) + (i32.const 88) + ) + ) + ) + (br $switch2) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const -1) + ) + (i32.const 12) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_12_hourERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const -1) + ) + (i32.const 12) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const -1) + ) + (i32.const 31) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 3) + ) + ) + (i32.const 366) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE9__get_dayERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_u + (i32.add + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const -1) + ) + (i32.const 31) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE18__get_day_year_numERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 3) + ) + ) + (i32.const 366) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 13) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_monthERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 13) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 1) + ) + ) + (i32.const 7) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 61) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 60) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE13__get_weekdayERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 1) + ) + ) + (i32.const 7) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_secondERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 61) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE12__get_minuteERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 60) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 24) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE10__get_hourERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 24) + ) + (i32.eqz + (i32.and + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store + (get_local $4) + (i32.or + (get_local $3) + (i32.const 4) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE5flushEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $1 + (get_local $3) + ) + (if + (i32.load offset=24 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + (block + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryC2ERS3_ + (get_local $1) + (get_local $0) + ) + (if + (i32.load8_s + (get_local $1) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (tee_local $2 + (i32.load offset=24 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (i32.store + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 1) + ) + ) + ) + ) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE5flushEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $1 + (get_local $3) + ) + (if + (i32.load offset=24 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + (block + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_ + (get_local $1) + (get_local $0) + ) + (if + (i32.load8_s + (get_local $1) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (tee_local $2 + (i32.load offset=24 + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (i32.store + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.or + (i32.load + (get_local $2) + ) + (i32.const 1) + ) + ) + ) + ) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $_ungetc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (block $do-once + (set_local $0 + (if i32 + (i32.eq + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + (block i32 + (set_local $3 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $1) + ) + (i32.const 0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.load offset=8 + (get_local $1) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call $___toread + (get_local $1) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + (i32.add + (i32.load offset=44 + (get_local $1) + ) + (i32.const -8) + ) + ) + (block + (i32.store + (get_local $2) + (tee_local $2 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + (i32.store8 + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (i32.and + (i32.load + (get_local $1) + ) + (i32.const -17) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $3) + ) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $1) + ) + (br $do-once) + ) + ) + ) + (if i32 + (get_local $3) + (block i32 + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $1) + ) + (i32.const -1) + ) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__215__num_get_floatIeEET_PKcS3_Rj (param $0 i32) (param $1 i32) (param $2 i32) (result f64) + (local $3 f64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $6 + (get_local $5) + ) + (if + (i32.eq + (get_local $0) + (get_local $1) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $3 + (f64.const 0) + ) + ) + (block + (set_local $7 + (i32.load + (tee_local $4 + (call $___errno_location) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $3 + (call $_strtold_l + (get_local $0) + (get_local $6) + (call $__ZNSt3__26__clocEv) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $4) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $7) + ) + ) + (if + (i32.eq + (i32.load + (get_local $6) + ) + (get_local $1) + ) + (if + (i32.eq + (get_local $0) + (i32.const 34) + ) + (i32.store + (get_local $2) + (i32.const 4) + ) + ) + (block + (i32.store + (get_local $2) + (i32.const 4) + ) + (set_local $3 + (f64.const 0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $3) + ) + (func $__ZNKSt3__27collateIcE10do_compareEPKcS3_S3_S3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in + (block $while-out + (br_if $__rjti$0 + (i32.eq + (get_local $3) + (get_local $4) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $2) + ) + (block + (set_local $0 + (i32.const -1) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.load8_s + (get_local $1) + ) + ) + (tee_local $5 + (i32.load8_s + (get_local $3) + ) + ) + ) + (block + (set_local $0 + (i32.const -1) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $5) + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.ne + (get_local $1) + (get_local $2) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (if + (i32.gt_u + (get_local $2) + (i32.const -17) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (i32.lt_u + (get_local $2) + (i32.const 11) + ) + (block + (i32.store8 offset=11 + (get_local $0) + (get_local $2) + ) + (br_if $__rjti$0 + (get_local $2) + ) + ) + (block + (i32.store + (get_local $0) + (tee_local $4 + (call $__Znwj + (tee_local $3 + (i32.and + (i32.add + (get_local $2) + (i32.const 16) + ) + (i32.const -16) + ) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $3) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + (set_local $0 + (get_local $4) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (drop + (call $_memcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $0) + (get_local $2) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (if + (i32.gt_u + (get_local $2) + (i32.const 1073741807) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 2) + ) + (block + (i32.store8 offset=11 + (get_local $0) + (get_local $2) + ) + (set_local $3 + (get_local $0) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.and + (i32.add + (get_local $2) + (i32.const 4) + ) + (i32.const -4) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + (block + (i32.store + (get_local $0) + (tee_local $3 + (call $__Znwj + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $4) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (drop + (call $__ZNSt3__211char_traitsIwE4copyEPwPKwj + (get_local $3) + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.add + (get_local $3) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEjc (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (if + (i32.gt_u + (get_local $1) + (i32.const -17) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (i32.lt_u + (get_local $1) + (i32.const 11) + ) + (block + (i32.store8 offset=11 + (get_local $0) + (get_local $1) + ) + (br_if $__rjti$0 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $0) + (tee_local $4 + (call $__Znwj + (tee_local $3 + (i32.and + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.const -16) + ) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $3) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (drop + (call $_memset + (get_local $0) + (get_local $2) + (get_local $1) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + (func $_realloc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (if + (i32.eqz + (get_local $0) + ) + (return + (call $_malloc + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $1) + (i32.const -65) + ) + (block + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $2 + (call $_try_realloc_chunk + (i32.add + (get_local $0) + (i32.const -8) + ) + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $1) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + ) + (return + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + (if + (i32.eqz + (tee_local $2 + (call $_malloc + (get_local $1) + ) + ) + ) + (return + (i32.const 0) + ) + ) + (drop + (call $_memcpy + (get_local $2) + (get_local $0) + (if i32 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.and + (tee_local $3 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const -8) + ) + (if i32 + (i32.and + (get_local $3) + (i32.const 3) + ) + (i32.const 4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $3) + (get_local $1) + ) + ) + ) + (call $_free + (get_local $0) + ) + (get_local $2) + ) + (func $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev (param $0 i32) + (local $1 i32) + (if + (i32.load offset=24 + (tee_local $1 + (i32.add + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.load + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=16 + (get_local $1) + ) + ) + (if + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const 8192) + ) + (if + (i32.eqz + (call $__ZSt18uncaught_exceptionv) + ) + (if + (i32.eq + (call_indirect $FUNCSIG$ii + (tee_local $1 + (i32.load offset=24 + (i32.add + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.load + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 16) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEjw (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (if + (i32.gt_u + (get_local $1) + (i32.const 1073741807) + ) + (call $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2) + ) + (block + (i32.store8 offset=11 + (get_local $0) + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.and + (i32.add + (get_local $1) + (i32.const 4) + ) + (i32.const -4) + ) + ) + (i32.const 1073741823) + ) + (call $___assert_fail + (i32.const 16218) + (i32.const 16255) + (i32.const 1734) + (i32.const 16332) + ) + (block + (i32.store + (get_local $0) + (tee_local $3 + (call $__Znwj + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.or + (get_local $4) + (i32.const -2147483648) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + ) + ) + ) + (drop + (call $__ZNSt3__211char_traitsIwE6assignEPwjw + (get_local $3) + (get_local $1) + (get_local $2) + ) + ) + (i32.store + (i32.add + (get_local $3) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (func $__ZNKSt3__27collateIwE10do_compareEPKwS3_S3_S3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in + (block $while-out + (br_if $__rjti$0 + (i32.eq + (get_local $3) + (get_local $4) + ) + ) + (if + (i32.eq + (get_local $1) + (get_local $2) + ) + (block + (set_local $0 + (i32.const -1) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (tee_local $5 + (i32.load + (get_local $3) + ) + ) + ) + (block + (set_local $0 + (i32.const -1) + ) + (br $while-out) + ) + ) + (if + (i32.lt_s + (get_local $5) + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $0 + (i32.ne + (get_local $1) + (get_local $2) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIDsc11__mbstate_tE6do_outERS1_PKDsS5_RS5_PcS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (get_local $2) + ) + (i32.store + (tee_local $1 + (get_local $0) + ) + (get_local $5) + ) + (set_local $2 + (call $__ZNSt3__2L13utf16_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $8) + (get_local $5) + (get_local $6) + (get_local $1) + (i32.const 1114111) + (i32.const 0) + ) + ) + (i32.store + (get_local $4) + (i32.load + (get_local $8) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $1) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $2) + ) + (func $__ZNKSt3__27codecvtIDsc11__mbstate_tE5do_inERS1_PKcS5_RS5_PDsS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (get_local $2) + ) + (i32.store + (tee_local $1 + (get_local $0) + ) + (get_local $5) + ) + (set_local $2 + (call $__ZNSt3__2L13utf8_to_utf16EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $8) + (get_local $5) + (get_local $6) + (get_local $1) + (i32.const 1114111) + (i32.const 0) + ) + ) + (i32.store + (get_local $4) + (i32.load + (get_local $8) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $1) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $2) + ) + (func $__ZNKSt3__27codecvtIDic11__mbstate_tE6do_outERS1_PKDiS5_RS5_PcS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (get_local $2) + ) + (i32.store + (tee_local $1 + (get_local $0) + ) + (get_local $5) + ) + (set_local $2 + (call $__ZNSt3__2L12ucs4_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $8) + (get_local $5) + (get_local $6) + (get_local $1) + (i32.const 1114111) + (i32.const 0) + ) + ) + (i32.store + (get_local $4) + (i32.load + (get_local $8) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $1) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $2) + ) + (func $__ZNKSt3__27codecvtIDic11__mbstate_tE5do_inERS1_PKcS5_RS5_PDiS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (get_local $2) + ) + (i32.store + (tee_local $1 + (get_local $0) + ) + (get_local $5) + ) + (set_local $2 + (call $__ZNSt3__2L12utf8_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $8) + (get_local $5) + (get_local $6) + (get_local $1) + (i32.const 1114111) + (i32.const 0) + ) + ) + (i32.store + (get_local $4) + (i32.load + (get_local $8) + ) + ) + (i32.store + (get_local $7) + (i32.load + (get_local $1) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (get_local $2) + ) + (func $__ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (block $do-once + (if + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (if + (i32.ne + (get_local $4) + (get_local $2) + ) + (block + (i32.store + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 36) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (i32.store offset=24 + (get_local $1) + (i32.const 2) + ) + (i32.store8 offset=54 + (get_local $1) + (i32.const 1) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + ) + (i32.const 2) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=24 + (get_local $1) + (get_local $3) + ) + (i32.store offset=36 + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + ) + (func $__ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $6 + (i32.shr_s + (tee_local $7 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (set_local $6 + (i32.load + (i32.add + (i32.load + (get_local $3) + ) + (get_local $6) + ) + ) + ) + ) + (call_indirect $FUNCSIG$viiiiii + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + (i32.add + (get_local $3) + (get_local $6) + ) + (if i32 + (i32.and + (get_local $7) + (i32.const 2) + ) + (get_local $4) + (i32.const 2) + ) + (get_local $5) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 405) + ) + ) + ) + (func $__ZNSt3__211__stdoutbufIwEC2EP8_IO_FILEP11__mbstate_t (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEEC2Ev + (get_local $0) + ) + (i32.store + (get_local $0) + (i32.const 6784) + ) + (i32.store offset=32 + (get_local $0) + (get_local $1) + ) + (call $__ZNSt3__26localeC2ERKS0_ + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (get_local $4) + ) + (i32.load + (get_local $3) + ) + ) + (set_local $3 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21008) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $1) + ) + (i32.store offset=36 + (get_local $0) + (get_local $3) + ) + (i32.store offset=40 + (get_local $0) + (get_local $2) + ) + (i32.store8 offset=44 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + ) + (func $__ZNSt3__211__stdoutbufIcEC2EP8_IO_FILEP11__mbstate_t (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEEC2Ev + (get_local $0) + ) + (i32.store + (get_local $0) + (i32.const 6720) + ) + (i32.store offset=32 + (get_local $0) + (get_local $1) + ) + (call $__ZNSt3__26localeC2ERKS0_ + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (get_local $4) + ) + (i32.load + (get_local $3) + ) + ) + (set_local $3 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21000) + ) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $1) + ) + (i32.store offset=36 + (get_local $0) + (get_local $3) + ) + (i32.store offset=40 + (get_local $0) + (get_local $2) + ) + (i32.store8 offset=44 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (get_local $3) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $3) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIwEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (set_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1900) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $__ZNKSt3__28time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11__get_year4ERiRS4_S4_RjRKNS_5ctypeIcEE (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $0) + ) + (i32.load + (get_local $3) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $6) + ) + ) + (set_local $2 + (call $__ZNSt3__220__get_up_to_n_digitsIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiRT0_S5_RjRKNS_5ctypeIT_EEi + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.const 4) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $4) + ) + (i32.const 4) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const -1900) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $___fflush_unlocked (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + (call_indirect $FUNCSIG$viiiiii + (tee_local $6 + (i32.load offset=8 + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (i32.load offset=20 + (i32.load + (get_local $6) + ) + ) + (i32.const 7) + ) + (i32.const 405) + ) + ) + ) + ) + (func $_vasprintf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $3 + (get_local $5) + ) + (set_local $0 + (block $do-once i32 + (if i32 + (tee_local $4 + (call $_malloc + (i32.const 240) + ) + ) + (block i32 + (i32.store + (get_local $3) + (i32.load + (get_local $2) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (call $_vsnprintf + (get_local $4) + (i32.const 240) + (get_local $1) + (get_local $3) + ) + ) + (i32.const 240) + ) + (block + (i32.store + (get_local $0) + (if i32 + (tee_local $0 + (call $_realloc + (get_local $4) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + ) + (get_local $0) + (get_local $4) + ) + ) + (br $do-once + (get_local $3) + ) + ) + ) + (call $_free + (get_local $4) + ) + (if i32 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + (i32.const -1) + (block i32 + (i32.store + (get_local $0) + (tee_local $0 + (call $_malloc + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + ) + (if i32 + (get_local $0) + (call $_vsnprintf + (get_local $0) + (get_local $3) + (get_local $1) + (get_local $2) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.const -1) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNSt3__26locale5__imp7installEPNS0_5facetEl (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (call $__ZNSt3__214__shared_count12__add_sharedEv + (get_local $1) + ) + (if + (tee_local $0 + (i32.load + (i32.add + (tee_local $0 + (if i32 + (i32.gt_u + (i32.shr_s + (i32.sub + (i32.load offset=12 + (get_local $0) + ) + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (i32.const 2) + ) + (get_local $2) + ) + (block i32 + (set_local $3 + (get_local $0) + ) + (get_local $4) + ) + (block i32 + (call $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6resizeEj + (get_local $0) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (set_local $3 + (get_local $0) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $0) + ) + ) + ) + (i32.store + (i32.add + (i32.load + (get_local $3) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $1) + ) + ) + (func $__ZNKSt3__210__time_put8__do_putEPcRS1_PK2tmcc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $7 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $6 + (get_local $7) + ) + (i32.const 37) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (get_local $4) + ) + (i32.store8 + (tee_local $9 + (i32.add + (get_local $6) + (i32.const 2) + ) + ) + (get_local $5) + ) + (i32.store8 offset=3 + (get_local $6) + (i32.const 0) + ) + (if + (i32.and + (get_local $5) + (i32.const 255) + ) + (block + (i32.store8 + (get_local $8) + (get_local $5) + ) + (i32.store8 + (get_local $9) + (get_local $4) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (call $_strftime_l + (get_local $1) + (i32.sub + (i32.load + (get_local $2) + ) + (get_local $1) + ) + (get_local $6) + (get_local $3) + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $7) + ) + ) + (func $_getc (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (block $__rjti$0 + (br_if $__rjti$0 + (i32.lt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const 0) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $0) + ) + ) + ) + (set_local $1 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=8 + (get_local $0) + ) + ) + (block i32 + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $2) + ) + ) + (call $___uflow + (get_local $0) + ) + ) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $0) + ) + (br $do-once) + ) + (set_local $1 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.load offset=8 + (get_local $0) + ) + ) + (block i32 + (i32.store + (get_local $1) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $2) + ) + ) + (call $___uflow + (get_local $0) + ) + ) + ) + ) + (get_local $1) + ) + (func $__ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (i32.shr_s + (tee_local $6 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (get_local $6) + (i32.const 1) + ) + (set_local $5 + (i32.load + (i32.add + (i32.load + (get_local $2) + ) + (get_local $5) + ) + ) + ) + ) + (call_indirect $FUNCSIG$viiiii + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $1) + (i32.add + (get_local $2) + (get_local $5) + ) + (if i32 + (i32.and + (get_local $6) + (i32.const 2) + ) + (get_local $3) + (i32.const 2) + ) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + (i32.const 3) + ) + (i32.const 40) + ) + ) + ) + (func $_strtox (param $0 i32) (param $1 i32) (param $2 i32) (result f64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 f64) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $5 + (i32.add + (tee_local $4 + (tee_local $3 + (get_local $6) + ) + ) + (i32.const 112) + ) + ) + (loop $do-in + (i32.store + (get_local $4) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $0) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (i32.const -1) + ) + (i32.store offset=44 + (get_local $3) + (get_local $0) + ) + (i32.store offset=76 + (get_local $3) + (i32.const -1) + ) + (call $___shlim + (get_local $3) + (i32.const 0) + ) + (set_local $7 + (call $___floatscan + (get_local $3) + (get_local $2) + (i32.const 1) + ) + ) + (set_local $2 + (i32.add + (i32.sub + (i32.load + (get_local $4) + ) + (i32.load + (get_local $5) + ) + ) + (i32.load offset=108 + (get_local $3) + ) + ) + ) + (if + (get_local $1) + (i32.store + (get_local $1) + (if i32 + (get_local $2) + (i32.add + (get_local $0) + (get_local $2) + ) + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $7) + ) + (func $__ZNSt3__214__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEEC2EjjS6_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $0) + (get_local $3) + ) + (if + (get_local $1) + (if + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 29) + ) + (i32.eqz + (i32.load8_s + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 112) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $4) + (i32.const 1) + ) + (set_local $3 + (call $__Znwj + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=8 + (get_local $0) + (tee_local $2 + (i32.add + (get_local $3) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $2) + ) + (i32.store offset=12 + (get_local $0) + (i32.add + (get_local $3) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6resizeEj (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (block $label$break$L1 + (if + (i32.lt_u + (tee_local $2 + (i32.shr_s + (i32.sub + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + ) + (i32.const 2) + ) + ) + (get_local $1) + ) + (call $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8__appendEj + (get_local $0) + (i32.sub + (get_local $1) + (get_local $2) + ) + ) + (if + (i32.gt_u + (get_local $2) + (get_local $1) + ) + (block + (set_local $1 + (i32.add + (get_local $5) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + (loop $while-in + (br_if $label$break$L1 + (i32.eq + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $3) + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + ) + (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (if + (i32.lt_u + (tee_local $3 + (if i32 + (tee_local $5 + (i32.lt_s + (tee_local $3 + (i32.load8_s + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.load offset=4 + (get_local $0) + ) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + ) + (get_local $1) + ) + (drop + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEjc + (get_local $0) + (i32.sub + (get_local $1) + (get_local $3) + ) + (get_local $2) + ) + ) + (if + (get_local $5) + (block + (i32.store8 + (i32.add + (i32.load + (get_local $0) + ) + (get_local $1) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store8 + (i32.add + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + (i32.store8 + (get_local $4) + (get_local $1) + ) + ) + ) + ) + ) + (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $___toread (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (if + (i32.gt_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (tee_local $0 + (if i32 + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 20) + ) + (if i32 + (i32.and + (get_local $1) + (i32.const 4) + ) + (block i32 + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (i32.const -1) + ) + (block i32 + (i32.store offset=8 + (get_local $0) + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + ) + (func $__ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.shr_s + (tee_local $5 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (get_local $5) + (i32.const 1) + ) + (set_local $4 + (i32.load + (i32.add + (i32.load + (get_local $2) + ) + (get_local $4) + ) + ) + ) + ) + (call_indirect $FUNCSIG$viiii + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (get_local $1) + (i32.add + (get_local $2) + (get_local $4) + ) + (if i32 + (i32.and + (get_local $5) + (i32.const 2) + ) + (get_local $3) + (i32.const 2) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $0) + ) + ) + (i32.const 7) + ) + (i32.const 461) + ) + ) + ) + (func $__ZNSt3__210__stdinbufIwEC2EP8_IO_FILEP11__mbstate_t (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEEC2Ev + (get_local $0) + ) + (i32.store + (get_local $0) + (i32.const 6656) + ) + (i32.store offset=32 + (get_local $0) + (get_local $1) + ) + (i32.store offset=40 + (get_local $0) + (get_local $2) + ) + (i32.store offset=48 + (get_local $0) + (i32.const -1) + ) + (i32.store8 offset=52 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__26localeC2ERKS0_ + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (get_local $3) + ) + (i32.load + (get_local $2) + ) + ) + (call $__ZNSt3__210__stdinbufIwE5imbueERKNS_6localeE + (get_local $0) + (get_local $1) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $1) + ) + (set_global $STACKTOP + (get_local $3) + ) + ) + (func $__ZNSt3__210__stdinbufIcEC2EP8_IO_FILEP11__mbstate_t (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEEC2Ev + (get_local $0) + ) + (i32.store + (get_local $0) + (i32.const 6592) + ) + (i32.store offset=32 + (get_local $0) + (get_local $1) + ) + (i32.store offset=40 + (get_local $0) + (get_local $2) + ) + (i32.store offset=48 + (get_local $0) + (i32.const -1) + ) + (i32.store8 offset=52 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__26localeC2ERKS0_ + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (get_local $3) + ) + (i32.load + (get_local $2) + ) + ) + (call $__ZNSt3__210__stdinbufIcE5imbueERKNS_6localeE + (get_local $0) + (get_local $1) + ) + (call $__ZNSt3__26localeD2Ev + (get_local $1) + ) + (set_global $STACKTOP + (get_local $3) + ) + ) + (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if i32 + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $__ZNSt3__211__stdoutbufIwE6xsputnEPKwi (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (block $label$break$L1 + (if + (i32.load8_s offset=44 + (get_local $0) + ) + (set_local $1 + (call $_fwrite + (get_local $1) + (i32.const 4) + (get_local $2) + (i32.load offset=32 + (get_local $0) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (br_if $label$break$L1 + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (br_if $label$break$L1 + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $0) + (i32.load + (get_local $3) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (get_local $1) + ) + (func $__ZNSt3__211__stdoutbufIcE6xsputnEPKci (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (block $label$break$L1 + (if + (i32.load8_s offset=44 + (get_local $0) + ) + (set_local $1 + (call $_fwrite + (get_local $1) + (i32.const 1) + (get_local $2) + (i32.load offset=32 + (get_local $0) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (br_if $label$break$L1 + (i32.ge_s + (get_local $1) + (get_local $2) + ) + ) + (br_if $label$break$L1 + (i32.eq + (call_indirect $FUNCSIG$iii + (get_local $0) + (i32.load8_u + (get_local $3) + ) + (i32.add + (i32.and + (i32.load offset=52 + (i32.load + (get_local $0) + ) + ) + (i32.const 15) + ) + (i32.const 413) + ) + ) + (i32.const -1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (get_local $1) + ) + (func $_strtox_545 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (i32.store + (tee_local $5 + (get_local $6) + ) + (i32.const 0) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $0) + ) + (i32.store offset=44 + (get_local $5) + (get_local $0) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $5) + (i32.const 8) + ) + ) + (if i32 + (i32.lt_s + (get_local $0) + (i32.const 0) + ) + (i32.const -1) + (i32.add + (get_local $0) + (i32.const 2147483647) + ) + ) + ) + (i32.store offset=76 + (get_local $5) + (i32.const -1) + ) + (call $___shlim + (get_local $5) + (i32.const 0) + ) + (set_local $2 + (call $___intscan + (get_local $5) + (get_local $2) + (i32.const 1) + (get_local $3) + (get_local $4) + ) + ) + (if + (get_local $1) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.sub + (i32.add + (i32.load + (get_local $7) + ) + (i32.load offset=108 + (get_local $5) + ) + ) + (i32.load + (get_local $8) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + (get_local $2) + ) + (func $__ZNSt3__26locale5__impD2Ev (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (i32.store + (get_local $0) + (i32.const 9184) + ) + (set_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in + (if + (i32.lt_u + (get_local $1) + (i32.shr_s + (i32.sub + (i32.load + (get_local $4) + ) + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + ) + (i32.const 2) + ) + ) + (block + (if + (tee_local $2 + (i32.load + (i32.add + (get_local $2) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (get_local $2) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.add + (get_local $0) + (i32.const 144) + ) + ) + (call $__ZNSt3__213__vector_baseIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEED2Ev + (get_local $3) + ) + ) + (func $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEEC2Ej (param $0 i32) (param $1 i32) + (local $2 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store8 offset=128 + (get_local $0) + (i32.const 0) + ) + (if + (get_local $1) + (block + (call $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8allocateEj + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (tee_local $0 + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 4) + ) + ) + ) + (br_if $do-in + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + ) + ) + ) + (func $__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + (call_indirect $FUNCSIG$viiii + (tee_local $4 + (i32.load offset=8 + (get_local $0) + ) + ) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $4) + ) + ) + (i32.const 7) + ) + (i32.const 461) + ) + ) + ) + ) + (func $_strcmp (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (i32.load8_s + (get_local $1) + ) + ) + (i32.sub + (i32.and + (tee_local $0 + (if i32 + (if i32 + (tee_local $3 + (i32.load8_s + (get_local $0) + ) + ) + (i32.ne + (get_local $3) + (get_local $2) + ) + (i32.const 1) + ) + (block i32 + (set_local $1 + (get_local $2) + ) + (get_local $3) + ) + (block i32 + (loop $do-in + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in + (i32.eqz + (if i32 + (tee_local $3 + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (i32.ne + (get_local $3) + (get_local $2) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (get_local $3) + ) + ) + ) + (i32.const 255) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (func $_wmemmove (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (set_local $3 + (i32.eqz + (get_local $2) + ) + ) + (if + (i32.lt_u + (i32.shr_s + (i32.sub + (get_local $0) + (get_local $1) + ) + (i32.const 2) + ) + (get_local $2) + ) + (if + (i32.eqz + (get_local $3) + ) + (loop $do-in + (i32.store + (i32.add + (get_local $0) + (i32.shl + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 2) + ) + ) + (i32.load + (i32.add + (get_local $1) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (br_if $do-in + (get_local $2) + ) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (get_local $0) + ) + (loop $while-in + (i32.store + (get_local $3) + (i32.load + (get_local $1) + ) + ) + (if + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__211__call_onceERVmPvPFvS2_E (param $0 i32) (param $1 i32) (param $2 i32) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21048) + ) + ) + (loop $while-in + (if + (i32.eq + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + (block + (drop + (call $_pthread_cond_wait + (i32.const 21076) + (i32.const 21048) + ) + ) + (br $while-in) + ) + ) + ) + (if + (i32.load + (get_local $0) + ) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21048) + ) + ) + (block + (i32.store + (get_local $0) + (i32.const 1) + ) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21048) + ) + ) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (get_local $2) + (i32.const 127) + ) + (i32.const 48) + ) + ) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21048) + ) + ) + (i32.store + (get_local $0) + (i32.const -1) + ) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21048) + ) + ) + (drop + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (i32.const 21076) + ) + ) + ) + ) + ) + (func $__ZNSt3__214__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEED2Ev (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (i32.load offset=4 + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store + (get_local $3) + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + ) + (br $while-in) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (if + (i32.eq + (tee_local $0 + (i32.load offset=16 + (get_local $0) + ) + ) + (get_local $1) + ) + (i32.store8 offset=112 + (get_local $0) + (i32.const 0) + ) + (call $__ZdlPv + (get_local $1) + ) + ) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_ (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (if + (i32.lt_s + (i32.load8_s offset=11 + (get_local $1) + ) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (get_local $0) + (i32.load + (get_local $1) + ) + (i32.load offset=4 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.store offset=8 + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + ) + ) + ) + (func $__ZNSt3__26vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8allocateEj (param $0 i32) (param $1 i32) + (local $2 i32) + (if + (i32.gt_u + (get_local $1) + (i32.const 1073741823) + ) + (call $__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $0) + (tee_local $2 + (if i32 + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 29) + ) + (i32.eqz + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 128) + ) + ) + ) + ) + ) + (block i32 + (i32.store8 + (get_local $2) + (i32.const 1) + ) + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (call $__Znwj + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (get_local $2) + ) + (i32.store offset=8 + (get_local $0) + (i32.add + (get_local $2) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNSt3__217__call_once_proxyINS_5tupleIJONS_12_GLOBAL__N_111__fake_bindEEEEEEvPv (param $0 i32) + (local $1 i32) + (local $2 i32) + (set_local $0 + (i32.load offset=4 + (tee_local $1 + (i32.load + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.load + (get_local $1) + ) + (i32.shr_s + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 1) + ) + (set_local $0 + (i32.load + (i32.add + (i32.load + (get_local $1) + ) + (get_local $0) + ) + ) + ) + ) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE5do_isEPKwS3_Pt (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 2) + ) + ) + (set_local $0 + (get_local $1) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (get_local $2) + ) + (block + (i32.store16 + (get_local $3) + (tee_local $4 + (if i32 + (i32.lt_u + (tee_local $4 + (i32.load + (get_local $0) + ) + ) + (i32.const 128) + ) + (i32.load16_u + (i32.add + (i32.load + (call $___ctype_b_loc) + ) + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.add + (get_local $1) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 1) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $__ZNSt3__210__stdinbufIwE5imbueERKNS_6localeE (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21008) + ) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 offset=53 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNSt3__210__stdinbufIcE5imbueERKNS_6localeE (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (tee_local $1 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21000) + ) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $1) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store8 offset=53 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE11do_scan_notEtPKwS3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $while-out) + ) + ) + (br_if $while-out + (i32.ge_u + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + (i32.const 128) + ) + ) + (if + (i32.and + (i32.and + (i32.load16_s + (i32.add + (i32.load + (call $___ctype_b_loc) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $1) + ) + (i32.const 65535) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + (get_local $2) + ) + (func $__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + ) + ) + ) + (func $_fwrite (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (get_local $2) + ) + (func $___string_read (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.lt_u + (if i32 + (tee_local $6 + (call $_memchr + (tee_local $3 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 84) + ) + ) + ) + ) + (i32.const 0) + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 256) + ) + ) + ) + ) + (tee_local $4 + (i32.sub + (get_local $6) + (get_local $3) + ) + ) + (get_local $4) + ) + (get_local $2) + ) + (set_local $2 + (get_local $4) + ) + ) + (drop + (call $_memcpy + (get_local $1) + (get_local $3) + (get_local $2) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (i32.store offset=8 + (get_local $0) + (tee_local $0 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ) + (i32.store + (get_local $5) + (get_local $0) + ) + (get_local $2) + ) + (func $_calloc (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (if + (get_local $0) + (block + (set_local $2 + (i32.mul + (get_local $1) + (get_local $0) + ) + ) + (if + (i32.gt_u + (i32.or + (get_local $1) + (get_local $0) + ) + (i32.const 65535) + ) + (if + (i32.ne + (i32.div_u + (get_local $2) + (get_local $0) + ) + (get_local $1) + ) + (set_local $2 + (i32.const -1) + ) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + (if + (i32.eqz + (tee_local $0 + (call $_malloc + (get_local $2) + ) + ) + ) + (return + (get_local $0) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (return + (get_local $0) + ) + ) + (drop + (call $_memset + (get_local $0) + (i32.const 0) + (get_local $2) + ) + ) + (get_local $0) + ) + (func $___muldi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (call $___muldsi3 + (get_local $0) + (get_local $2) + ) + ) + (set_global $tempRet0 + (i32.or + (i32.add + (i32.add + (i32.mul + (get_local $1) + (get_local $2) + ) + (i32.mul + (get_local $3) + (get_local $0) + ) + ) + (tee_local $0 + (get_global $tempRet0) + ) + ) + (i32.and + (get_local $0) + (i32.const 0) + ) + ) + ) + (get_local $4) + ) + (func $__ZNSt3__26locale2id5__getEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (set_local $4 + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (get_local $0) + ) + (i32.store offset=4 + (get_local $2) + (i32.const 97) + ) + (i32.store offset=8 + (get_local $2) + (i32.const 0) + ) + (if + (i32.ne + (i32.load + (get_local $0) + ) + (i32.const -1) + ) + (block + (i32.store + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $4) + (get_local $3) + ) + (call $__ZNSt3__211__call_onceERVmPvPFvS2_E + (get_local $0) + (get_local $4) + (i32.const 98) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (i32.add + (i32.load offset=4 + (get_local $0) + ) + (i32.const -1) + ) + ) + (func $__ZNSt3__28ios_base4initEPv (param $0 i32) (param $1 i32) + (local $2 i32) + (i32.store offset=24 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.eqz + (get_local $1) + ) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 4098) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 6) + ) + (set_local $1 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (set_local $2 + (i32.add + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $0) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (get_local $2) + ) + ) + ) + (call $__ZNSt3__26localeC2Ev + (get_local $1) + ) + ) + (func $__ZNSt3__213__vector_baseIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEED2Ev (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (if + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (loop $while-in + (if + (i32.ne + (get_local $2) + (get_local $1) + ) + (block + (i32.store + (get_local $3) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + ) + (br $while-in) + ) + ) + ) + (if + (i32.eq + (i32.add + (get_local $0) + (i32.const 16) + ) + (get_local $1) + ) + (i32.store8 offset=128 + (get_local $0) + (i32.const 0) + ) + (call $__ZdlPv + (get_local $1) + ) + ) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE9do_narrowEPKwS3_cPc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 2) + ) + ) + (set_local $0 + (get_local $1) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (get_local $2) + ) + (block + (i32.store8 + (get_local $4) + (if i32 + (i32.lt_u + (tee_local $6 + (i32.load + (get_local $0) + ) + ) + (i32.const 128) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.add + (get_local $1) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE10do_scan_isEtPKwS3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (loop $while-in + (block $while-out + (if + (i32.eq + (get_local $2) + (get_local $3) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $while-out) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (get_local $2) + ) + ) + (i32.const 128) + ) + (br_if $while-out + (i32.and + (i32.and + (i32.load16_s + (i32.add + (i32.load + (call $___ctype_b_loc) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (get_local $1) + ) + (i32.const 65535) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__28numpunctIwEC2Ej (param $0 i32) (param $1 i32) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.store + (get_local $0) + (i32.const 9296) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 46) + ) + (i32.store offset=12 + (get_local $0) + (i32.const 44) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (func $___towrite (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if i32 + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block i32 + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $__ZNSt3__28numpunctIcEC2Ej (param $0 i32) (param $1 i32) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.store + (get_local $0) + (i32.const 9256) + ) + (i32.store8 offset=8 + (get_local $0) + (i32.const 46) + ) + (i32.store8 offset=9 + (get_local $0) + (i32.const 44) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (func $_vsscanf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 112) + ) + ) + (set_local $6 + (i32.add + (tee_local $4 + (tee_local $3 + (get_local $5) + ) + ) + (i32.const 112) + ) + ) + (loop $do-in + (i32.store + (get_local $4) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (get_local $6) + ) + ) + ) + (i32.store offset=32 + (get_local $3) + (i32.const 26) + ) + (i32.store offset=44 + (get_local $3) + (get_local $0) + ) + (i32.store offset=76 + (get_local $3) + (i32.const -1) + ) + (i32.store offset=84 + (get_local $3) + (get_local $0) + ) + (set_local $0 + (call $_vfscanf + (get_local $3) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $_newlocale (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (i32.load8_s + (get_local $1) + ) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call $_strcmp + (get_local $1) + (i32.const 13970) + ) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call $_strcmp + (get_local $1) + (i32.const 13230) + ) + ) + ) + (br $do-once + (i32.const 0) + ) + ) + (if i32 + (get_local $2) + (get_local $2) + (if i32 + (i32.load + (i32.const 17652) + ) + (call $_calloc + (i32.const 1) + (i32.const 4) + ) + (block i32 + (i32.store + (i32.const 17652) + (i32.const 1) + ) + (i32.const 17656) + ) + ) + ) + ) + ) + (func $__ZNSt3__219__libcpp_snprintf_lEPcjP15__locale_structPKcz (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $6 + (get_local $5) + ) + (get_local $4) + ) + (set_local $2 + (call $_uselocale + (get_local $2) + ) + ) + (set_local $0 + (call $_vsnprintf + (get_local $0) + (get_local $1) + (get_local $3) + (get_local $6) + ) + ) + (if + (get_local $2) + (drop + (call $_uselocale + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $__ZNKSt3__25ctypeIwE10do_toupperEPwPKw (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 2) + ) + ) + (set_local $0 + (get_local $1) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (get_local $2) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 128) + ) + (set_local $3 + (i32.load + (i32.add + (i32.load + (call $___ctype_toupper_loc) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.add + (get_local $1) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE10do_tolowerEPwPKw (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (i32.shr_u + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 2) + ) + ) + (set_local $0 + (get_local $1) + ) + (loop $while-in + (if + (i32.ne + (get_local $0) + (get_local $2) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 128) + ) + (set_local $3 + (i32.load + (i32.add + (i32.load + (call $___ctype_tolower_loc) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.add + (get_local $1) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (func $___cxa_can_catch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $4 + (get_local $3) + ) + (i32.load + (get_local $2) + ) + ) + (if + (tee_local $0 + (call_indirect $FUNCSIG$iiii + (get_local $0) + (get_local $1) + (get_local $4) + (i32.add + (i32.and + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (i32.store + (get_local $2) + (i32.load + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + (func $__ZNKSt3__27collateIwE7do_hashEPKwS3_ (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (set_local $0 + (i32.xor + (i32.or + (i32.shr_u + (tee_local $3 + (i32.and + (tee_local $0 + (i32.add + (i32.load + (get_local $1) + ) + (i32.shl + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.const -268435456) + ) + ) + (i32.const 24) + ) + (get_local $3) + ) + (get_local $0) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__27collateIcE7do_hashEPKcS3_ (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (set_local $0 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (set_local $0 + (i32.xor + (i32.or + (i32.shr_u + (tee_local $3 + (i32.and + (tee_local $0 + (i32.add + (i32.load8_s + (get_local $1) + ) + (i32.shl + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.const -268435456) + ) + ) + (i32.const 24) + ) + (get_local $3) + ) + (get_local $0) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE11do_encodingEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $0 + (call $_uselocale + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (set_local $2 + (call $_mbtowc + (i32.const 0) + (i32.const 0) + (i32.const 4) + ) + ) + (if + (get_local $0) + (drop + (call $_uselocale + (get_local $0) + ) + ) + ) + (tee_local $0 + (if i32 + (get_local $2) + (i32.const -1) + (if i32 + (tee_local $0 + (i32.load + (get_local $1) + ) + ) + (if i32 + (tee_local $0 + (call $_uselocale + (get_local $0) + ) + ) + (block i32 + (drop + (call $_uselocale + (get_local $0) + ) + ) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 1) + ) + ) + ) + ) + (func $__ZNKSt3__27collateIwE12do_transformEPKwS3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_ + (get_local $0) + (get_local $2) + (get_local $3) + ) + ) + (func $__ZNKSt3__27collateIcE12do_transformEPKcS3_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_ + (get_local $0) + (get_local $2) + (get_local $3) + ) + ) + (func $__ZNSt3__219__libcpp_asprintf_lEPPcP15__locale_structPKcz (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $5 + (get_local $4) + ) + (get_local $3) + ) + (set_local $1 + (call $_uselocale + (get_local $1) + ) + ) + (set_local $0 + (call $_vasprintf + (get_local $0) + (get_local $2) + (get_local $5) + ) + ) + (if + (get_local $1) + (drop + (call $_uselocale + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE6sentryC2ERS3_ (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (if + (i32.eqz + (i32.load offset=16 + (tee_local $1 + (i32.add + (get_local $1) + (i32.load + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -12) + ) + ) + ) + ) + ) + ) + (block + (if + (tee_local $1 + (i32.load offset=72 + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE5flushEv + (get_local $1) + ) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (func $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_ (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (get_local $1) + ) + (if + (i32.eqz + (i32.load offset=16 + (tee_local $1 + (i32.add + (get_local $1) + (i32.load + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -12) + ) + ) + ) + ) + ) + ) + (block + (if + (tee_local $1 + (i32.load offset=72 + (get_local $1) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE5flushEv + (get_local $1) + ) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (func $__ZNSt3__217__libcpp_sscanf_lEPKcP15__locale_structS1_z (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $5 + (get_local $4) + ) + (get_local $3) + ) + (set_local $1 + (call $_uselocale + (get_local $1) + ) + ) + (set_local $0 + (call $_vsscanf + (get_local $0) + (get_local $2) + (get_local $5) + ) + ) + (if + (get_local $1) + (drop + (call $_uselocale + (get_local $1) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $__ZNKSt3__25ctypeIcE10do_toupperEPcPKc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.gt_s + (tee_local $0 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const -1) + ) + (set_local $0 + (i32.and + (i32.load + (i32.add + (i32.load + (call $___ctype_toupper_loc) + ) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (i32.const 255) + ) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $2) + ) + (func $__ZNKSt3__25ctypeIcE10do_tolowerEPcPKc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (if + (i32.gt_s + (tee_local $0 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const -1) + ) + (set_local $0 + (i32.and + (i32.load + (i32.add + (i32.load + (call $___ctype_tolower_loc) + ) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (i32.const 255) + ) + ) + ) + (i32.store8 + (get_local $1) + (get_local $0) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $2) + ) + (func $__ZNKSt3__25ctypeIcE9do_narrowEPKcS3_cPc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store8 + (get_local $4) + (if i32 + (i32.gt_s + (tee_local $0 + (i32.load8_s + (get_local $1) + ) + ) + (i32.const -1) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__28ios_base16__call_callbacksENS0_5eventE (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + (set_local $4 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + (set_local $2 + (i32.load offset=40 + (get_local $0) + ) + ) + (loop $while-in + (if + (get_local $2) + (block + (call_indirect $FUNCSIG$viii + (get_local $1) + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $4) + ) + (i32.shl + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.and + (i32.load + (i32.add + (i32.load + (get_local $3) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + (i32.const 0) + ) + (i32.const 376) + ) + ) + (br $while-in) + ) + ) + ) + ) + (func $__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (if + (i32.eq + (get_local $0) + (i32.load offset=8 + (get_local $1) + ) + ) + (call $__ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi + (i32.const 0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + ) + ) + (func $___muldsi3 (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $0 + (i32.add + (i32.shr_u + (tee_local $4 + (i32.mul + (tee_local $2 + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 65535) + ) + ) + ) + ) + (i32.const 16) + ) + (i32.mul + (get_local $2) + (tee_local $2 + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + ) + (set_local $1 + (i32.mul + (tee_local $5 + (i32.shr_u + (get_local $1) + (i32.const 16) + ) + ) + (get_local $3) + ) + ) + (set_global $tempRet0 + (i32.add + (i32.add + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.mul + (get_local $5) + (get_local $2) + ) + ) + (i32.shr_u + (i32.add + (i32.and + (get_local $0) + (i32.const 65535) + ) + (get_local $1) + ) + (i32.const 16) + ) + ) + ) + (i32.or + (i32.shl + (i32.add + (get_local $0) + (get_local $1) + ) + (i32.const 16) + ) + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + ) + (func $_memmove (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.and + (i32.lt_s + (get_local $1) + (get_local $0) + ) + (i32.lt_s + (get_local $0) + (i32.add + (get_local $1) + (get_local $2) + ) + ) + ) + (block + (set_local $3 + (get_local $0) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (loop $while-in + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (tee_local $0 + (i32.sub + (get_local $0) + (i32.const 1) + ) + ) + (i32.load8_s + (tee_local $1 + (i32.sub + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (br $while-in) + ) + ) + ) + (set_local $0 + (get_local $3) + ) + ) + (drop + (call $_memcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__210moneypunctIwLb1EE16do_positive_signEv (param $0 i32) (param $1 i32) + (local $2 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in + (if + (i32.ne + (get_local $2) + (i32.const 3) + ) + (block + (i32.store + (i32.add + (get_local $0) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (func $_copysign (param $0 f64) (param $1 f64) (result f64) + (local $2 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $1) + ) + (set_local $2 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (f64.abs + (get_local $0) + ) + ) + (set_local $2 + (i32.or + (i32.and + (get_local $2) + (i32.const -2147483648) + ) + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (i32.load + (get_global $tempDoublePtr) + ) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (get_local $2) + ) + (f64.load + (get_global $tempDoublePtr) + ) + ) + (func $__ZNSt3__211__stdoutbufIwE5imbueERKNS_6localeE (param $0 i32) (param $1 i32) + (local $2 i32) + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store offset=36 + (get_local $0) + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21008) + ) + ) + ) + (i32.store8 offset=44 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNSt3__211__stdoutbufIcE5imbueERKNS_6localeE (param $0 i32) (param $1 i32) + (local $2 i32) + (drop + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=24 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (i32.store offset=36 + (get_local $0) + (tee_local $2 + (call $__ZNKSt3__26locale9use_facetERNS0_2idE + (get_local $1) + (i32.const 21000) + ) + ) + ) + (i32.store8 offset=44 + (get_local $0) + (i32.and + (call_indirect $FUNCSIG$ii + (get_local $2) + (i32.add + (i32.and + (i32.load offset=28 + (i32.load + (get_local $2) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekoffExNS_8ios_base7seekdirEj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (i32.store + (tee_local $1 + (get_local $0) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const -1) + ) + (i32.store offset=4 + (get_local $0) + (i32.const -1) + ) + ) + (func $___uflow (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $0 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.load offset=8 + (get_local $0) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (call $___toread + (get_local $0) + ) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if i32 + (i32.eq + (call_indirect $FUNCSIG$iiii + (get_local $0) + (get_local $2) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=32 + (get_local $0) + ) + (i32.const 31) + ) + (i32.const 8) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $2) + ) + (i32.const -1) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $___uremdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE3__xEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17096) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17096) + ) + (block + (i32.store + (i32.const 20872) + (i32.const 0) + ) + (i32.store + (i32.const 20876) + (i32.const 0) + ) + (i32.store + (i32.const 20880) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (i32.const 20872) + (i32.const 8512) + (call $_wcslen + (i32.const 8512) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 106) + (i32.const 20872) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20872) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE3__rEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17088) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17088) + ) + (block + (i32.store + (i32.const 20860) + (i32.const 0) + ) + (i32.store + (i32.const 20864) + (i32.const 0) + ) + (i32.store + (i32.const 20868) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (i32.const 20860) + (i32.const 8464) + (call $_wcslen + (i32.const 8464) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 106) + (i32.const 20860) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20860) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE3__cEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17080) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17080) + ) + (block + (i32.store + (i32.const 20848) + (i32.const 0) + ) + (i32.store + (i32.const 20852) + (i32.const 0) + ) + (i32.store + (i32.const 20856) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (i32.const 20848) + (i32.const 8380) + (call $_wcslen + (i32.const 8380) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 106) + (i32.const 20848) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20848) + ) + (func $__ZNKSt3__220__time_get_c_storageIwE3__XEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17104) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17104) + ) + (block + (i32.store + (i32.const 20884) + (i32.const 0) + ) + (i32.store + (i32.const 20888) + (i32.const 0) + ) + (i32.store + (i32.const 20892) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (i32.const 20884) + (i32.const 8548) + (call $_wcslen + (i32.const 8548) + ) + ) + (drop + (call $___cxa_atexit + (i32.const 106) + (i32.const 20884) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20884) + ) + (func $__ZNSt3__25ctypeIcEC2EPKtbj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.store + (get_local $0) + (i32.const 9204) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $1) + ) + (i32.store8 offset=12 + (get_local $0) + (i32.and + (get_local $2) + (i32.const 1) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (i32.store + (get_local $4) + (i32.load + (call $___ctype_b_loc) + ) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE7seekposENS_4fposI11__mbstate_tEEj (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (i32.store + (tee_local $1 + (get_local $0) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const -1) + ) + (i32.store offset=4 + (get_local $0) + (i32.const -1) + ) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE3__rEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17008) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17008) + ) + (block + (i32.store + (i32.const 20048) + (i32.const 0) + ) + (i32.store + (i32.const 20052) + (i32.const 0) + ) + (i32.store + (i32.const 20056) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (i32.const 20048) + (i32.const 14701) + (i32.const 11) + ) + (drop + (call $___cxa_atexit + (i32.const 102) + (i32.const 20048) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20048) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE3__xEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17016) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17016) + ) + (block + (i32.store + (i32.const 20060) + (i32.const 0) + ) + (i32.store + (i32.const 20064) + (i32.const 0) + ) + (i32.store + (i32.const 20068) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (i32.const 20060) + (i32.const 14713) + (i32.const 8) + ) + (drop + (call $___cxa_atexit + (i32.const 102) + (i32.const 20060) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20060) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE3__XEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17024) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17024) + ) + (block + (i32.store + (i32.const 20072) + (i32.const 0) + ) + (i32.store + (i32.const 20076) + (i32.const 0) + ) + (i32.store + (i32.const 20080) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (i32.const 20072) + (i32.const 14722) + (i32.const 8) + ) + (drop + (call $___cxa_atexit + (i32.const 102) + (i32.const 20072) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20072) + ) + (func $__ZNKSt3__220__time_get_c_storageIcE3__cEv (param $0 i32) (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17000) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17000) + ) + (block + (i32.store + (i32.const 20036) + (i32.const 0) + ) + (i32.store + (i32.const 20040) + (i32.const 0) + ) + (i32.store + (i32.const 20044) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (i32.const 20036) + (i32.const 14680) + (i32.const 20) + ) + (drop + (call $___cxa_atexit + (i32.const 102) + (i32.const 20036) + (get_global $___dso_handle) + ) + ) + ) + ) + ) + (i32.const 20036) + ) + (func $__ZNKSt3__25ctypeIcE8do_widenEPKcS3_Pc (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store8 + (get_local $3) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $2) + ) + (func $__ZNKSt3__25ctypeIwE8do_widenEPKcS3_Pw (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (loop $while-in + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (i32.store + (get_local $3) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5uflowEv (param $0 i32) (result i32) + (local $1 i32) + (tee_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (i32.const -1) + (block i32 + (set_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.load + (get_local $0) + ) + ) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEE5uflowEv (param $0 i32) (result i32) + (local $1 i32) + (tee_local $0 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$ii + (get_local $0) + (i32.add + (i32.and + (i32.load offset=36 + (i32.load + (get_local $0) + ) + ) + (i32.const 63) + ) + (i32.const 312) + ) + ) + (i32.const -1) + ) + (i32.const -1) + (block i32 + (set_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.load8_u + (get_local $0) + ) + ) + ) + ) + ) + (func $_wmemcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (get_local $2) + (block + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + (loop $while-in + (i32.store + (get_local $2) + (i32.load + (get_local $1) + ) + ) + (if + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEEC2Ev (param $0 i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.const 6368) + ) + (call $__ZNSt3__26localeC2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $1) + (i32.const 0) + ) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEEC2Ev (param $0 i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.const 6304) + ) + (call $__ZNSt3__26localeC2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $1) + (i32.const 0) + ) + ) + (func $__ZNSt3__28ios_base4InitD2Ev (param $0 i32) + (drop + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE5flushEv + (i32.const 18336) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE5flushEv + (i32.const 18420) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIcNS_11char_traitsIcEEE5flushEv + (i32.const 18672) + ) + ) + (drop + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEE5flushEv + (i32.const 18756) + ) + ) + ) + (func $___shlim (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (i32.store offset=104 + (get_local $0) + (get_local $1) + ) + (i32.store offset=108 + (get_local $0) + (tee_local $4 + (i32.sub + (tee_local $2 + (i32.load offset=8 + (get_local $0) + ) + ) + (tee_local $3 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.ne + (get_local $1) + (i32.const 0) + ) + (i32.gt_s + (get_local $4) + (get_local $1) + ) + ) + (i32.store offset=100 + (get_local $0) + (i32.add + (get_local $3) + (get_local $1) + ) + ) + (i32.store offset=100 + (get_local $0) + (get_local $2) + ) + ) + ) + (func $__Znwj (param $0 i32) (result i32) + (local $1 i32) + (if + (i32.eqz + (get_local $0) + ) + (set_local $0 + (i32.const 1) + ) + ) + (loop $while-in + (block $while-out + (if + (tee_local $1 + (call $_malloc + (get_local $0) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out) + ) + ) + (if + (tee_local $1 + (call $__ZSt15get_new_handlerv) + ) + (block + (call_indirect $FUNCSIG$v + (i32.add + (i32.and + (get_local $1) + (i32.const 3) + ) + (i32.const 377) + ) + ) + (br $while-in) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $__ZNKSt3__28numpunctIwE12do_falsenameEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (get_local $0) + (i32.const 9348) + (call $_wcslen + (i32.const 9348) + ) + ) + ) + (func $__ZNSt3__28ios_baseD2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 6288) + ) + (call $__ZNSt3__28ios_base16__call_callbacksENS0_5eventE + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__26localeD2Ev + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (call $_free + (i32.load offset=32 + (get_local $0) + ) + ) + (call $_free + (i32.load offset=36 + (get_local $0) + ) + ) + (call $_free + (i32.load offset=48 + (get_local $0) + ) + ) + (call $_free + (i32.load offset=60 + (get_local $0) + ) + ) + ) + (func $__ZNKSt3__28numpunctIwE11do_truenameEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEPKwj + (get_local $0) + (i32.const 9328) + (call $_wcslen + (i32.const 9328) + ) + ) + ) + (func $__ZNKSt3__27codecvtIcc11__mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $5) + ) + (i32.const 3) + ) + (func $_sn_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (if + (i32.gt_u + (tee_local $0 + (i32.sub + (i32.load offset=16 + (get_local $0) + ) + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + ) + ) + (get_local $2) + ) + (set_local $0 + (get_local $2) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $0) + ) + ) + (get_local $2) + ) + (func $__ZNKSt3__210moneypunctIwLb1EE16do_negative_signEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initEjw + (get_local $0) + (i32.const 1) + (i32.const 45) + ) + ) + (func $__ZNKSt3__210moneypunctIcLb1EE16do_negative_signEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEjc + (get_local $0) + (i32.const 1) + (i32.const 45) + ) + ) + (func $__ZNKSt3__28messagesIwE7do_openERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERKNS_6localeE (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (i32.shr_u + (tee_local $3 + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj + (if i32 + (i32.lt_s + (i32.load8_s offset=11 + (get_local $1) + ) + (i32.const 0) + ) + (i32.load + (get_local $1) + ) + (get_local $1) + ) + (i32.const 1) + ) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (func $__ZNKSt3__28numpunctIcE12do_falsenameEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (get_local $0) + (i32.const 15939) + (i32.const 5) + ) + ) + (func $__ZNKSt3__28numpunctIcE11do_truenameEv (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj + (get_local $0) + (i32.const 15934) + (i32.const 4) + ) + ) + (func $__ZNSt3__214__shared_count16__release_sharedEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (tee_local $0 + (if i32 + (get_local $1) + (i32.const 0) + (block i32 + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load offset=8 + (i32.load + (get_local $0) + ) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + (i32.const 1) + ) + ) + ) + ) + (func $dynCall_iiiiiiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) (result i32) + (call_indirect $FUNCSIG$iiiiiiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (get_local $7) + (get_local $8) + (i32.add + (i32.and + (get_local $0) + (i32.const 15) + ) + (i32.const 381) + ) + ) + ) + (func $_abort_message (param $0 i32) (param $1 i32) + (local $2 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (get_local $2) + (get_local $1) + ) + (drop + (call $_vfprintf + (tee_local $1 + (i32.load + (i32.const 2700) + ) + ) + (get_local $0) + (get_local $2) + ) + ) + (drop + (call $_fputc + (i32.const 10) + (get_local $1) + ) + ) + (call $_abort) + ) + (func $_snprintf (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $5 + (get_local $4) + ) + (get_local $3) + ) + (set_local $0 + (call $_vsnprintf + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $5) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $___stdio_close (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $__ZNKSt3__27codecvtIDsc11__mbstate_tE9do_lengthERS1_PKcS5_j (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (call $__ZNSt3__2L20utf8_to_utf16_lengthEPKhS1_jmNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $4) + (i32.const 1114111) + (i32.const 0) + ) + ) + (func $__ZNKSt3__27codecvtIDic11__mbstate_tE9do_lengthERS1_PKcS5_j (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (call $__ZNSt3__2L19utf8_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE + (get_local $2) + (get_local $3) + (get_local $4) + (i32.const 1114111) + (i32.const 0) + ) + ) + (func $__ZNKSt3__27codecvtIwc11__mbstate_tE13do_max_lengthEv (param $0 i32) (result i32) + (tee_local $0 + (if i32 + (tee_local $0 + (i32.load offset=8 + (get_local $0) + ) + ) + (if i32 + (tee_local $0 + (call $_uselocale + (get_local $0) + ) + ) + (block i32 + (drop + (call $_uselocale + (get_local $0) + ) + ) + (i32.const 4) + ) + (i32.const 4) + ) + (i32.const 1) + ) + ) + ) + (func $dynCall_iiiiiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (call_indirect $FUNCSIG$iiiiiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (get_local $7) + (i32.and + (get_local $0) + (i32.const 7) + ) + ) + ) + (func $_sscanf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $4 + (get_local $3) + ) + (get_local $2) + ) + (set_local $0 + (call $_vsscanf + (get_local $0) + (get_local $1) + (get_local $4) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $0) + ) + (func $_wmemset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (get_local $2) + (block + (set_local $3 + (get_local $0) + ) + (loop $while-in + (i32.store + (get_local $3) + (get_local $1) + ) + (if + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___cxa_get_globals_fast (result i32) + (local $0 i32) + (local $1 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (call $_pthread_once + (i32.const 21124) + (i32.const 2) + ) + (call $_abort_message + (i32.const 16444) + (get_local $0) + ) + (block + (set_local $1 + (call $_pthread_getspecific + (i32.load + (i32.const 21128) + ) + ) + ) + (set_global $STACKTOP + (get_local $0) + ) + (return + (get_local $1) + ) + ) + ) + (i32.const 0) + ) + (func $__ZNKSt3__210moneypunctIwLb1EE13do_pos_formatEv (param $0 i32) (param $1 i32) + (i32.store8 + (get_local $0) + (i32.const 2) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.const 3) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.const 0) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.const 4) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20976) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20968) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20960) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20952) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20912) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20904) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20896) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20084) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19272) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19264) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19256) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19232) + ) + ) + ) + (func $__ZNKSt3__27codecvtIcc11__mbstate_tE9do_lengthERS1_PKcS5_j (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (if i32 + (i32.lt_u + (tee_local $5 + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (get_local $4) + ) + (get_local $5) + (get_local $4) + ) + ) + (func $_bitshift64Shl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $__ZNSt3__27codecvtIwc11__mbstate_tED2Ev (param $0 i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.const 9136) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (call $__ZNSt3__26__clocEv) + ) + (call $__ZdlPv + (i32.load + (get_local $1) + ) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE5do_isEtw (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (i32.lt_u + (get_local $2) + (i32.const 128) + ) + (i32.ne + (i32.and + (i32.and + (i32.load16_s + (i32.add + (i32.load + (call $___ctype_b_loc) + ) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + ) + (get_local $1) + ) + (i32.const 65535) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $__ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv (param $0 i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $_free + (get_local $0) + ) + (if + (call $_pthread_setspecific + (i32.load + (i32.const 21128) + ) + (i32.const 0) + ) + (call $_abort_message + (i32.const 16341) + (get_local $1) + ) + (set_global $STACKTOP + (get_local $1) + ) + ) + ) + (func $_bitshift64Lshr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw (param $0 i32) (param $1 i32) (result i32) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwj + (get_local $0) + (get_local $1) + (call $_wcslen + (get_local $1) + ) + ) + ) + (func $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc (param $0 i32) (param $1 i32) (result i32) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcj + (get_local $0) + (get_local $1) + (call $_strlen + (get_local $1) + ) + ) + ) + (func $dynCall_iiiiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (call_indirect $FUNCSIG$iiiiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (i32.add + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 240) + ) + ) + ) + (func $__ZNKSt3__25ctypeIcE10do_tolowerEc (param $0 i32) (param $1 i32) (result i32) + (if i32 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + (i32.and + (i32.load + (i32.add + (i32.load + (call $___ctype_tolower_loc) + ) + (i32.shl + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const 2) + ) + ) + ) + (i32.const 255) + ) + (get_local $1) + ) + ) + (func $__ZNKSt3__26locale9use_facetERNS0_2idE (param $0 i32) (param $1 i32) (result i32) + (set_local $0 + (i32.load + (get_local $0) + ) + ) + (set_local $1 + (call $__ZNSt3__26locale2id5__getEv + (get_local $1) + ) + ) + (i32.load + (i32.add + (i32.load offset=8 + (get_local $0) + ) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + ) + (func $__ZNKSt3__25ctypeIcE10do_toupperEc (param $0 i32) (param $1 i32) (result i32) + (if i32 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + (i32.and + (i32.load + (i32.add + (i32.load + (call $___ctype_toupper_loc) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.const 255) + ) + (get_local $1) + ) + ) + (func $dynCall_iiiiiid (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 f64) (result i32) + (call_indirect $FUNCSIG$iiiiiid + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 44) + ) + ) + ) + (func $dynCall_viiiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) + (call_indirect $FUNCSIG$viiiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (get_local $6) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 405) + ) + ) + ) + (func $__ZNKSt3__28ios_base6getlocEv (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (call $__ZNSt3__26localeC2ERKS0_ + (tee_local $2 + (get_local $1) + ) + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (i32.load + (get_local $2) + ) + ) + (func $__ZNKSt3__25ctypeIwE10do_toupperEw (param $0 i32) (param $1 i32) (result i32) + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (i32.load + (i32.add + (i32.load + (call $___ctype_toupper_loc) + ) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (get_local $1) + ) + ) + (func $__ZNKSt3__25ctypeIwE10do_tolowerEw (param $0 i32) (param $1 i32) (result i32) + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (i32.load + (i32.add + (i32.load + (call $___ctype_tolower_loc) + ) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + ) + (get_local $1) + ) + ) + (func $__ZNKSt3__28numpunctIwE11do_groupingEv (param $0 i32) (param $1 i32) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_ + (get_local $0) + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + (func $__ZNKSt3__28numpunctIcE11do_groupingEv (param $0 i32) (param $1 i32) + (call $__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_ + (get_local $0) + (i32.add + (get_local $1) + (i32.const 12) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7codecvtIDsc11__mbstate_tEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 21016) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7codecvtIDic11__mbstate_tEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 21024) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7codecvtIwc11__mbstate_tEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 21008) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7codecvtIcc11__mbstate_tEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 21000) + ) + ) + ) + (func $__ZNKSt3__27codecvtIDsc11__mbstate_tE10do_unshiftERS1_PcS4_RS4_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.const 3) + ) + (func $dynCall_iiiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (call_indirect $FUNCSIG$iiiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (get_local $0) + (i32.const 31) + ) + (i32.const 429) + ) + ) + ) + (func $runPostSets + (nop) + ) + (func $_i64Subtract (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_10moneypunctIwLb1EEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20944) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_10moneypunctIwLb0EEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20936) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_10moneypunctIcLb1EEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20928) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_10moneypunctIcLb0EEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20920) + ) + ) + ) + (func $__ZN10__cxxabiv112_GLOBAL__N_110construct_Ev + (local $0 i32) + (set_local $0 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (call $_pthread_key_create + (i32.const 21128) + (i32.const 109) + ) + (call $_abort_message + (i32.const 16394) + (get_local $0) + ) + (set_global $STACKTOP + (get_local $0) + ) + ) + ) + (func $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev (param $0 i32) + (call $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (func $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev (param $0 i32) + (call $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + ) + ) + (func $__ZNSt3__211char_traitsIwE4moveEPwPKwj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (get_local $2) + (call $_wmemmove + (get_local $0) + (get_local $1) + (get_local $2) + ) + (get_local $0) + ) + ) + (func $__ZNSt3__211char_traitsIwE4copyEPwPKwj (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (get_local $2) + (call $_wmemcpy + (get_local $0) + (get_local $1) + (get_local $2) + ) + (get_local $0) + ) + ) + (func $dynCall_iiiiid (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 f64) (result i32) + (call_indirect $FUNCSIG$iiiiid + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 304) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8numpunctIwEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19248) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8numpunctIcEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19220) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8messagesIwEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20992) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_8messagesIcEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 20984) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7collateIwEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19200) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_7collateIcEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19192) + ) + ) + ) + (func $dynCall_viiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (call_indirect $FUNCSIG$viiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (get_local $5) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 40) + ) + ) + ) + (func $__ZNSt3__26localeC2Ev (param $0 i32) + (local $1 i32) + (i32.store + (get_local $0) + (tee_local $1 + (i32.load + (call $__ZNSt3__26locale8__globalEv) + ) + ) + ) + (call $__ZNSt3__214__shared_count12__add_sharedEv + (get_local $1) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_5ctypeIwEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19240) + ) + ) + ) + (func $__ZNSt3__26locale5__imp7installINS_5ctypeIcEEEEvPT_ (param $0 i32) (param $1 i32) + (call $__ZNSt3__26locale5__imp7installEPNS0_5facetEl + (get_local $0) + (get_local $1) + (call $__ZNSt3__26locale2id5__getEv + (i32.const 19208) + ) + ) + ) + (func $__ZNSt3__211char_traitsIwE6assignEPwjw (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (get_local $1) + (call $_wmemset + (get_local $0) + (get_local $2) + (get_local $1) + ) + (get_local $0) + ) + ) + (func $__ZNSt3__26locale5__imp11make_globalEv (result i32) + (local $0 i32) + (i32.store + (i32.const 21040) + (tee_local $0 + (i32.load + (call $__ZNSt3__26locale7classicEv) + ) + ) + ) + (call $__ZNSt3__214__shared_count12__add_sharedEv + (get_local $0) + ) + (i32.const 21040) + ) + (func $__ZNSt3__26locale8__globalEv (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17592) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17592) + ) + (block + (drop + (call $__ZNSt3__26locale5__imp11make_globalEv) + ) + (i32.store + (i32.const 21044) + (i32.const 21040) + ) + ) + ) + ) + (i32.load + (i32.const 21044) + ) + ) + (func $__ZNSt3__26locale7classicEv (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 17424) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 17424) + ) + (block + (drop + (call $__ZNSt3__26locale5__imp12make_classicEv) + ) + (i32.store + (i32.const 21036) + (i32.const 21032) + ) + ) + ) + ) + (i32.load + (i32.const 21036) + ) + ) + (func $_wcslen (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_local $0) + ) + (loop $while-in + (if + (i32.load + (get_local $1) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (br $while-in) + ) + ) + ) + (i32.shr_s + (i32.sub + (get_local $1) + (get_local $0) + ) + (i32.const 2) + ) + ) + (func $__ZNSt3__26localeC2ERKS0_ (param $0 i32) (param $1 i32) + (local $2 i32) + (i32.store + (get_local $0) + (tee_local $2 + (i32.load + (get_local $1) + ) + ) + ) + (call $__ZNSt3__214__shared_count12__add_sharedEv + (get_local $2) + ) + ) + (func $__ZNSt3__25ctypeIcED2Ev (param $0 i32) + (local $1 i32) + (i32.store + (get_local $0) + (i32.const 9204) + ) + (if + (tee_local $1 + (i32.load offset=8 + (get_local $0) + ) + ) + (if + (i32.load8_s offset=12 + (get_local $0) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev + (get_local $1) + ) + ) + ) + ) + (func $dynCall_iiiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (call_indirect $FUNCSIG$iiiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 397) + ) + ) + ) + (func $__ZTv0_n12_NSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 4) + ) + ) + ) + (func $__ZTv0_n12_NSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (i32.add + (get_local $0) + (i32.load + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -12) + ) + ) + ) + (i32.const 8) + ) + ) + ) + (func $__ZNSt3__210__time_putD2Ev (param $0 i32) + (if + (i32.ne + (i32.load + (get_local $0) + ) + (call $__ZNSt3__26__clocEv) + ) + (call $__ZdlPv + (i32.load + (get_local $0) + ) + ) + ) + ) + (func $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev (param $0 i32) + (if + (i32.lt_s + (i32.load8_s offset=11 + (get_local $0) + ) + (i32.const 0) + ) + (call $__ZdlPv + (i32.load + (get_local $0) + ) + ) + ) + ) + (func $dynCall_viiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (call_indirect $FUNCSIG$viiii + (get_local $1) + (get_local $2) + (get_local $3) + (get_local $4) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 461) + ) + ) + ) + (func $__ZNSt3__28numpunctIwED2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 9296) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + (func $__ZNSt3__28numpunctIcED2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 9256) + ) + (call $__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (func $___syscall_ret (param $0 i32) (result i32) + (if i32 + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEED0Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 6368) + ) + (call $__ZNSt3__26localeD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEED0Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 6304) + ) + (call $__ZNSt3__26localeD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev (param $0 i32) + (call $__ZNSt3__210__time_putD2Ev + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $b11 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (call $abort + (i32.const 11) + ) + (i32.const 0) + ) + (func $__ZNSt3__26locale5facet16__on_zero_sharedEv (param $0 i32) + (if + (get_local $0) + (call_indirect $FUNCSIG$vi + (get_local $0) + (i32.add + (i32.and + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + ) + (func $_i64Add (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $_uselocale (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $2 + (i32.load + (tee_local $1 + (i32.add + (call $_pthread_self) + (i32.const 184) + ) + ) + ) + ) + (if + (get_local $0) + (i32.store + (get_local $1) + (get_local $0) + ) + ) + (get_local $2) + ) + (func $__ZNSt3__28ios_base5clearEj (param $0 i32) (param $1 i32) + (i32.store offset=16 + (get_local $0) + (i32.or + (i32.eqz + (i32.load offset=24 + (get_local $0) + ) + ) + (get_local $1) + ) + ) + ) + (func $_strtoull_l (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $_strtoull + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $___cxa_is_pointer_type (param $0 i32) (result i32) + (if i32 + (get_local $0) + (i32.ne + (call $___dynamic_cast + (get_local $0) + (i32.const 2408) + (i32.const 2464) + (i32.const 0) + ) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $__ZNSt3__26__clocEv (result i32) + (if + (i32.eqz + (i32.load8_s + (i32.const 16944) + ) + ) + (if + (call $___cxa_guard_acquire + (i32.const 16944) + ) + (i32.store + (i32.const 19228) + (call $_newlocale + (i32.const 2147483647) + (i32.const 13970) + (i32.const 0) + ) + ) + ) + ) + (i32.load + (i32.const 19228) + ) + ) + (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect $FUNCSIG$iiii + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 31) + ) + (i32.const 8) + ) + ) + ) + (func $__ZNKSt3__25ctypeIwE9do_narrowEwc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + (get_local $2) + ) + ) + (func $_strtoll_l (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $_strtoll + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $__ZNKSt3__25ctypeIcE9do_narrowEcc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if i32 + (i32.gt_s + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -1) + ) + (get_local $1) + (get_local $2) + ) + ) + (func $___udivdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $__ZNSt3__26locale2id6__initEv (param $0 i32) + (local $1 i32) + (i32.store + (i32.const 19216) + (i32.add + (tee_local $1 + (i32.load + (i32.const 19216) + ) + ) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + (func $__ZNSt3__214__shared_count12__add_sharedEv (param $0 i32) + (local $1 i32) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 1) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEED2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 6368) + ) + (call $__ZNSt3__26localeD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEED2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 6304) + ) + (call $__ZNSt3__26localeD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (func $_strtoll (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $_strtox_545 + (get_local $0) + (get_local $1) + (get_local $2) + (i32.const 0) + (i32.const -2147483648) + ) + ) + (func $__ZNSt3__28time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev (param $0 i32) + (call $__ZNSt3__210__time_putD2Ev + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (func $___cxa_guard_acquire (param $0 i32) (result i32) + (if i32 + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.const 1) + ) + (i32.const 0) + (block i32 + (i32.store8 + (get_local $0) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (func $dynCall_viii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (call_indirect $FUNCSIG$viii + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 0) + ) + (i32.const 376) + ) + ) + ) + (func $b0 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $stackAlloc (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $_strtoull (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $_strtox_545 + (get_local $0) + (get_local $1) + (get_local $2) + (i32.const -1) + (i32.const -1) + ) + ) + (func $__ZNSt3__211__stdoutbufIwED0Ev (param $0 i32) + (call $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__211__stdoutbufIcED0Ev (param $0 i32) + (call $__ZNSt3__215basic_streambufIcNS_11char_traitsIcEEED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED0Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED0Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $___errno_location (result i32) + (if i32 + (i32.load + (i32.const 17600) + ) + (i32.load offset=64 + (call $_pthread_self) + ) + (i32.const 17644) + ) + ) + (func $_isxdigit (param $0 i32) (result i32) + (if i32 + (i32.lt_u + (i32.add + (get_local $0) + (i32.const -48) + ) + (i32.const 10) + ) + (i32.const 1) + (i32.lt_u + (i32.add + (i32.or + (get_local $0) + (i32.const 32) + ) + (i32.const -97) + ) + (i32.const 6) + ) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE6setbufEPwi (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (get_local $0) + ) + (func $__ZNSt3__27codecvtIwc11__mbstate_tED0Ev (param $0 i32) + (call $__ZNSt3__27codecvtIwc11__mbstate_tED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $establishStackSpace (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $_catgets (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (get_local $3) + ) + (func $__ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv (param $0 i32) + (call $___assert_fail + (i32.const 16091) + (i32.const 16120) + (i32.const 1183) + (i32.const 16197) + ) + ) + (func $dynCall_iii (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call_indirect $FUNCSIG$iii + (get_local $1) + (get_local $2) + (i32.add + (i32.and + (get_local $0) + (i32.const 15) + ) + (i32.const 413) + ) + ) + ) + (func $__ZNSt3__26localeD2Ev (param $0 i32) + (drop + (call $__ZNSt3__214__shared_count16__release_sharedEv + (i32.load + (get_local $0) + ) + ) + ) + ) + (func $_wctomb (param $0 i32) (param $1 i32) (result i32) + (if i32 + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv (param $0 i32) + (call $___assert_fail + (i32.const 15966) + (i32.const 15989) + (i32.const 304) + (i32.const 16197) + ) + ) + (func $b6 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (call $abort + (i32.const 6) + ) + (i32.const 0) + ) + (func $b3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 f64) (result i32) + (call $abort + (i32.const 3) + ) + (i32.const 0) + ) + (func $__ZNSt3__213basic_ostreamIwNS_11char_traitsIwEEED1Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (func $__ZNSt3__213basic_istreamIwNS_11char_traitsIwEEED1Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (func $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED0Ev (param $0 i32) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $setThrew (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $__ZNKSt3__28time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE13do_date_orderEv (param $0 i32) (result i32) + (i32.const 2) + ) + (func $__ZNSt3__210__stdinbufIwE9underflowEv (param $0 i32) (result i32) + (call $__ZNSt3__210__stdinbufIwE9__getcharEb + (get_local $0) + (i32.const 0) + ) + ) + (func $__ZNSt3__210__stdinbufIcE9underflowEv (param $0 i32) (result i32) + (call $__ZNSt3__210__stdinbufIcE9__getcharEb + (get_local $0) + (i32.const 0) + ) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE5imbueERKNS_6localeE (param $0 i32) (param $1 i32) + (nop) + ) + (func $dynCall_vii (param $0 i32) (param $1 i32) (param $2 i32) + (call_indirect $FUNCSIG$vii + (get_local $1) + (get_local $2) + (i32.add + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 176) + ) + ) + ) + (func $b13 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) + (call $abort + (i32.const 13) + ) + ) + (func $__ZNSt3__210__stdinbufIwE5uflowEv (param $0 i32) (result i32) + (call $__ZNSt3__210__stdinbufIwE9__getcharEb + (get_local $0) + (i32.const 1) + ) + ) + (func $__ZNSt3__210__stdinbufIcE5uflowEv (param $0 i32) (result i32) + (call $__ZNSt3__210__stdinbufIcE9__getcharEb + (get_local $0) + (i32.const 1) + ) + ) + (func $_mbsinit (param $0 i32) (result i32) + (if i32 + (get_local $0) + (i32.eqz + (i32.load + (get_local $0) + ) + ) + (i32.const 1) + ) + ) + (func $_mbrlen (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $_mbrtowc + (i32.const 0) + (get_local $0) + (get_local $1) + (if i32 + (get_local $2) + (get_local $2) + (i32.const 17660) + ) + ) + ) + (func $__ZNSt3__26locale5__imp12make_classicEv (result i32) + (call $__ZNSt3__26locale5__impC2Ej + (i32.const 17432) + (i32.const 1) + ) + (i32.store + (i32.const 21032) + (i32.const 17432) + ) + (i32.const 21032) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9pbackfailEj (param $0 i32) (param $1 i32) (result i32) + (i32.const -1) + ) + (func $_do_read (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $___string_read + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (func $__ZNSt3__26locale5__impD0Ev (param $0 i32) + (call $__ZNSt3__26locale5__impD2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $b15 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (call $abort + (i32.const 15) + ) + (i32.const 0) + ) + (func $__ZNSt3__28numpunctIwED0Ev (param $0 i32) + (call $__ZNSt3__28numpunctIwED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__28numpunctIcED0Ev (param $0 i32) + (call $__ZNSt3__28numpunctIcED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__GLOBAL__I_000101 + (call $__ZNSt3__28ios_base4InitC2Ev + (i32.const 0) + ) + (drop + (call $___cxa_atexit + (i32.const 96) + (i32.const 23208) + (get_global $___dso_handle) + ) + ) + ) + (func $b7 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 f64) (result i32) + (call $abort + (i32.const 7) + ) + (i32.const 0) + ) + (func $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev (param $0 i32) + (nop) + ) + (func $__ZNSt3__28ios_baseD0Ev (param $0 i32) + (call $__ZNSt3__28ios_baseD2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNSt3__25ctypeIcED0Ev (param $0 i32) + (call $__ZNSt3__25ctypeIcED2Ev + (get_local $0) + ) + (call $__ZdlPv + (get_local $0) + ) + ) + (func $__ZNKSt3__28numpunctIwE16do_thousands_sepEv (param $0 i32) (result i32) + (i32.load offset=12 + (get_local $0) + ) + ) + (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 63) + ) + (i32.const 312) + ) + ) + ) + (func $__ZNKSt3__28numpunctIwE16do_decimal_pointEv (param $0 i32) (result i32) + (i32.load offset=8 + (get_local $0) + ) + ) + (func $__ZNKSt3__28numpunctIcE16do_thousands_sepEv (param $0 i32) (result i32) + (i32.load8_s offset=9 + (get_local $0) + ) + ) + (func $__ZNKSt3__28numpunctIcE16do_decimal_pointEv (param $0 i32) (result i32) + (i32.load8_s offset=8 + (get_local $0) + ) + ) + (func $__ZNKSt3__25ctypeIwE8do_widenEc (param $0 i32) (param $1 i32) (result i32) + (i32.shr_s + (i32.shl + (get_local $1) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (func $b2 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (call $abort + (i32.const 2) + ) + ) + (func $__ZSt15get_new_handlerv (result i32) + (local $0 i32) + (i32.store + (i32.const 21132) + (tee_local $0 + (i32.load + (i32.const 21132) + ) + ) + ) + (get_local $0) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9underflowEv (param $0 i32) (result i32) + (i32.const -1) + ) + (func $__ZNSt3__215basic_streambufIwNS_11char_traitsIwEEE9showmanycEv (param $0 i32) (result i32) + (i32.const 0) + ) + (func $b12 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $abort + (i32.const 12) + ) + (i32.const 0) + ) + (func $__ZNKSt3__210moneypunctIwLb1EE16do_thousands_sepEv (param $0 i32) (result i32) + (i32.const 2147483647) + ) + (func $dynCall_vi (param $0 i32) (param $1 i32) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 127) + ) + (i32.const 48) + ) + ) + ) + (func $_strtold_l (param $0 i32) (param $1 i32) (param $2 i32) (result f64) + (call $_strtox + (get_local $0) + (get_local $1) + (i32.const 2) + ) + ) + (func $__ZNKSt3__27codecvtIcc11__mbstate_tE16do_always_noconvEv (param $0 i32) (result i32) + (i32.const 1) + ) + (func $_cleanup_522 (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $__ZNSt3__29money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev + (get_local $0) + ) + ) + ) + (func $__ZNKSt3__27codecvtIDsc11__mbstate_tE13do_max_lengthEv (param $0 i32) (result i32) + (i32.const 4) + ) + (func $__ZNKSt3__25ctypeIcE8do_widenEc (param $0 i32) (param $1 i32) (result i32) + (get_local $1) + ) + (func $__ZNKSt3__210moneypunctIcLb1EE16do_thousands_sepEv (param $0 i32) (result i32) + (i32.const 127) + ) + (func $b16 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (call $abort + (i32.const 16) + ) + ) + (func $_isspace (param $0 i32) (result i32) + (i32.or + (i32.eq + (get_local $0) + (i32.const 32) + ) + (i32.lt_u + (i32.add + (get_local $0) + (i32.const -9) + ) + (i32.const 5) + ) + ) + ) + (func $_isdigit_l (param $0 i32) (param $1 i32) (result i32) + (i32.lt_u + (i32.add + (get_local $0) + (i32.const -48) + ) + (i32.const 10) + ) + ) + (func $__ZNSt9bad_allocC2Ev (param $0 i32) + (i32.store + (get_local $0) + (i32.const 9700) + ) + ) + (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $_isxdigit_l (param $0 i32) (param $1 i32) (result i32) + (call $_isxdigit + (get_local $0) + ) + ) + (func $_copysignl (param $0 f64) (param $1 f64) (result f64) + (call $_copysign + (get_local $0) + (get_local $1) + ) + ) + (func $_scalbnl (param $0 f64) (param $1 i32) (result f64) + (call $_scalbn + (get_local $0) + (get_local $1) + ) + ) + (func $dynCall_v (param $0 i32) + (call_indirect $FUNCSIG$v + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 377) + ) + ) + ) + (func $_frexpl (param $0 f64) (param $1 i32) (result f64) + (call $_frexp + (get_local $0) + (get_local $1) + ) + ) + (func $b9 (param $0 i32) (param $1 i32) (param $2 i32) + (call $abort + (i32.const 9) + ) + ) + (func $__ZNKSt9bad_alloc4whatEv (param $0 i32) (result i32) + (i32.const 16821) + ) + (func $_fmodl (param $0 f64) (param $1 f64) (result f64) + (call $_fmod + (get_local $0) + (get_local $1) + ) + ) + (func $b14 (param $0 i32) (param $1 i32) (result i32) + (call $abort + (i32.const 14) + ) + (i32.const 0) + ) + (func $setTempRet0 (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $__ZdlPv (param $0 i32) + (call $_free + (get_local $0) + ) + ) + (func $stackRestore (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $b5 (param $0 i32) (param $1 i32) + (call $abort + (i32.const 5) + ) + ) + (func $b8 (param $0 i32) (result i32) + (call $abort + (i32.const 8) + ) + (i32.const 0) + ) + (func $___ctype_toupper_loc (result i32) + (i32.const 4708) + ) + (func $___ctype_tolower_loc (result i32) + (i32.const 3168) + ) + (func $getTempRet0 (result i32) + (get_global $tempRet0) + ) + (func $stackSave (result i32) + (get_global $STACKTOP) + ) + (func $b4 (param $0 i32) + (call $abort + (i32.const 4) + ) + ) + (func $___ctype_b_loc (result i32) + (i32.const 3164) + ) + (func $_pthread_self (result i32) + (i32.const 0) + ) + (func $b10 + (call $abort + (i32.const 10) + ) + ) +) diff --git a/libraries/wasm-jit/Test/Blake2b/blake2b.wast b/libraries/wasm-jit/Test/Blake2b/blake2b.wast new file mode 100644 index 000000000..046b74d3a --- /dev/null +++ b/libraries/wasm-jit/Test/Blake2b/blake2b.wast @@ -0,0 +1,1344 @@ +;; Blake2b hash function + +(module + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdout" (global $stdoutPtr i32)) + (import "env" "memory" (memory 1)) + (import "env" "_sbrk" (func $sbrk (param i32) (result i32))) + (export "main" (func $main)) + + (table anyfunc (elem $threadEntry $threadError)) + + (global $numThreads i32 (i32.const 8)) + (global $numIterationsPerThread i32 (i32.const 10)) + + ;; IV array + (global $ivAddress i32 (i32.const 0)) ;; 64 byte IV array + (data (i32.const 0) + "\08\c9\bc\f3\67\e6\09\6a" + "\3b\a7\ca\84\85\ae\67\bb" + "\2b\f8\94\fe\72\f3\6e\3c" + "\f1\36\1d\5f\3a\f5\4f\a5" + "\d1\82\e6\ad\7f\52\0e\51" + "\1f\6c\3e\2b\8c\68\05\9b" + "\6b\bd\41\fb\ab\d9\83\1f" + "\79\21\7e\13\19\cd\e0\5b" + ) + + (global $pAddress i32 (i32.const 64)) ;; 64 byte Param struct + (data (i32.const 64) + "\40" ;; digest_length + "\00" ;; key_length + "\01" ;; fanout + "\01" ;; depth + "\00\00\00\00" ;; leaf_length + "\00\00\00\00" ;; node_offset + "\00\00\00\00" ;; xof_length + "\00" ;; node_depth + "\00" ;; inner_length + "\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; reserved + "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; salt + "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00" ;; personal + ) + + ;; lookup table for converting a nibble to a hexit + (global $hexitTable i32 (i32.const 128)) + (data (i32.const 128) "0123456789abcdef") + + (global $dataAddress (mut i32) (i32.const 0)) + (global $dataNumBytes (mut i32) (i32.const 134217728)) + + (global $numPendingThreadsAddress i32 (i32.const 144)) ;; 4 bytes + (global $outputStringAddress i32 (i32.const 148)) ;; 129 bytes + + (global $statesArrayAddress i32 (i32.const 1024)) ;; 128*N per-thread state blocks. + + (func $compress + (param $threadStateAddress i32) + (param $blockAddress i32) + + (local $row1l v128) + (local $row1h v128) + (local $row2l v128) + (local $row2h v128) + (local $row3l v128) + (local $row3h v128) + (local $row4l v128) + (local $row4h v128) + (local $b0 v128) + (local $b1 v128) + (local $t0 v128) + (local $t1 v128) + + ;; Initialize the state + + (set_local $row1l (v128.load offset=0 (get_local $threadStateAddress))) + (set_local $row1h (v128.load offset=16 (get_local $threadStateAddress))) + (set_local $row2l (v128.load offset=32 (get_local $threadStateAddress))) + (set_local $row2h (v128.load offset=48 (get_local $threadStateAddress))) + (set_local $row3l (v128.load offset=0 (get_global $ivAddress))) + (set_local $row3h (v128.load offset=16 (get_global $ivAddress))) + (set_local $row4l (v128.xor (v128.load offset=32 (get_global $ivAddress)) (v128.load offset=64 (get_local $threadStateAddress)))) + (set_local $row4h (v128.xor (v128.load offset=48 (get_global $ivAddress)) (v128.load offset=80 (get_local $threadStateAddress)))) + + ;; Round 0 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 1 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7) (v128.load offset=0 (get_local $blockAddress)) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 2 + + (set_local $b0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v128.bitselect (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 3 + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v128.bitselect (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v128.bitselect (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 4 + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v128.bitselect (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v128.bitselect (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v128.bitselect (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v128.bitselect (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 5 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v128.bitselect (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 6 + + (set_local $b0 (v128.bitselect (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7) (v128.load offset=64 (get_local $blockAddress)) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 7 + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 8 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v128.load offset=96 (get_local $blockAddress))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v128.bitselect (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + (set_local $b1 (v128.load offset=32 (get_local $blockAddress))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 9 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v128.bitselect (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)) (v128.const 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0 0 0 0 0 0 0 0))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=16 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=0 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 10 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=0 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=32 (get_local $blockAddress)) (v128.load offset=48 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=80 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Round 11 + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=112 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=64 (get_local $blockAddress)) (v128.load offset=96 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=64 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=112 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + (set_local $b0 (v8x16.shuffle (8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7) (v128.load offset=0 (get_local $blockAddress)) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=80 (get_local $blockAddress)) (v128.load offset=32 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row2h (v8x16.shuffle (3 4 5 6 7 0 1 2 11 12 13 14 15 8 9 10) (get_local $row2h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + + (set_local $b0 (v8x16.shuffle (0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23) (v128.load offset=96 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + (set_local $b1 (v8x16.shuffle (8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31) (v128.load offset=48 (get_local $blockAddress)) (v128.load offset=16 (get_local $blockAddress)))) + + (set_local $row1l (i64x2.add (i64x2.add (get_local $row1l) (get_local $b0)) (get_local $row2l))) + (set_local $row1h (i64x2.add (i64x2.add (get_local $row1h) (get_local $b1)) (get_local $row2h))) + (set_local $row4l (v128.xor (get_local $row4l) (get_local $row1l))) + (set_local $row4h (v128.xor (get_local $row4h) (get_local $row1h))) + (set_local $row4l (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4l) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row4h (v8x16.shuffle (2 3 4 5 6 7 0 1 10 11 12 13 14 15 8 9) (get_local $row4h) (v128.const 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))) + (set_local $row3l (i64x2.add (get_local $row3l) (get_local $row4l))) + (set_local $row3h (i64x2.add (get_local $row3h) (get_local $row4h))) + (set_local $row2l (v128.xor (get_local $row2l) (get_local $row3l))) + (set_local $row2h (v128.xor (get_local $row2h) (get_local $row3h))) + (set_local $row2l (v128.xor (i64x2.shr_u (get_local $row2l) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2l) (get_local $row2l)))) + (set_local $row2h (v128.xor (i64x2.shr_u (get_local $row2h) (i64x2.splat (i64.const 63))) (i64x2.add (get_local $row2h) (get_local $row2h)))) + + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2l) (get_local $row2h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row2h) (get_local $row2l))) + (set_local $row2l (get_local $t0)) + (set_local $row2h (get_local $t1)) + (set_local $t0 (get_local $row3l)) + (set_local $row3l (get_local $row3h)) + (set_local $row3h (get_local $t0)) + (set_local $t0 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4l) (get_local $row4h))) + (set_local $t1 (v8x16.shuffle (24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7) (get_local $row4h) (get_local $row4l))) + (set_local $row4l (get_local $t1)) + (set_local $row4h (get_local $t0)) + + ;; Update the hash + + (set_local $row1l (v128.xor (get_local $row3l) (get_local $row1l))) + (set_local $row1h (v128.xor (get_local $row3h) (get_local $row1h))) + (v128.store offset=0 (get_local $threadStateAddress) (v128.xor (v128.load offset=0 (get_local $threadStateAddress)) (get_local $row1l))) + (v128.store offset=16 (get_local $threadStateAddress) (v128.xor (v128.load offset=16 (get_local $threadStateAddress)) (get_local $row1h))) + (set_local $row2l (v128.xor (get_local $row4l) (get_local $row2l))) + (set_local $row2h (v128.xor (get_local $row4h) (get_local $row2h))) + (v128.store offset=32 (get_local $threadStateAddress) (v128.xor (v128.load offset=32 (get_local $threadStateAddress)) (get_local $row2l))) + (v128.store offset=48 (get_local $threadStateAddress) (v128.xor (v128.load offset=48 (get_local $threadStateAddress)) (get_local $row2h))) + ) + + (func $memsetAligned + (param $address i32) + (param $value i32) + (param $numBytes i32) + + (local $value128 v128) + (local $endAddress i32) + (local $endAddress128 i32) + + (set_local $value128 (i8x16.splat (get_local $value))) + (set_local $endAddress (i32.add (get_local $address) (get_local $numBytes))) + (set_local $endAddress128 (i32.sub (get_local $endAddress) (i32.const 16))) + + block $loop128End + loop $loop128 + (br_if $loop128End (i32.gt_u (get_local $address) (get_local $endAddress128))) + (v128.store align=16 (get_local $address) (get_local $value128)) + (set_local $address (i32.add (get_local $address) (i32.const 16))) + br $loop128 + end + end + + block $loopEnd + loop $loop + (br_if $loopEnd (i32.ge_u (get_local $address) (get_local $endAddress))) + (i32.store8 (get_local $address) (get_local $value)) + (set_local $address (i32.add (get_local $address) (i32.const 1))) + br $loop + end + end + ) + + (func $blake2b + (param $threadIndex i32) + (param $inputAddress i32) + (param $numBytes i32) + + (local $threadStateAddress i32) + (local $temp i64) + + (set_local $threadStateAddress (i32.add (get_global $statesArrayAddress) (i32.mul (get_local $threadIndex) (i32.const 128)))) + + ;; zero the state + (call $memsetAligned (get_local $threadStateAddress) (i32.const 0) (i32.const 128)) + + ;; initialize the hash to the first 64 bytes of the param struct XORed with the contents of IV + (v128.store offset=0 (get_local $threadStateAddress) (v128.xor + (v128.load offset=0 (get_global $pAddress)) + (v128.load offset=0 (get_global $ivAddress)))) + (v128.store offset=16 (get_local $threadStateAddress) (v128.xor + (v128.load offset=16 (get_global $pAddress)) + (v128.load offset=16 (get_global $ivAddress)))) + (v128.store offset=32 (get_local $threadStateAddress) (v128.xor + (v128.load offset=32 (get_global $pAddress)) + (v128.load offset=32 (get_global $ivAddress)))) + (v128.store offset=48 (get_local $threadStateAddress) (v128.xor + (v128.load offset=48 (get_global $pAddress)) + (v128.load offset=48 (get_global $ivAddress)))) + + block $loopEnd + loop $loop + (br_if $loopEnd (i32.lt_u (get_local $numBytes) (i32.const 128))) + + (set_local $temp (i64.add (i64.load offset=64 (get_local $threadStateAddress)) (i64.const 128))) + (i64.store offset=64 (get_local $threadStateAddress) (get_local $temp)) + (i64.store offset=72 (get_local $threadStateAddress) (i64.add + (i64.load offset=72 (get_local $threadStateAddress)) + (i64.extend_u/i32 (i64.lt_u (get_local $temp) (i64.const 128))))) + + (if (i32.eq (get_local $numBytes) (i32.const 128)) + (i64.store offset=80 (get_local $threadStateAddress) (i64.const 0xffffffffffffffff))) + + (call $compress (get_local $threadStateAddress) (get_local $inputAddress)) + + (set_local $inputAddress (i32.add (get_local $inputAddress) (i32.const 128))) + (set_local $numBytes (i32.sub (get_local $numBytes) (i32.const 128))) + br $loop + end + end + ) + + (func $threadEntry + (param $threadIndex i32) + + (local $i i32) + + ;; Hash the test data enough times to dilute all the non-hash components of the timing. + (set_local $i (i32.const 0)) + loop $iterLoop + (call $blake2b (get_local $threadIndex) (get_global $dataAddress) (get_global $dataNumBytes)) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (br_if $iterLoop (i32.lt_u (get_local $i) (get_global $numIterationsPerThread))) + end + + (i32.eq (i32.const 1) (i32.atomic.rmw.sub (get_global $numPendingThreadsAddress) (i32.const 1))) + if + (drop (wake (get_global $numPendingThreadsAddress) (i32.const 1))) + end + ) + + (func $threadError + (param $threadIndex i32) + + ;; Set the thread error flag and wake the main thread. + (i32.atomic.store (get_global $numPendingThreadsAddress) (i32.const -1)) + (drop (wake (get_global $numPendingThreadsAddress) (i32.const 1))) + ) + + (func $main + (result i32) + (local $stdout i32) + (local $i i32) + (local $byte i32) + + ;; Initialize the test data. + (set_global $dataAddress (call $sbrk (get_global $dataNumBytes))) + (set_local $i (i32.const 0)) + loop $initDataLoop + (i32.store (i32.add (get_global $dataAddress) (get_local $i)) (get_local $i)) + (set_local $i (i32.add (get_local $i) (i32.const 4))) + (br_if $initDataLoop (i32.lt_u (get_local $i) (get_global $dataNumBytes))) + end + + ;; Launch the threads. + (i32.atomic.store (get_global $numPendingThreadsAddress) (get_global $numThreads)) + (set_local $i (i32.const 0)) + loop $threadLoop + (launch_thread (i32.const 0) (get_local $i) (i32.const 1)) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (br_if $threadLoop (i32.lt_u (get_local $i) (get_global $numThreads))) + end + + ;; Wait for the threads to finish. + block $waitLoopEnd + loop $waitLoop + (set_local $i (i32.atomic.load (get_global $numPendingThreadsAddress))) + (br_if $waitLoopEnd (i32.le_s (get_local $i) (i32.const 0))) + (drop (i32.wait (get_global $numPendingThreadsAddress) (get_local $i) (f64.const +inf))) + (br $waitLoop) + end + end + + (i32.eq (i32.atomic.load (get_global $numPendingThreadsAddress)) (i32.const 0)) + if + ;; Create a hexadecimal string from the hash. + (set_local $i (i32.const 0)) + loop $loop + (set_local $byte (i32.load8_u (i32.add (get_global $statesArrayAddress) (get_local $i)))) + (i32.store8 offset=0 + (i32.add (get_global $outputStringAddress) (i32.shl (get_local $i) (i32.const 1))) + (i32.load8_u (i32.add (get_global $hexitTable) (i32.and (get_local $byte) (i32.const 0x0f))))) + (i32.store8 offset=1 + (i32.add (get_global $outputStringAddress) (i32.shl (get_local $i) (i32.const 1))) + (i32.load8_u (i32.add (get_global $hexitTable) (i32.shr_u (get_local $byte) (i32.const 4))))) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (br_if $loop (i32.lt_u (get_local $i) (i32.const 64))) + end + (i32.store8 offset=128 (get_global $outputStringAddress) (i32.const 10)) + + ;; Print the string to the output. + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + (return (call $__fwrite (get_global $outputStringAddress) (i32.const 1) (i32.const 129) (get_local $stdout))) + end + + (return (i32.const 1)) + ) + + (func (export "establishStackSpace") (param i32 i32) (nop)) +) \ No newline at end of file diff --git a/libraries/wasm-jit/Test/fuzz/address.wast b/libraries/wasm-jit/Test/fuzz/address.wast new file mode 100644 index 000000000..7800b8f50 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/address.wast @@ -0,0 +1,30 @@ +(module + (import "spectest" "print" (func $print (param i32))) + + (memory 1) + (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") + + (func $good (param $i i32) + (call $print (i32.load8_u offset=0 (get_local $i))) ;; 97 'a' + (call $print (i32.load8_u offset=1 (get_local $i))) ;; 98 'b' + (call $print (i32.load8_u offset=2 (get_local $i))) ;; 99 'c' + (call $print (i32.load8_u offset=25 (get_local $i))) ;; 122 'z' + + (call $print (i32.load16_u offset=0 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u align=1 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u offset=1 align=1 (get_local $i))) ;; 25442 'bc' + (call $print (i32.load16_u offset=2 (get_local $i))) ;; 25699 'cd' + (call $print (i32.load16_u offset=25 align=1 (get_local $i))) ;; 122 'z\0' + + (call $print (i32.load offset=0 (get_local $i))) ;; 1684234849 'abcd' + (call $print (i32.load offset=1 align=1 (get_local $i))) ;; 1701077858 'bcde' + (call $print (i32.load offset=2 align=2 (get_local $i))) ;; 1717920867 'cdef' + (call $print (i32.load offset=25 align=1 (get_local $i))) ;; 122 'z\0\0\0' + ) + + (func (export "main") + (call $good (i32.const 0)) + (call $good (i32.const 65507)) + (call $good (i32.const 65508)) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/echo.wast b/libraries/wasm-jit/Test/fuzz/echo.wast new file mode 100644 index 000000000..53dda3244 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/echo.wast @@ -0,0 +1,63 @@ +;; Classic Unix echo program in WebAssembly WASM AST + +(module + (data (i32.const 8) "\n\00") + (data (i32.const 12) " \00") + + (import "env" "memory" (memory 1)) + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdout" (global $stdoutPtr (mut i32))) + (export "main" (func $main)) + + (func $strlen (param $s i32) (result i32) + (local $head i32) + (set_local $head (get_local $s)) + (loop $loop + (block $done + (br_if $done (i32.eq (i32.const 0) (i32.load8_u offset=0 (get_local $head)))) + (set_local $head (i32.add (get_local $head) (i32.const 1))) + ;; Would it be worth unrolling offset 1,2,3? + (br $loop) + ) + ) + (return (i32.sub (get_local $head) (get_local $s))) + ) + + (func $fputs (param $s i32) (param $stream i32) (result i32) + (local $len i32) + (set_local $len (call $strlen (get_local $s))) + (return (call $__fwrite + (get_local $s) ;; ptr + (i32.const 1) ;; size_t size => Data size + (get_local $len) ;; size_t nmemb => Length of our string + (get_local $stream))) ;; stream + ) + + (func $main (param $argc i32) (param $argv i32) (result i32) + (local $stdout i32) + (local $s i32) + (local $space i32) + (set_local $space (i32.const 0)) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + + (loop $loop + (block $done + (set_local $argv (i32.add (get_local $argv) (i32.const 4))) + (set_local $s (i32.load (get_local $argv))) + (br_if $done (i32.eq (i32.const 0) (get_local $s))) + + (if (i32.eq (i32.const 1) (get_local $space)) + (drop (call $fputs (i32.const 12) (get_local $stdout))) ;; ' ' + ) + (set_local $space (i32.const 1)) + + (drop (call $fputs (get_local $s) (get_local $stdout))) + (br $loop) + ) + ) + + (drop (call $fputs (i32.const 8) (get_local $stdout))) ;; \n + + (return (i32.const 0)) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/func_ptrs.wast b/libraries/wasm-jit/Test/fuzz/func_ptrs.wast new file mode 100644 index 000000000..652a65434 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/func_ptrs.wast @@ -0,0 +1,36 @@ +(module + (type $T (func (param) (result i32))) + (type $U (func (param) (result i32))) + (table anyfunc (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) + + (func $t1 (type $T) (i32.const 1)) + (func $t2 (type $T) (i32.const 2)) + (func $t3 (type $T) (i32.const 3)) + (func $u1 (type $U) (i32.const 4)) + (func $u2 (type $U) (i32.const 5)) + + (func $callt (param $i i32) (result i32) + (call_indirect $T (get_local $i)) + ) + + (func $callu (param $i i32) (result i32) + (call_indirect $U (get_local $i)) + ) + + (func (export "main") + (drop (call $callt (i32.const 0))) + (drop (call $callt (i32.const 1))) + (drop (call $callt (i32.const 2))) + (drop (call $callt (i32.const 3))) + (drop (call $callt (i32.const 4))) + (drop (call $callt (i32.const 5))) + (drop (call $callt (i32.const 6))) + (drop (call $callu (i32.const 0))) + (drop (call $callu (i32.const 1))) + (drop (call $callu (i32.const 2))) + (drop (call $callu (i32.const 3))) + (drop (call $callu (i32.const 4))) + (drop (call $callu (i32.const 5))) + (drop (call $callu (i32.const 6))) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/globals.wast b/libraries/wasm-jit/Test/fuzz/globals.wast new file mode 100644 index 000000000..9b4306874 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/globals.wast @@ -0,0 +1,49 @@ +;; Test globals + +(module + (global $a i32 (i32.const -2)) + (global (;1;) f32 (f32.const -3)) + (global (;2;) f64 (f64.const -4)) + (global $b i64 (i64.const -5)) + + (global $x (mut i32) (i32.const -12)) + (global (;5;) (mut f32) (f32.const -13)) + (global (;6;) (mut f64) (f64.const -14)) + (global $y (mut i64) (i64.const -15)) + + (func $get-a (result i32) (get_global $a)) + (func $get-b (result i64) (get_global $b)) + (func $get-x (result i32) (get_global $x)) + (func $get-y (result i64) (get_global $y)) + (func $set-x (param i32) (set_global $x (get_local 0))) + (func $set-y (param i64) (set_global $y (get_local 0))) + + (func $get-1 (result f32) (get_global 1)) + (func $get-2 (result f64) (get_global 2)) + (func $get-5 (result f32) (get_global 5)) + (func $get-6 (result f64) (get_global 6)) + (func $set-5 (param f32) (set_global 5 (get_local 0))) + (func $set-6 (param f64) (set_global 6 (get_local 0))) + + (func (export "main") + (drop (call $get-a)) + (drop (call $get-b)) + (drop (call $get-x)) + (drop (call $get-y)) + + (drop (call $get-1)) + (drop (call $get-2)) + (drop (call $get-5)) + (drop (call $get-6)) + + (call $set-x (i32.const 6)) + (call $set-y (i64.const 7)) + (call $set-5 (f32.const 8)) + (call $set-6 (f64.const 9)) + + (drop (call $get-x)) + (drop (call $get-y)) + (drop (call $get-5)) + (drop (call $get-6)) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/helloworld.wast b/libraries/wasm-jit/Test/fuzz/helloworld.wast new file mode 100644 index 000000000..f9c659b62 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/helloworld.wast @@ -0,0 +1,24 @@ +;; WebAssembly WASM AST Hello World! program + +(module + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdout" (global $stdoutPtr (mut i32))) + (import "env" "memory" (memory 1)) + (export "main" (func $main)) + + (data (i32.const 8) "Hello World!\n") + + (func (export "establishStackSpace") (param i32 i32) (nop)) + + (func $main (result i32) + (local $stdout i32) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + + (return (call $__fwrite + (i32.const 8) ;; void *ptr => Address of our string + (i32.const 1) ;; size_t size => Data size + (i32.const 13) ;; size_t nmemb => Length of our string + (get_local $stdout)) ;; stream + ) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/i32.wast b/libraries/wasm-jit/Test/fuzz/i32.wast new file mode 100644 index 000000000..2ee5f32c7 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/i32.wast @@ -0,0 +1,369 @@ +;; i32 operations + +(module + (func $add (param $x i32) (param $y i32) (result i32) (i32.add (get_local $x) (get_local $y))) + (func $sub (param $x i32) (param $y i32) (result i32) (i32.sub (get_local $x) (get_local $y))) + (func $mul (param $x i32) (param $y i32) (result i32) (i32.mul (get_local $x) (get_local $y))) + (func $div_s (param $x i32) (param $y i32) (result i32) (i32.div_s (get_local $x) (get_local $y))) + (func $div_u (param $x i32) (param $y i32) (result i32) (i32.div_u (get_local $x) (get_local $y))) + (func $rem_s (param $x i32) (param $y i32) (result i32) (i32.rem_s (get_local $x) (get_local $y))) + (func $rem_u (param $x i32) (param $y i32) (result i32) (i32.rem_u (get_local $x) (get_local $y))) + (func $and (param $x i32) (param $y i32) (result i32) (i32.and (get_local $x) (get_local $y))) + (func $or (param $x i32) (param $y i32) (result i32) (i32.or (get_local $x) (get_local $y))) + (func $xor (param $x i32) (param $y i32) (result i32) (i32.xor (get_local $x) (get_local $y))) + (func $shl (param $x i32) (param $y i32) (result i32) (i32.shl (get_local $x) (get_local $y))) + (func $shr_s (param $x i32) (param $y i32) (result i32) (i32.shr_s (get_local $x) (get_local $y))) + (func $shr_u (param $x i32) (param $y i32) (result i32) (i32.shr_u (get_local $x) (get_local $y))) + (func $rotl (param $x i32) (param $y i32) (result i32) (i32.rotl (get_local $x) (get_local $y))) + (func $rotr (param $x i32) (param $y i32) (result i32) (i32.rotr (get_local $x) (get_local $y))) + (func $clz (param $x i32) (result i32) (i32.clz (get_local $x))) + (func $ctz (param $x i32) (result i32) (i32.ctz (get_local $x))) + (func $popcnt (param $x i32) (result i32) (i32.popcnt (get_local $x))) + (func $eqz (param $x i32) (result i32) (i32.eqz (get_local $x))) + (func $eq (param $x i32) (param $y i32) (result i32) (i32.eq (get_local $x) (get_local $y))) + (func $ne (param $x i32) (param $y i32) (result i32) (i32.ne (get_local $x) (get_local $y))) + (func $lt_s (param $x i32) (param $y i32) (result i32) (i32.lt_s (get_local $x) (get_local $y))) + (func $lt_u (param $x i32) (param $y i32) (result i32) (i32.lt_u (get_local $x) (get_local $y))) + (func $le_s (param $x i32) (param $y i32) (result i32) (i32.le_s (get_local $x) (get_local $y))) + (func $le_u (param $x i32) (param $y i32) (result i32) (i32.le_u (get_local $x) (get_local $y))) + (func $gt_s (param $x i32) (param $y i32) (result i32) (i32.gt_s (get_local $x) (get_local $y))) + (func $gt_u (param $x i32) (param $y i32) (result i32) (i32.gt_u (get_local $x) (get_local $y))) + (func $ge_s (param $x i32) (param $y i32) (result i32) (i32.ge_s (get_local $x) (get_local $y))) + (func $ge_u (param $x i32) (param $y i32) (result i32) (i32.ge_u (get_local $x) (get_local $y))) + + (func (export "main") + (drop (call $add (i32.const 1) (i32.const 1))) + (drop (call $add (i32.const 1) (i32.const 0))) + (drop (call $add (i32.const -1) (i32.const -1)) ) + (drop (call $add (i32.const -1) (i32.const 1))) + (drop (call $add (i32.const 0x7fffffff) (i32.const 1))) + (drop (call $add (i32.const 0x80000000) (i32.const -1))) + (drop (call $add (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $add (i32.const 0x3fffffff) (i32.const 1))) + (drop (call $sub (i32.const 1) (i32.const 1))) + (drop (call $sub (i32.const 1) (i32.const 0))) + (drop (call $sub (i32.const -1) (i32.const -1))) + (drop (call $sub (i32.const 0x7fffffff) (i32.const -1))) + (drop (call $sub (i32.const 0x80000000) (i32.const 1))) + (drop (call $sub (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $sub (i32.const 0x3fffffff) (i32.const -1))) + (drop (call $mul (i32.const 1) (i32.const 1))) + (drop (call $mul (i32.const 1) (i32.const 0))) + (drop (call $mul (i32.const -1) (i32.const -1))) + (drop (call $mul (i32.const 0x10000000) (i32.const 4096))) + (drop (call $mul (i32.const 0x80000000) (i32.const 0))) + (drop (call $mul (i32.const 0x80000000) (i32.const -1))) + (drop (call $mul (i32.const 0x7fffffff) (i32.const -1))) + (drop (call $mul (i32.const 0x01234567) (i32.const 0x76543210))) + (drop (call $div_s (i32.const 1) (i32.const 1))) + (drop (call $div_s (i32.const 0) (i32.const 1))) + (drop (call $div_s (i32.const -1) (i32.const -1))) + (drop (call $div_s (i32.const 0x80000000) (i32.const 2))) + (drop (call $div_s (i32.const 0x80000001) (i32.const 1000))) + (drop (call $div_s (i32.const 5) (i32.const 2))) + (drop (call $div_s (i32.const -5) (i32.const 2)) ) + (drop (call $div_s (i32.const 5) (i32.const -2)) ) + (drop (call $div_s (i32.const -5) (i32.const -2))) + (drop (call $div_s (i32.const 7) (i32.const 3))) + (drop (call $div_s (i32.const -7) (i32.const 3)) ) + (drop (call $div_s (i32.const 7) (i32.const -3)) ) + (drop (call $div_s (i32.const -7) (i32.const -3))) + (drop (call $div_s (i32.const 11) (i32.const 5))) + (drop (call $div_s (i32.const 17) (i32.const 7))) + (drop (call $div_u (i32.const 1) (i32.const 1))) + (drop (call $div_u (i32.const 0) (i32.const 1))) + (drop (call $div_u (i32.const -1) (i32.const -1))) + (drop (call $div_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $div_u (i32.const 0x80000000) (i32.const 2))) + (drop (call $div_u (i32.const 0x8ff00ff0) (i32.const 0x10001))) + (drop (call $div_u (i32.const 0x80000001) (i32.const 1000))) + (drop (call $div_u (i32.const 5) (i32.const 2))) + (drop (call $div_u (i32.const -5) (i32.const 2))) + (drop (call $div_u (i32.const 5) (i32.const -2))) + (drop (call $div_u (i32.const -5) (i32.const -2))) + (drop (call $div_u (i32.const 7) (i32.const 3))) + (drop (call $div_u (i32.const 11) (i32.const 5))) + (drop (call $div_u (i32.const 17) (i32.const 7))) + (drop (call $rem_s (i32.const 0x7fffffff) (i32.const -1))) + (drop (call $rem_s (i32.const 1) (i32.const 1))) + (drop (call $rem_s (i32.const 0) (i32.const 1))) + (drop (call $rem_s (i32.const -1) (i32.const -1))) + (drop (call $rem_s (i32.const 0x80000000) (i32.const -1))) + (drop (call $rem_s (i32.const 0x80000000) (i32.const 2))) + (drop (call $rem_s (i32.const 0x80000001) (i32.const 1000)) ) + (drop (call $rem_s (i32.const 5) (i32.const 2))) + (drop (call $rem_s (i32.const -5) (i32.const 2)) ) + (drop (call $rem_s (i32.const 5) (i32.const -2))) + (drop (call $rem_s (i32.const -5) (i32.const -2)) ) + (drop (call $rem_s (i32.const 7) (i32.const 3))) + (drop (call $rem_s (i32.const -7) (i32.const 3)) ) + (drop (call $rem_s (i32.const 7) (i32.const -3))) + (drop (call $rem_s (i32.const -7) (i32.const -3)) ) + (drop (call $rem_s (i32.const 11) (i32.const 5))) + (drop (call $rem_s (i32.const 17) (i32.const 7))) + (drop (call $rem_u (i32.const 1) (i32.const 1))) + (drop (call $rem_u (i32.const 0) (i32.const 1))) + (drop (call $rem_u (i32.const -1) (i32.const -1))) + (drop (call $rem_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $rem_u (i32.const 0x80000000) (i32.const 2))) + (drop (call $rem_u (i32.const 0x8ff00ff0) (i32.const 0x10001))) + (drop (call $rem_u (i32.const 0x80000001) (i32.const 1000))) + (drop (call $rem_u (i32.const 5) (i32.const 2))) + (drop (call $rem_u (i32.const -5) (i32.const 2))) + (drop (call $rem_u (i32.const 5) (i32.const -2))) + (drop (call $rem_u (i32.const -5) (i32.const -2)) ) + (drop (call $rem_u (i32.const 7) (i32.const 3))) + (drop (call $rem_u (i32.const 11) (i32.const 5))) + (drop (call $rem_u (i32.const 17) (i32.const 7))) + (drop (call $and (i32.const 1) (i32.const 0))) + (drop (call $and (i32.const 0) (i32.const 1))) + (drop (call $and (i32.const 1) (i32.const 1))) + (drop (call $and (i32.const 0) (i32.const 0))) + (drop (call $and (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $and (i32.const 0x7fffffff) (i32.const -1))) + (drop (call $and (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0))) + (drop (call $and (i32.const 0xffffffff) (i32.const 0xffffffff))) + (drop (call $or (i32.const 1) (i32.const 0))) + (drop (call $or (i32.const 0) (i32.const 1))) + (drop (call $or (i32.const 1) (i32.const 1))) + (drop (call $or (i32.const 0) (i32.const 0))) + (drop (call $or (i32.const 0x7fffffff) (i32.const 0x80000000)) ) + (drop (call $or (i32.const 0x80000000) (i32.const 0))) + (drop (call $or (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0))) + (drop (call $or (i32.const 0xffffffff) (i32.const 0xffffffff))) + (drop (call $xor (i32.const 1) (i32.const 0))) + (drop (call $xor (i32.const 0) (i32.const 1))) + (drop (call $xor (i32.const 1) (i32.const 1))) + (drop (call $xor (i32.const 0) (i32.const 0))) + (drop (call $xor (i32.const 0x7fffffff) (i32.const 0x80000000)) ) + (drop (call $xor (i32.const 0x80000000) (i32.const 0))) + (drop (call $xor (i32.const -1) (i32.const 0x80000000))) + (drop (call $xor (i32.const -1) (i32.const 0x7fffffff))) + (drop (call $xor (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0))) + (drop (call $xor (i32.const 0xffffffff) (i32.const 0xffffffff))) + (drop (call $shl (i32.const 1) (i32.const 1))) + (drop (call $shl (i32.const 1) (i32.const 0))) + (drop (call $shl (i32.const 0x7fffffff) (i32.const 1))) + (drop (call $shl (i32.const 0xffffffff) (i32.const 1))) + (drop (call $shl (i32.const 0x80000000) (i32.const 1))) + (drop (call $shl (i32.const 0x40000000) (i32.const 1))) + (drop (call $shl (i32.const 1) (i32.const 31))) + (drop (call $shl (i32.const 1) (i32.const 32))) + (drop (call $shl (i32.const 1) (i32.const 33))) + (drop (call $shl (i32.const 1) (i32.const -1))) + (drop (call $shl (i32.const 1) (i32.const 0x7fffffff))) + (drop (call $shr_s (i32.const 1) (i32.const 1))) + (drop (call $shr_s (i32.const 1) (i32.const 0))) + (drop (call $shr_s (i32.const -1) (i32.const 1)) ) + (drop (call $shr_s (i32.const 0x7fffffff) (i32.const 1))) + (drop (call $shr_s (i32.const 0x80000000) (i32.const 1))) + (drop (call $shr_s (i32.const 0x40000000) (i32.const 1))) + (drop (call $shr_s (i32.const 1) (i32.const 32))) + (drop (call $shr_s (i32.const 1) (i32.const 33))) + (drop (call $shr_s (i32.const 1) (i32.const -1))) + (drop (call $shr_s (i32.const 1) (i32.const 0x7fffffff))) + (drop (call $shr_s (i32.const 1) (i32.const 0x80000000))) + (drop (call $shr_s (i32.const 0x80000000) (i32.const 31)) ) + (drop (call $shr_s (i32.const -1) (i32.const 32)) ) + (drop (call $shr_s (i32.const -1) (i32.const 33)) ) + (drop (call $shr_s (i32.const -1) (i32.const -1)) ) + (drop (call $shr_s (i32.const -1) (i32.const 0x7fffffff)) ) + (drop (call $shr_s (i32.const -1) (i32.const 0x80000000)) ) + (drop (call $shr_u (i32.const 1) (i32.const 1))) + (drop (call $shr_u (i32.const 1) (i32.const 0))) + (drop (call $shr_u (i32.const -1) (i32.const 1))) + (drop (call $shr_u (i32.const 0x7fffffff) (i32.const 1))) + (drop (call $shr_u (i32.const 0x80000000) (i32.const 1))) + (drop (call $shr_u (i32.const 0x40000000) (i32.const 1))) + (drop (call $shr_u (i32.const 1) (i32.const 32))) + (drop (call $shr_u (i32.const 1) (i32.const 33))) + (drop (call $shr_u (i32.const 1) (i32.const -1))) + (drop (call $shr_u (i32.const 1) (i32.const 0x7fffffff))) + (drop (call $shr_u (i32.const 1) (i32.const 0x80000000))) + (drop (call $shr_u (i32.const 0x80000000) (i32.const 31))) + (drop (call $shr_u (i32.const -1) (i32.const 32)) ) + (drop (call $shr_u (i32.const -1) (i32.const 33))) + (drop (call $shr_u (i32.const -1) (i32.const -1))) + (drop (call $shr_u (i32.const -1) (i32.const 0x7fffffff))) + (drop (call $shr_u (i32.const -1) (i32.const 0x80000000)) ) + (drop (call $rotl (i32.const 0xfe00dc00) (i32.const 4))) + (drop (call $rotl (i32.const 0xabcd9876) (i32.const 1))) + (drop (call $rotl (i32.const 0x00008000) (i32.const 37))) + (drop (call $rotl (i32.const 0x769abcdf) (i32.const 0x8000000d))) + (drop (call $rotl (i32.const 1) (i32.const 31))) + (drop (call $rotl (i32.const 0x80000000) (i32.const 1))) + (drop (call $rotr (i32.const 0xb0c1d2e3) (i32.const 0x0005))) + (drop (call $rotr (i32.const 0xb0c1d2e3) (i32.const 0xff05))) + (drop (call $rotr (i32.const 0xff00cc00) (i32.const 1))) + (drop (call $rotr (i32.const 0x00080000) (i32.const 4))) + (drop (call $rotr (i32.const 0x769abcdf) (i32.const 0xffffffed))) + (drop (call $rotr (i32.const 1) (i32.const 1))) + (drop (call $rotr (i32.const 0x80000000) (i32.const 31))) + (drop (call $clz (i32.const 0xffffffff))) + (drop (call $clz (i32.const 0))) + (drop (call $clz (i32.const 0x00008000))) + (drop (call $clz (i32.const 0xff))) + (drop (call $clz (i32.const 0x80000000))) + (drop (call $clz (i32.const 1))) + (drop (call $clz (i32.const 2))) + (drop (call $clz (i32.const 0x7fffffff))) + (drop (call $ctz (i32.const -1))) + (drop (call $ctz (i32.const 0))) + (drop (call $ctz (i32.const 0x00008000))) + (drop (call $ctz (i32.const 0x00010000))) + (drop (call $ctz (i32.const 0x80000000))) + (drop (call $ctz (i32.const 0x7fffffff))) + (drop (call $popcnt (i32.const -1))) + (drop (call $popcnt (i32.const 0))) + (drop (call $popcnt (i32.const 0x00008000))) + (drop (call $popcnt (i32.const 0x80008000))) + (drop (call $popcnt (i32.const 0x7fffffff))) + (drop (call $popcnt (i32.const 0xAAAAAAAA))) + (drop (call $popcnt (i32.const 0x55555555))) + (drop (call $popcnt (i32.const 0xDEADBEEF))) + (drop (call $eqz (i32.const 0))) + (drop (call $eqz (i32.const 1))) + (drop (call $eqz (i32.const 0x80000000))) + (drop (call $eqz (i32.const 0x7fffffff))) + (drop (call $eq (i32.const 0) (i32.const 0))) + (drop (call $eq (i32.const 1) (i32.const 1))) + (drop (call $eq (i32.const -1) (i32.const 1))) + (drop (call $eq (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $eq (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $eq (i32.const -1) (i32.const -1))) + (drop (call $eq (i32.const 1) (i32.const 0))) + (drop (call $eq (i32.const 0) (i32.const 1))) + (drop (call $eq (i32.const 0x80000000) (i32.const 0))) + (drop (call $eq (i32.const 0) (i32.const 0x80000000))) + (drop (call $eq (i32.const 0x80000000) (i32.const -1))) + (drop (call $eq (i32.const -1) (i32.const 0x80000000))) + (drop (call $eq (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $eq (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $ne (i32.const 0) (i32.const 0))) + (drop (call $ne (i32.const 1) (i32.const 1))) + (drop (call $ne (i32.const -1) (i32.const 1))) + (drop (call $ne (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $ne (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $ne (i32.const -1) (i32.const -1))) + (drop (call $ne (i32.const 1) (i32.const 0))) + (drop (call $ne (i32.const 0) (i32.const 1))) + (drop (call $ne (i32.const 0x80000000) (i32.const 0))) + (drop (call $ne (i32.const 0) (i32.const 0x80000000))) + (drop (call $ne (i32.const 0x80000000) (i32.const -1))) + (drop (call $ne (i32.const -1) (i32.const 0x80000000))) + (drop (call $ne (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $ne (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $lt_s (i32.const 0) (i32.const 0))) + (drop (call $lt_s (i32.const 1) (i32.const 1))) + (drop (call $lt_s (i32.const -1) (i32.const 1))) + (drop (call $lt_s (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $lt_s (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $lt_s (i32.const -1) (i32.const -1))) + (drop (call $lt_s (i32.const 1) (i32.const 0))) + (drop (call $lt_s (i32.const 0) (i32.const 1))) + (drop (call $lt_s (i32.const 0x80000000) (i32.const 0))) + (drop (call $lt_s (i32.const 0) (i32.const 0x80000000))) + (drop (call $lt_s (i32.const 0x80000000) (i32.const -1))) + (drop (call $lt_s (i32.const -1) (i32.const 0x80000000))) + (drop (call $lt_s (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $lt_s (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $lt_u (i32.const 0) (i32.const 0))) + (drop (call $lt_u (i32.const 1) (i32.const 1))) + (drop (call $lt_u (i32.const -1) (i32.const 1))) + (drop (call $lt_u (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $lt_u (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $lt_u (i32.const -1) (i32.const -1))) + (drop (call $lt_u (i32.const 1) (i32.const 0))) + (drop (call $lt_u (i32.const 0) (i32.const 1))) + (drop (call $lt_u (i32.const 0x80000000) (i32.const 0))) + (drop (call $lt_u (i32.const 0) (i32.const 0x80000000))) + (drop (call $lt_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $lt_u (i32.const -1) (i32.const 0x80000000))) + (drop (call $lt_u (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $lt_u (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $le_s (i32.const 0) (i32.const 0))) + (drop (call $le_s (i32.const 1) (i32.const 1))) + (drop (call $le_s (i32.const -1) (i32.const 1))) + (drop (call $le_s (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $le_s (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $le_s (i32.const -1) (i32.const -1))) + (drop (call $le_s (i32.const 1) (i32.const 0))) + (drop (call $le_s (i32.const 0) (i32.const 1))) + (drop (call $le_s (i32.const 0x80000000) (i32.const 0))) + (drop (call $le_s (i32.const 0) (i32.const 0x80000000))) + (drop (call $le_s (i32.const 0x80000000) (i32.const -1))) + (drop (call $le_s (i32.const -1) (i32.const 0x80000000))) + (drop (call $le_s (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $le_s (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $le_u (i32.const 0) (i32.const 0))) + (drop (call $le_u (i32.const 1) (i32.const 1))) + (drop (call $le_u (i32.const -1) (i32.const 1))) + (drop (call $le_u (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $le_u (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $le_u (i32.const -1) (i32.const -1))) + (drop (call $le_u (i32.const 1) (i32.const 0))) + (drop (call $le_u (i32.const 0) (i32.const 1))) + (drop (call $le_u (i32.const 0x80000000) (i32.const 0))) + (drop (call $le_u (i32.const 0) (i32.const 0x80000000))) + (drop (call $le_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $le_u (i32.const -1) (i32.const 0x80000000))) + (drop (call $le_u (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $le_u (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $gt_s (i32.const 0) (i32.const 0))) + (drop (call $gt_s (i32.const 1) (i32.const 1))) + (drop (call $gt_s (i32.const -1) (i32.const 1))) + (drop (call $gt_s (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $gt_s (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $gt_s (i32.const -1) (i32.const -1))) + (drop (call $gt_s (i32.const 1) (i32.const 0))) + (drop (call $gt_s (i32.const 0) (i32.const 1))) + (drop (call $gt_s (i32.const 0x80000000) (i32.const 0))) + (drop (call $gt_s (i32.const 0) (i32.const 0x80000000))) + (drop (call $gt_s (i32.const 0x80000000) (i32.const -1))) + (drop (call $gt_s (i32.const -1) (i32.const 0x80000000))) + (drop (call $gt_s (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $gt_s (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $gt_u (i32.const 0) (i32.const 0))) + (drop (call $gt_u (i32.const 1) (i32.const 1))) + (drop (call $gt_u (i32.const -1) (i32.const 1))) + (drop (call $gt_u (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $gt_u (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $gt_u (i32.const -1) (i32.const -1))) + (drop (call $gt_u (i32.const 1) (i32.const 0))) + (drop (call $gt_u (i32.const 0) (i32.const 1))) + (drop (call $gt_u (i32.const 0x80000000) (i32.const 0))) + (drop (call $gt_u (i32.const 0) (i32.const 0x80000000))) + (drop (call $gt_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $gt_u (i32.const -1) (i32.const 0x80000000))) + (drop (call $gt_u (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $gt_u (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $ge_s (i32.const 0) (i32.const 0))) + (drop (call $ge_s (i32.const 1) (i32.const 1))) + (drop (call $ge_s (i32.const -1) (i32.const 1))) + (drop (call $ge_s (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $ge_s (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $ge_s (i32.const -1) (i32.const -1))) + (drop (call $ge_s (i32.const 1) (i32.const 0))) + (drop (call $ge_s (i32.const 0) (i32.const 1))) + (drop (call $ge_s (i32.const 0x80000000) (i32.const 0))) + (drop (call $ge_s (i32.const 0) (i32.const 0x80000000))) + (drop (call $ge_s (i32.const 0x80000000) (i32.const -1))) + (drop (call $ge_s (i32.const -1) (i32.const 0x80000000))) + (drop (call $ge_s (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $ge_s (i32.const 0x7fffffff) (i32.const 0x80000000))) + (drop (call $ge_u (i32.const 0) (i32.const 0))) + (drop (call $ge_u (i32.const 1) (i32.const 1))) + (drop (call $ge_u (i32.const -1) (i32.const 1))) + (drop (call $ge_u (i32.const 0x80000000) (i32.const 0x80000000))) + (drop (call $ge_u (i32.const 0x7fffffff) (i32.const 0x7fffffff))) + (drop (call $ge_u (i32.const -1) (i32.const -1))) + (drop (call $ge_u (i32.const 1) (i32.const 0))) + (drop (call $ge_u (i32.const 0) (i32.const 1))) + (drop (call $ge_u (i32.const 0x80000000) (i32.const 0))) + (drop (call $ge_u (i32.const 0) (i32.const 0x80000000))) + (drop (call $ge_u (i32.const 0x80000000) (i32.const -1))) + (drop (call $ge_u (i32.const -1) (i32.const 0x80000000))) + (drop (call $ge_u (i32.const 0x80000000) (i32.const 0x7fffffff))) + (drop (call $ge_u (i32.const 0x7fffffff) (i32.const 0x80000000))) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/labels.wast b/libraries/wasm-jit/Test/fuzz/labels.wast new file mode 100644 index 000000000..0ac2b2873 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/labels.wast @@ -0,0 +1,297 @@ +(module + (func $block (result i32) + (block $exit i32 + (br $exit (i32.const 1)) + (i32.const 0) + ) + ) + + (func $loop1 (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block $exit i32 + (loop $cont i32 + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if (i32.eq (get_local $i) (i32.const 5)) + (br $exit (get_local $i)) + ) + (br $cont) + ) + ) + ) + + (func $loop2 (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block $exit i32 + (loop $cont i32 + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if (i32.eq (get_local $i) (i32.const 5)) + (br $cont) + ) + (if (i32.eq (get_local $i) (i32.const 8)) + (br $exit (get_local $i)) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (br $cont) + ) + ) + ) + + (func $loop3 (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block $exit i32 + (loop $cont i32 + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if (i32.eq (get_local $i) (i32.const 5)) + (br $exit (get_local $i)) + ) + (get_local $i) + ) + ) + ) + + (func $loop4 (param $max i32) (result i32) + (local $i i32) + (set_local $i (i32.const 1)) + (block $exit i32 + (loop $cont i32 + (set_local $i (i32.add (get_local $i) (get_local $i))) + (if (i32.gt_u (get_local $i) (get_local $max)) + (br $exit (get_local $i)) + ) + (br $cont) + ) + ) + ) + + (func $loop5 (result i32) + (i32.add + (loop $l i32 (i32.const 1)) + (i32.const 1) + ) + ) + + (func $if (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block + (if $l + (i32.const 1) + (then (br $l) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if $l + (i32.const 1) + (then (br $l) (set_local $i (i32.const 666))) + (else (set_local $i (i32.const 888))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if $l + (i32.const 1) + (then (br $l) (set_local $i (i32.const 666))) + (else (set_local $i (i32.const 888))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if $l + (i32.const 0) + (then (set_local $i (i32.const 888))) + (else (br $l) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if $l + (i32.const 0) + (then (set_local $i (i32.const 888))) + (else (br $l) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + ) + (get_local $i) + ) + + (func $if2 (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block + (if + (i32.const 1) + (then (br 0) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if + (i32.const 1) + (then (br 0) (set_local $i (i32.const 666))) + (else (set_local $i (i32.const 888))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if + (i32.const 1) + (then (br 0) (set_local $i (i32.const 666))) + (else (set_local $i (i32.const 888))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if + (i32.const 0) + (then (set_local $i (i32.const 888))) + (else (br 0) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + (if + (i32.const 0) + (then (set_local $i (i32.const 888))) + (else (br 0) (set_local $i (i32.const 666))) + ) + (set_local $i (i32.add (get_local $i) (i32.const 1))) + ) + (get_local $i) + ) + + (func $switch (param i32) (result i32) + (block $ret i32 + (i32.mul (i32.const 10) + (block $exit i32 + (block $0 + (block $default + (block $3 + (block $2 + (block $1 + (br_table $0 $1 $2 $3 $default (get_local 0)) + ) ;; 1 + ) ;; 2 + (br $exit (i32.const 2)) + ) ;; 3 + (br $ret (i32.const 3)) + ) ;; default + ) ;; 0 + (i32.const 5) + ) + ) + ) + ) + + (func $return (param i32) (result i32) + (block $default + (block $1 + (block $0 + (br_table $0 $1 (get_local 0)) + (br $default) + ) ;; 0 + (return (i32.const 0)) + ) ;; 1 + ) ;; default + (i32.const 2) + ) + + (func $br_if0 (result i32) + (local $i i32) + (set_local $i (i32.const 0)) + (block $outer i32 + (block $inner + (br_if $inner (i32.const 0)) + (set_local $i (i32.or (get_local $i) (i32.const 0x1))) + (br_if $inner (i32.const 1)) + (set_local $i (i32.or (get_local $i) (i32.const 0x2))) + ) + (drop (br_if $outer + (block i32 + (set_local $i (i32.or (get_local $i) (i32.const 0x4))) + (get_local $i) + ) + (i32.const 0) + )) + (set_local $i (i32.or (get_local $i) (i32.const 0x8))) + (drop (br_if $outer + (block i32 + (set_local $i (i32.or (get_local $i) (i32.const 0x10))) + (get_local $i) + ) + (i32.const 1) + )) + (set_local $i (i32.or (get_local $i) (i32.const 0x20))) (get_local $i) + ) + ) + + (func $br_if1 (result i32) + (block $l0 i32 + (drop (br_if $l0 (block $l1 i32 (br $l1 (i32.const 1))) (i32.const 1))) + (i32.const 1) + ) + ) + + (func $br_if2 (result i32) + (block $l0 i32 + (if (i32.const 1) + (br $l0 (block $l1 i32 (br $l1 (i32.const 1)))) + ) + (i32.const 1) + ) + ) + + (func $br_if3 (result i32) + (local $i1 i32) + (drop + (i32.add + (block $l0 i32 + (drop (br_if $l0 + (block i32 (set_local $i1 (i32.const 1)) (get_local $i1)) + (block i32 (set_local $i1 (i32.const 2)) (get_local $i1)) + )) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (get_local $i1) + ) + + (func $br (result i32) + (block $l0 i32 + (if (i32.const 1) + (br $l0 (block $l1 i32 (br $l1 (i32.const 1)))) + (block (drop (block $l1 i32 (br $l1 (i32.const 1))))) + ) + (i32.const 1) + ) + ) + + (func $shadowing (result i32) + (block $l1 i32 (i32.xor (br $l1 (i32.const 1)) (i32.const 2))) + ) + + (func $redefinition (result i32) + (block $l1 i32 + (i32.add + (block $l1 i32 (i32.const 2)) + (block $l1 i32 (br $l1 (i32.const 3))) + ) + ) + ) + + (func (export "main") + (drop (call $block)) + (drop (call $loop1)) + (drop (call $loop2)) + (drop (call $loop3)) + (drop (call $loop4 (i32.const 8))) + (drop (call $loop5)) + (drop (call $if)) + (drop (call $if2)) + (drop (call $switch (i32.const 0))) + (drop (call $switch (i32.const 1))) + (drop (call $switch (i32.const 2))) + (drop (call $switch (i32.const 3))) + (drop (call $switch (i32.const 4))) + (drop (call $switch (i32.const 5))) + (drop (call $return (i32.const 0))) + (drop (call $return (i32.const 1))) + (drop (call $return (i32.const 2))) + (drop (call $br_if0)) + (drop (call $br_if1)) + (drop (call $br_if2)) + (drop (call $br_if3)) + (drop (call $br)) + (drop (call $shadowing)) + (drop (call $redefinition)) + ) +) \ No newline at end of file diff --git a/libraries/wasm-jit/Test/fuzz/loop.wast b/libraries/wasm-jit/Test/fuzz/loop.wast new file mode 100644 index 000000000..f5423e368 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/loop.wast @@ -0,0 +1,219 @@ +;; Test `loop` opcode + +(module + (func $dummy) + + (func $empty + (loop) + (loop $l) + ) + + (func $singular (result i32) + (loop (nop)) + (loop i32 (i32.const 7)) + ) + + (func $multi (result i32) + (loop (call $dummy) (call $dummy) (call $dummy) (call $dummy)) + (loop i32 (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) + ) + + (func $nested (result i32) + (loop i32 + (loop (call $dummy) (block) (nop)) + (loop i32 (call $dummy) (i32.const 9)) + ) + ) + + (func $deep (result i32) + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (loop i32 (block i32 (loop i32 (block i32 + (loop i32 (block i32 (call $dummy) (i32.const 150))) + )))))) + )))))) + )))))) + )))))) + )))))) + )))))) + )))))) + ) + + (func $as-unary-operand (result i32) + (i32.ctz (loop i32 (call $dummy) (i32.const 13))) + ) + (func $as-binary-operand (result i32) + (i32.mul + (loop i32 (call $dummy) (i32.const 3)) + (loop i32 (call $dummy) (i32.const 4)) + ) + ) + (func $as-test-operand (result i32) + (i32.eqz (loop i32 (call $dummy) (i32.const 13))) + ) + (func $as-compare-operand (result i32) + (f32.gt + (loop f32 (call $dummy) (f32.const 3)) + (loop f32 (call $dummy) (f32.const 3)) + ) + ) + + (func $break-bare (result i32) + (block (loop (br 1) (br 0) (unreachable))) + (block (loop (br_if 1 (i32.const 1)) (unreachable))) + (block (loop (br_table 1 (i32.const 0)) (unreachable))) + (block (loop (br_table 1 1 1 (i32.const 1)) (unreachable))) + (i32.const 19) + ) + (func $break-value (result i32) + (block i32 (loop i32 (br 1 (i32.const 18)) (br 0) (i32.const 19))) + ) + (func $break-repeated (result i32) + (block i32 + (loop i32 + (br 1 (i32.const 18)) + (br 1 (i32.const 19)) + (drop (br_if 1 (i32.const 20) (i32.const 0))) + (drop (br_if 1 (i32.const 20) (i32.const 1))) + (br 1 (i32.const 21)) + (br_table 1 (i32.const 22) (i32.const 0)) + (br_table 1 1 1 (i32.const 23) (i32.const 1)) + (i32.const 21) + ) + ) + ) + (func $break-inner (result i32) + (local i32) + (set_local 0 (i32.const 0)) + (set_local 0 (i32.add (get_local 0) (block i32 (loop i32 (block i32 (br 2 (i32.const 0x1))))))) + (set_local 0 (i32.add (get_local 0) (block i32 (loop i32 (loop i32 (br 2 (i32.const 0x2))))))) + (set_local 0 (i32.add (get_local 0) (block i32 (loop i32 (block i32 (loop i32 (br 1 (i32.const 0x4)))))))) + (set_local 0 (i32.add (get_local 0) (block i32 (loop i32 (i32.ctz (br 1 (i32.const 0x8))))))) + (set_local 0 (i32.add (get_local 0) (block i32 (loop i32 (i32.ctz (loop i32 (br 2 (i32.const 0x10)))))))) + (get_local 0) + ) + (func $cont-inner (result i32) + (local i32) + (set_local 0 (i32.const 0)) + (set_local 0 (i32.add (get_local 0) (loop i32 (loop i32 (br 1))))) + (set_local 0 (i32.add (get_local 0) (loop i32 (i32.ctz (br 0))))) + (set_local 0 (i32.add (get_local 0) (loop i32 (i32.ctz (loop i32 (br 1)))))) + (get_local 0) + ) + + (func $effects (result i32) + (local i32) + (block + (loop + (set_local 0 (i32.const 1)) + (set_local 0 (i32.mul (get_local 0) (i32.const 3))) + (set_local 0 (i32.sub (get_local 0) (i32.const 5))) + (set_local 0 (i32.mul (get_local 0) (i32.const 7))) + (br 1) + (set_local 0 (i32.mul (get_local 0) (i32.const 100))) + ) + ) + (i32.eq (get_local 0) (i32.const -14)) + ) + + (func $while (param i64) (result i64) + (local i64) + (set_local 1 (i64.const 1)) + (block + (loop + (br_if 1 (i64.eqz (get_local 0))) + (set_local 1 (i64.mul (get_local 0) (get_local 1))) + (set_local 0 (i64.sub (get_local 0) (i64.const 1))) + (br 0) + ) + ) + (get_local 1) + ) + + (func $for (param i64) (result i64) + (local i64 i64) + (set_local 1 (i64.const 1)) + (set_local 2 (i64.const 2)) + (block + (loop + (br_if 1 (i64.gt_u (get_local 2) (get_local 0))) + (set_local 1 (i64.mul (get_local 1) (get_local 2))) + (set_local 2 (i64.add (get_local 2) (i64.const 1))) + (br 0) + ) + ) + (get_local 1) + ) + + (func $nesting (param f32 f32) (result f32) + (local f32 f32) + (block + (loop + (br_if 1 (f32.eq (get_local 0) (f32.const 0))) + (set_local 2 (get_local 1)) + (block + (loop + (br_if 1 (f32.eq (get_local 2) (f32.const 0))) + (br_if 3 (f32.lt (get_local 2) (f32.const 0))) + (set_local 3 (f32.add (get_local 3) (get_local 2))) + (set_local 2 (f32.sub (get_local 2) (f32.const 2))) + (br 0) + ) + ) + (set_local 3 (f32.div (get_local 3) (get_local 0))) + (set_local 0 (f32.sub (get_local 0) (f32.const 1))) + (br 0) + ) + ) + (get_local 3) + ) + + (func (export "main") + (call $empty) + (drop (call $singular)) + (drop (call $multi)) + (drop (call $nested)) + (drop (call $deep)) + (drop (call $as-unary-operand)) + (drop (call $as-binary-operand)) + (drop (call $as-test-operand)) + (drop (call $as-compare-operand)) + (drop (call $break-bare)) + (drop (call $break-value)) + (drop (call $break-repeated)) + (drop (call $break-inner)) + (drop (call $effects)) + (drop (call $while (i64.const 0))) + (drop (call $while (i64.const 1))) + (drop (call $while (i64.const 2))) + (drop (call $while (i64.const 3))) + (drop (call $while (i64.const 5))) + (drop (call $while (i64.const 20))) + (drop (call $for (i64.const 0))) + (drop (call $for (i64.const 1))) + (drop (call $for (i64.const 2))) + (drop (call $for (i64.const 3))) + (drop (call $for (i64.const 5))) + (drop (call $for (i64.const 20))) + (drop (call $nesting (f32.const 0) (f32.const 7))) + (drop (call $nesting (f32.const 7) (f32.const 0))) + (drop (call $nesting (f32.const 1) (f32.const 1))) + (drop (call $nesting (f32.const 1) (f32.const 2))) + (drop (call $nesting (f32.const 1) (f32.const 3))) + (drop (call $nesting (f32.const 1) (f32.const 4))) + (drop (call $nesting (f32.const 1) (f32.const 20))) + (drop (call $nesting (f32.const 1) (f32.const 21))) + (drop (call $nesting (f32.const 2) (f32.const 1))) + (drop (call $nesting (f32.const 3) (f32.const 1))) + (drop (call $nesting (f32.const 10) (f32.const 1))) + (drop (call $nesting (f32.const 2) (f32.const 2))) + (drop (call $nesting (f32.const 2) (f32.const 3))) + (drop (call $nesting (f32.const 7) (f32.const 4))) + (drop (call $nesting (f32.const 7) (f32.const 20))) + (drop (call $nesting (f32.const 7) (f32.const 21))) + ) +) \ No newline at end of file diff --git a/libraries/wasm-jit/Test/fuzz/resizing.wast b/libraries/wasm-jit/Test/fuzz/resizing.wast new file mode 100644 index 000000000..73eb37b2a --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/resizing.wast @@ -0,0 +1,29 @@ +(module + (memory 0) + + (func $load_at_zero (result i32) (i32.load (i32.const 0))) + (func $store_at_zero (i32.store (i32.const 0) (i32.const 2))) + + (func $load_at_page_size (result i32) (i32.load (i32.const 0x10000))) + (func $store_at_page_size (i32.store (i32.const 0x10000) (i32.const 3))) + + (func $grow (param $sz i32) (result i32) (grow_memory (get_local $sz))) + (func $size (result i32) (current_memory)) + + (func (export "main") + (drop (call $size)) + (drop (call $grow (i32.const 1))) + (drop (call $size)) + (drop (call $load_at_zero)) + (call $store_at_zero) + (drop (call $load_at_zero)) + (drop (call $grow (i32.const 4))) + (drop (call $size)) + (drop (call $load_at_zero)) + (call $store_at_zero) + (drop (call $load_at_zero)) + (drop (call $load_at_page_size)) + (call $store_at_page_size) + (drop (call $load_at_page_size)) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/return.wast b/libraries/wasm-jit/Test/fuzz/return.wast new file mode 100644 index 000000000..71b074ec9 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/return.wast @@ -0,0 +1,265 @@ +;; Test `return` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func $type-i32 (drop (i32.ctz (return)))) + (func $type-i64 (drop (i64.ctz (return)))) + (func $type-f32 (drop (f32.neg (return)))) + (func $type-f64 (drop (f64.neg (return)))) + + (func $nullary (return)) + (func $unary (result f64) (return (f64.const 3))) + + (func $as-func-first (result i32) + (return (i32.const 1)) (i32.const 2) + ) + (func $as-func-mid (result i32) + (call $dummy) (return (i32.const 2)) (i32.const 3) + ) + (func $as-func-last + (nop) (call $dummy) (return) + ) + (func $as-func-value (result i32) + (nop) (call $dummy) (return (i32.const 3)) + ) + + (func $as-block-first + (block (return) (call $dummy)) + ) + (func $as-block-mid + (block (call $dummy) (return) (call $dummy)) + ) + (func $as-block-last + (block (nop) (call $dummy) (return)) + ) + (func $as-block-value (result i32) + (block i32 (nop) (call $dummy) (return (i32.const 2))) + ) + + (func $as-loop-first (result i32) + (loop i32 (return (i32.const 3)) (i32.const 2)) + ) + (func $as-loop-mid (result i32) + (loop i32 (call $dummy) (return (i32.const 4)) (i32.const 2)) + ) + (func $as-loop-last (result i32) + (loop i32 (nop) (call $dummy) (return (i32.const 5))) + ) + + (func $as-br-value (result i32) + (block i32 (br 0 (return (i32.const 9)))) + ) + + (func $as-br_if-cond + (block (br_if 0 (return))) + ) + (func $as-br_if-value (result i32) + (block i32 (br_if 0 (return (i32.const 8)) (i32.const 1)) (i32.const 7)) + ) + (func $as-br_if-value-cond (result i32) + (block i32 (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7)) + ) + + (func $as-br_table-index (result i64) + (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) + ) + (func $as-br_table-value (result i32) + (block i32 + (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) + ) + ) + (func $as-br_table-value-index (result i32) + (block i32 + (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) + ) + ) + + (func $as-return-value (result i64) + (return (return (i64.const 7))) + ) + + (func $as-if-cond (result i32) + (if (return (i32.const 2)) (i32.const 0) (i32.const 1)) + ) + (func $as-if-then (param i32 i32) (result i32) + (if i32 (get_local 0) (return (i32.const 3)) (get_local 1)) + ) + (func $as-if-else (param i32 i32) (result i32) + (if i32 (get_local 0) (get_local 1) (return (i32.const 4))) + ) + + (func $as-select-first (param i32 i32) (result i32) + (select (return (i32.const 5)) (get_local 0) (get_local 1)) + ) + (func $as-select-second (param i32 i32) (result i32) + (select (get_local 0) (return (i32.const 6)) (get_local 1)) + ) + (func $as-select-cond (result i32) + (select (i32.const 0) (i32.const 1) (return (i32.const 7))) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func $as-call-first (result i32) + (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) + ) + (func $as-call-mid (result i32) + (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) + ) + (func $as-call-last (result i32) + (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func $as-call_indirect-func (result i32) + (call_indirect $sig (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3)) + ) + (func $as-call_indirect-first (result i32) + (call_indirect $sig (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3)) + ) + (func $as-call_indirect-mid (result i32) + (call_indirect $sig (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3)) + ) + (func $as-call_indirect-last (result i32) + (call_indirect $sig (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23))) + ) + + (func $as-set_local-value (result i32) (local f32) + (set_local 0 (return (i32.const 17))) (i32.const -1) + ) + + (memory 1) + (func $as-load-address (result f32) + (f32.load (return (f32.const 1.7))) + ) + (func $as-loadN-address (result i64) + (i64.load8_s (return (i64.const 30))) + ) + + (func $as-store-address (result i32) + (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) + ) + (func $as-store-value (result i32) + (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) + ) + + (func $as-storeN-address (result i32) + (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) + ) + (func $as-storeN-value (result i32) + (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) + ) + + (func $as-unary-operand (result f32) + (f32.neg (return (f32.const 3.4))) + ) + + (func $as-binary-left (result i32) + (i32.add (return (i32.const 3)) (i32.const 10)) + ) + (func $as-binary-right (result i64) + (i64.sub (i64.const 10) (return (i64.const 45))) + ) + + (func $as-test-operand (result i32) + (i32.eqz (return (i32.const 44))) + ) + + (func $as-compare-left (result i32) + (f64.le (return (i32.const 43)) (f64.const 10)) + ) + (func $as-compare-right (result i32) + (f32.ne (f32.const 10) (return (i32.const 42))) + ) + + (func $as-convert-operand (result i32) + (i32.wrap/i64 (return (i32.const 41))) + ) + + (func $as-grow_memory-size (result i32) + (grow_memory (return (i32.const 40))) + ) + + (func (export "main") + (call $type-i32) + (call $type-i64) + (call $type-f32) + (call $type-f64) + + (call $nullary) + (drop (call $unary)) + + (drop (call $as-func-first)) + (drop (call $as-func-mid)) + (call $as-func-last) + (drop (call $as-func-value)) + + (call $as-block-first) + (call $as-block-mid) + (call $as-block-last) + (drop (call $as-block-value)) + + (drop (call $as-loop-first)) + (drop (call $as-loop-mid)) + (drop (call $as-loop-last)) + + (drop (call $as-br-value)) + + (call $as-br_if-cond) + (drop (call $as-br_if-value)) + (drop (call $as-br_if-value-cond)) + + (drop (call $as-br_table-index)) + (drop (call $as-br_table-value)) + (drop (call $as-br_table-value-index)) + + (drop (call $as-return-value)) + + (drop (call $as-if-cond)) + (drop (call $as-if-then (i32.const 1) (i32.const 6))) + (drop (call $as-if-then (i32.const 0) (i32.const 6))) + (drop (call $as-if-else (i32.const 0) (i32.const 6))) + (drop (call $as-if-else (i32.const 1) (i32.const 6))) + + (drop (call $as-select-first (i32.const 0) (i32.const 6))) + (drop (call $as-select-first (i32.const 1) (i32.const 6))) + (drop (call $as-select-second (i32.const 0) (i32.const 6))) + (drop (call $as-select-second (i32.const 1) (i32.const 6))) + (drop (call $as-select-cond)) + + (drop (call $as-call-first)) + (drop (call $as-call-mid)) + (drop (call $as-call-last)) + + (drop (call $as-call_indirect-func)) + (drop (call $as-call_indirect-first)) + (drop (call $as-call_indirect-mid)) + (drop (call $as-call_indirect-last)) + + (drop (call $as-set_local-value)) + + (drop (call $as-load-address) ) + (drop (call $as-loadN-address)) + + (drop (call $as-store-address)) + (drop (call $as-store-value)) + (drop (call $as-storeN-address)) + (drop (call $as-storeN-value)) + + (drop (call $as-unary-operand) ) + + (drop (call $as-binary-left)) + (drop (call $as-binary-right)) + + (drop (call $as-test-operand)) + + (drop (call $as-compare-left)) + (drop (call $as-compare-right)) + + (drop (call $as-convert-operand)) + + (drop (call $as-grow_memory-size)) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/tee.wast b/libraries/wasm-jit/Test/fuzz/tee.wast new file mode 100644 index 000000000..81cc124c7 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/tee.wast @@ -0,0 +1,33 @@ +;; poor man's tee +;; Outputs to stderr and stdout whatever comes in stdin + +(module + + (import "env" "memory" (memory 1)) + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_fread" (func $__fread (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdin" (global $stdinPtr (mut i32))) + (import "env" "_stdout" (global $stdoutPtr (mut i32))) + (import "env" "_stderr" (global $stderrPtr (mut i32))) + (export "main" (func $main)) + + (func $main + (local $stdin i32) + (local $stdout i32) + (local $stderr i32) + (local $nmemb i32) + (set_local $stdin (i32.load align=4 (get_global $stdinPtr))) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + (set_local $stderr (i32.load align=4 (get_global $stderrPtr))) + + (loop $loop + (block $done + (set_local $nmemb (call $__fread (i32.const 0) (i32.const 1) (i32.const 32) (get_local $stdin))) + (br_if $done (i32.eq (i32.const 0) (get_local $nmemb))) + (drop (call $__fwrite (i32.const 0) (i32.const 1) (get_local $nmemb) (get_local $stdout))) + (drop (call $__fwrite (i32.const 0) (i32.const 1) (get_local $nmemb) (get_local $stderr))) + (br $loop) + ) + ) + ) +) diff --git a/libraries/wasm-jit/Test/fuzz/tee_local.wast b/libraries/wasm-jit/Test/fuzz/tee_local.wast new file mode 100644 index 000000000..653bfddb3 --- /dev/null +++ b/libraries/wasm-jit/Test/fuzz/tee_local.wast @@ -0,0 +1,121 @@ +;; Test `tee_local` operator + +(module + ;; Typing + + (func $type-local-i32 (result i32) (local i32) (tee_local 0 (i32.const 0))) + (func $type-local-i64 (result i64) (local i64) (tee_local 0 (i64.const 0))) + (func $type-local-f32 (result f32) (local f32) (tee_local 0 (f32.const 0))) + (func $type-local-f64 (result f64) (local f64) (tee_local 0 (f64.const 0))) + + (func $type-param-i32 (param i32) (result i32) (tee_local 0 (i32.const 10))) + (func $type-param-i64 (param i64) (result i64) (tee_local 0 (i64.const 11))) + (func $type-param-f32 (param f32) (result f32) (tee_local 0 (f32.const 11.1))) + (func $type-param-f64 (param f64) (result f64) (tee_local 0 (f64.const 12.2))) + + (func $type-mixed (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) + (drop (i64.eqz (tee_local 0 (i64.const 0)))) + (drop (f32.neg (tee_local 1 (f32.const 0)))) + (drop (f64.neg (tee_local 2 (f64.const 0)))) + (drop (i32.eqz (tee_local 3 (i32.const 0)))) + (drop (i32.eqz (tee_local 4 (i32.const 0)))) + (drop (f32.neg (tee_local 5 (f32.const 0)))) + (drop (i64.eqz (tee_local 6 (i64.const 0)))) + (drop (i64.eqz (tee_local 7 (i64.const 0)))) + (drop (f64.neg (tee_local 8 (f64.const 0)))) + ) + + ;; Writing + + (func $write (param i64 f32 f64 i32 i32) (result i64) (local f32 i64 i64 f64) + (drop (tee_local 1 (f32.const -0.3))) + (drop (tee_local 3 (i32.const 40))) + (drop (tee_local 4 (i32.const -7))) + (drop (tee_local 5 (f32.const 5.5))) + (drop (tee_local 6 (i64.const 6))) + (drop (tee_local 8 (f64.const 8))) + (i64.trunc_s/f64 + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; Result + + (func $result (param i64 f32 f64 i32 i32) (result f64) + (local f32 i64 i64 f64) + (f64.add + (f64.convert_u/i64 (tee_local 0 (i64.const 1))) + (f64.add + (f64.promote/f32 (tee_local 1 (f32.const 2))) + (f64.add + (tee_local 2 (f64.const 3.3)) + (f64.add + (f64.convert_u/i32 (tee_local 3 (i32.const 4))) + (f64.add + (f64.convert_s/i32 (tee_local 4 (i32.const 5))) + (f64.add + (f64.promote/f32 (tee_local 5 (f32.const 5.5))) + (f64.add + (f64.convert_u/i64 (tee_local 6 (i64.const 6))) + (f64.add + (f64.convert_u/i64 (tee_local 7 (i64.const 0))) + (tee_local 8 (f64.const 8)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + (func (export "main") + (drop (call $type-local-i32)) + (drop (call $type-local-i64)) + (drop (call $type-local-f32)) + (drop (call $type-local-f64)) + (drop (call $type-param-i32 (i32.const 2))) + (drop (call $type-param-i64 (i64.const 3))) + (drop (call $type-param-f32 (f32.const 4.4))) + (drop (call $type-param-f64 (f64.const 5.5))) + + (call $type-mixed + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + + (drop + (call $write + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + )) + + (drop + (call $result + (i64.const -1) (f32.const -2) (f64.const -3.3) (i32.const -4) (i32.const -5) + )) + ) +) diff --git a/libraries/wasm-jit/Test/spec/LICENSE b/libraries/wasm-jit/Test/spec/LICENSE new file mode 100644 index 000000000..bfbf7dbb8 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/LICENSE @@ -0,0 +1,203 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015 repository authors, see AUTHORS file. + + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/libraries/wasm-jit/Test/spec/WAVM_known_failures.wast b/libraries/wasm-jit/Test/spec/WAVM_known_failures.wast new file mode 100644 index 000000000..19dbcbec9 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/WAVM_known_failures.wast @@ -0,0 +1,214 @@ +;; +;; From float_exprs.wast +;; + +;; Test that x - 0.0 is not folded to x. + +(module + (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) + (f32.sub (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) + (f64.sub (get_local $x) (f64.const 0.0))) +) + +;; should be (assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000)) (f32.const nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000)) (f64.const nan:0x4000000000000)) + +;; Test that x*1.0 is not folded to x. +;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". + +(module + (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) + (f32.mul (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) + (f64.mul (get_local $x) (f64.const 1.0))) +) + +;; should be (assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000)) (f32.const nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000)) (f64.const nan:0x4000000000000)) + +;; Test that x/1.0 is not folded to x. + +(module + (func (export "f32.no_fold_div_one") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_div_one") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 1.0))) +) + +;; should be (assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_div_one" (f32.const nan:0x200000)) (f32.const nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000)) (f64.const nan:0x4000000000000)) + + +;; Test that x/-1.0 is not folded to -x. + +(module + (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const -1.0))) + (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const -1.0))) +) + +;; should be (assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000)) (f32.const -nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000)) (f64.const -nan:0x4000000000000)) + +;; Test that -0.0 - x is not folded to -x. + +(module + (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) + (f32.sub (f32.const -0.0) (get_local $x))) + (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) + (f64.sub (f64.const -0.0) (get_local $x))) +) + +;; should be (assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000)) (f32.const -nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000)) (f64.const -nan:0x4000000000000)) + +;; Test that -1.0 * x is not folded to -x. + +(module + (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) + (f32.mul (f32.const -1.0) (get_local $x))) + (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) + (f64.mul (f64.const -1.0) (get_local $x))) +) + +;; should be (assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000)) (f32.const -nan:0x200000)) + +;; should be (assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) +(assert_return (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000)) (f64.const -nan:0x4000000000000)) + +;; Test that demote(promote(x)) is not folded to x, and aside from NaN is +;; bit-preserving. + +(module + (func (export "no_fold_promote_demote") (param $x f32) (result f32) + (f32.demote/f64 (f64.promote/f32 (get_local $x)))) +) + +;; should be (assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:0x200000)) + +;; Test that 0 - (-0 - x) is not optimized to x. +;; https://llvm.org/bugs/show_bug.cgi?id=26746 + +(module + (func (export "llvm_pr26746") (param $x f32) (result f32) + (f32.sub (f32.const 0.0) (f32.sub (f32.const -0.0) (get_local $x))) + ) +) + +;; Test for improperly reassociating an addition and a conversion. +;; https://llvm.org/bugs/show_bug.cgi?id=27153 + +(module + (func (export "llvm_pr27153") (param $x i32) (result f32) + (f32.add (f32.convert_s/i32 (i32.and (get_local $x) (i32.const 268435455))) (f32.const -8388608.0)) + ) +) + +;; should be (assert_return (invoke "llvm_pr27153" (i32.const 33554434)) (f32.const 25165824.000000)) +(assert_return (invoke "llvm_pr27153" (i32.const 33554434)) (f32.const 0x1.800002p+24)) + +;; Test that (float)x + (float)y is not optimized to (float)(x + y) when unsafe. +;; https://llvm.org/bugs/show_bug.cgi?id=27036 + +(module + (func (export "llvm_pr27036") (param $x i32) (param $y i32) (result f32) + (f32.add (f32.convert_s/i32 (i32.or (get_local $x) (i32.const -25034805))) + (f32.convert_s/i32 (i32.and (get_local $y) (i32.const 14942208)))) + ) +) + +;; should be (assert_return (invoke "llvm_pr27036" (i32.const -25034805) (i32.const 14942208)) (f32.const -0x1.340068p+23)) +(assert_return (invoke "llvm_pr27036" (i32.const -25034805) (i32.const 14942208)) (f32.const -0x1.34006ap+23)) + +;; test that various operations with no effect on non-NaN floats have the correct effect when operating on a NaN. +(module + (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.sub (f32.reinterpret/i32 (get_local $x)) (f32.const 0.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.sub (f32.const -0.0) (f32.reinterpret/i32 (get_local $x)))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.mul (f32.reinterpret/i32 (get_local $x)) (f32.const 1.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.mul (f32.const -1.0) (f32.reinterpret/i32 (get_local $x)))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_div_one") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.div (f32.reinterpret/i32 (get_local $x)) (f32.const 1.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.div (f32.reinterpret/i32 (get_local $x)) (f32.const -1.0))) + (i32.const 0x7fc00000))) + (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.sub (f64.reinterpret/i64 (get_local $x)) (f64.const 0.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.sub (f64.const -0.0) (f64.reinterpret/i64 (get_local $x)))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.mul (f64.reinterpret/i64 (get_local $x)) (f64.const 1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.mul (f64.const -1.0) (f64.reinterpret/i64 (get_local $x)))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_div_one") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.div (f64.reinterpret/i64 (get_local $x)) (f64.const 1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.div (f64.reinterpret/i64 (get_local $x)) (f64.const -1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "no_fold_promote_demote") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.demote/f64 (f64.promote/f32 (f32.reinterpret/i32 (get_local $x))))) + (i32.const 0x7fc00000))) +) +(assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) +(assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7f800000)) + +;; +;; from int_exprs.wast +;; + +(module + (func (export "i32.no_fold_div_neg1") (param $x i32) (result i32) + (i32.div_s (get_local $x) (i32.const -1))) + + (func (export "i64.no_fold_div_neg1") (param $x i64) (result i64) + (i64.div_s (get_local $x) (i64.const -1))) +) + +(assert_return (invoke "i32.no_fold_div_neg1" (i32.const 0x80000000)) (i32.const 0x80000000)) +(assert_return (invoke "i64.no_fold_div_neg1" (i64.const 0x8000000000000000)) (i64.const 0x8000000000000000)) +;; should be: +;;(assert_trap (invoke "i32.no_fold_div_neg1" (i32.const 0x80000000)) "integer overflow") +;;(assert_trap (invoke "i64.no_fold_div_neg1" (i64.const 0x8000000000000000)) "integer overflow") \ No newline at end of file diff --git a/libraries/wasm-jit/Test/spec/address.wast b/libraries/wasm-jit/Test/spec/address.wast new file mode 100644 index 000000000..47bd21bad --- /dev/null +++ b/libraries/wasm-jit/Test/spec/address.wast @@ -0,0 +1,42 @@ +(module + (import "spectest" "print" (func $print (param i32))) + + (memory 1) + (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz") + + (func (export "good") (param $i i32) + (call $print (i32.load8_u offset=0 (get_local $i))) ;; 97 'a' + (call $print (i32.load8_u offset=1 (get_local $i))) ;; 98 'b' + (call $print (i32.load8_u offset=2 (get_local $i))) ;; 99 'c' + (call $print (i32.load8_u offset=25 (get_local $i))) ;; 122 'z' + + (call $print (i32.load16_u offset=0 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u align=1 (get_local $i))) ;; 25185 'ab' + (call $print (i32.load16_u offset=1 align=1 (get_local $i))) ;; 25442 'bc' + (call $print (i32.load16_u offset=2 (get_local $i))) ;; 25699 'cd' + (call $print (i32.load16_u offset=25 align=1 (get_local $i))) ;; 122 'z\0' + + (call $print (i32.load offset=0 (get_local $i))) ;; 1684234849 'abcd' + (call $print (i32.load offset=1 align=1 (get_local $i))) ;; 1701077858 'bcde' + (call $print (i32.load offset=2 align=2 (get_local $i))) ;; 1717920867 'cdef' + (call $print (i32.load offset=25 align=1 (get_local $i))) ;; 122 'z\0\0\0' + ) + + (func (export "bad") (param $i i32) + (drop (i32.load offset=4294967295 (get_local $i))) + ) +) + +(invoke "good" (i32.const 0)) +(invoke "good" (i32.const 65507)) +(assert_trap (invoke "good" (i32.const 65508)) "out of bounds memory access") +(assert_trap (invoke "bad" (i32.const 0)) "out of bounds memory access") +(assert_trap (invoke "bad" (i32.const 1)) "out of bounds memory access") + +(assert_malformed + (module quote + "(memory 1)" + "(func (drop (i32.load offset=4294967296 (i32.const 0))))" + ) + "i32 constant" +) diff --git a/libraries/wasm-jit/Test/spec/align.wast b/libraries/wasm-jit/Test/spec/align.wast new file mode 100644 index 000000000..133b501d7 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/align.wast @@ -0,0 +1,33 @@ +(assert_malformed + (module quote + "(module (memory 0) (func (drop (i64.load align=0 (i32.const 0)))))" + ) + "alignment" +) +(assert_malformed + (module quote + "(module (memory 0) (func (drop (i64.load align=7 (i32.const 0)))))" + ) + "alignment" +) +(assert_invalid + (module (memory 0) (func (drop (i64.load align=16 (i32.const 0))))) + "alignment" +) + +(assert_malformed + (module quote + "(module (memory 0) (func (i64.store align=0 (i32.const 0) (i64.const 0))))" + ) + "alignment" +) +(assert_malformed + (module quote + "(module (memory 0) (func (i64.store align=5 (i32.const 0) (i64.const 0))))" + ) + "alignment" +) +(assert_invalid + (module (memory 0) (func (i64.store align=16 (i32.const 0) (i64.const 0)))) + "alignment" +) diff --git a/libraries/wasm-jit/Test/spec/binary.wast b/libraries/wasm-jit/Test/spec/binary.wast new file mode 100644 index 000000000..3e971a203 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/binary.wast @@ -0,0 +1,44 @@ +(module binary "\00asm\01\00\00\00") +(module binary "\00asm" "\01\00\00\00") +(module $M1 binary "\00asm\01\00\00\00") +(module $M2 binary "\00asm" "\01\00\00\00") + +(assert_malformed (module binary "") "unexpected end") +(assert_malformed (module binary "\01") "unexpected end") +(assert_malformed (module binary "\00as") "unexpected end") +(assert_malformed (module binary "asm\00") "magic header not detected") +(assert_malformed (module binary "msa\00") "magic header not detected") +(assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") +(assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") +(assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") +(assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") +(assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") +(assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") +(assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") +(assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") + +;; 8-byte endian-reversed. +(assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") + +;; Middle-endian byte orderings. +(assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") +(assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") + +;; Upper-cased. +(assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") + +;; EBCDIC-encoded magic. +(assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") + +;; Leading UTF-8 BOM. +(assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") + +(assert_malformed (module binary "\00asm") "unexpected end") +(assert_malformed (module binary "\00asm\01") "unexpected end") +(assert_malformed (module binary "\00asm\01\00\00") "unexpected end") +(assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") +(assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") +(assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") +(assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") +(assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") +(assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") diff --git a/libraries/wasm-jit/Test/spec/block.wast b/libraries/wasm-jit/Test/spec/block.wast new file mode 100644 index 000000000..f2b6384c3 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/block.wast @@ -0,0 +1,299 @@ +;; Test `block` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "empty") + (block) + (block $l) + ) + + (func (export "singular") (result i32) + (block (nop)) + (block (result i32) (i32.const 7)) + ) + + (func (export "multi") (result i32) + (block (call $dummy) (call $dummy) (call $dummy) (call $dummy)) + (block (result i32) (call $dummy) (call $dummy) (call $dummy) (i32.const 8)) + ) + + (func (export "nested") (result i32) + (block (result i32) + (block (call $dummy) (block) (nop)) + (block (result i32) (call $dummy) (i32.const 9)) + ) + ) + + (func (export "deep") (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (block (result i32) (block (result i32) + (call $dummy) (i32.const 150) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + )) + ) + + (func (export "as-unary-operand") (result i32) + (i32.ctz (block (result i32) (call $dummy) (i32.const 13))) + ) + (func (export "as-binary-operand") (result i32) + (i32.mul + (block (result i32) (call $dummy) (i32.const 3)) + (block (result i32) (call $dummy) (i32.const 4)) + ) + ) + (func (export "as-test-operand") (result i32) + (i32.eqz (block (result i32) (call $dummy) (i32.const 13))) + ) + (func (export "as-compare-operand") (result i32) + (f32.gt + (block (result f32) (call $dummy) (f32.const 3)) + (block (result f32) (call $dummy) (f32.const 3)) + ) + ) + + (func (export "break-bare") (result i32) + (block (br 0) (unreachable)) + (block (br_if 0 (i32.const 1)) (unreachable)) + (block (br_table 0 (i32.const 0)) (unreachable)) + (block (br_table 0 0 0 (i32.const 1)) (unreachable)) + (i32.const 19) + ) + (func (export "break-value") (result i32) + (block (result i32) (br 0 (i32.const 18)) (i32.const 19)) + ) + (func (export "break-repeated") (result i32) + (block (result i32) + (br 0 (i32.const 18)) + (br 0 (i32.const 19)) + (drop (br_if 0 (i32.const 20) (i32.const 0))) + (drop (br_if 0 (i32.const 20) (i32.const 1))) + (br 0 (i32.const 21)) + (br_table 0 (i32.const 22) (i32.const 4)) + (br_table 0 0 0 (i32.const 23) (i32.const 1)) + (i32.const 21) + ) + ) + (func (export "break-inner") (result i32) + (local i32) + (set_local 0 (i32.const 0)) + (set_local 0 (i32.add (get_local 0) (block (result i32) (block (result i32) (br 1 (i32.const 0x1)))))) + (set_local 0 (i32.add (get_local 0) (block (result i32) (block (br 0)) (i32.const 0x2)))) + (set_local 0 + (i32.add (get_local 0) (block (result i32) (i32.ctz (br 0 (i32.const 0x4))))) + ) + (set_local 0 + (i32.add (get_local 0) (block (result i32) (i32.ctz (block (result i32) (br 1 (i32.const 0x8)))))) + ) + (get_local 0) + ) + + (func (export "effects") (result i32) + (local i32) + (block + (set_local 0 (i32.const 1)) + (set_local 0 (i32.mul (get_local 0) (i32.const 3))) + (set_local 0 (i32.sub (get_local 0) (i32.const 5))) + (set_local 0 (i32.mul (get_local 0) (i32.const 7))) + (br 0) + (set_local 0 (i32.mul (get_local 0) (i32.const 100))) + ) + (i32.eq (get_local 0) (i32.const -14)) + ) +) + +(assert_return (invoke "empty")) +(assert_return (invoke "singular") (i32.const 7)) +(assert_return (invoke "multi") (i32.const 8)) +(assert_return (invoke "nested") (i32.const 9)) +(assert_return (invoke "deep") (i32.const 150)) + +(assert_return (invoke "as-unary-operand") (i32.const 0)) +(assert_return (invoke "as-binary-operand") (i32.const 12)) +(assert_return (invoke "as-test-operand") (i32.const 0)) +(assert_return (invoke "as-compare-operand") (i32.const 0)) + +(assert_return (invoke "break-bare") (i32.const 19)) +(assert_return (invoke "break-value") (i32.const 18)) +(assert_return (invoke "break-repeated") (i32.const 18)) +(assert_return (invoke "break-inner") (i32.const 0xf)) + +(assert_return (invoke "effects") (i32.const 1)) + +(assert_invalid + (module (func $type-empty-i32 (result i32) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32) (block))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64) (block))) + "type mismatch" +) + +(assert_invalid + (module (func $type-value-num-vs-void + (block (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-empty-vs-num (result i32) + (block (result i32)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num (result i32) + (block (result i32) (nop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result i32) + (block (result i32) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-unreached-select (result i32) + (block (result i64) (select (unreachable) (unreachable) (unreachable))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-last-void-vs-num (result i32) + (block (result i32) (br 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-empty-vs-num (result i32) + (block (result i32) (br 0) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-void-vs-num (result i32) + (block (result i32) (br 0 (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-num-vs-num (result i32) + (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-void-vs-num (result i32) + (block (result i32) (br 0 (nop)) (br 0 (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-num-vs-num (result i32) + (block (result i32) (br 0 (i64.const 1)) (br 0 (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-nested-num-vs-void + (block (result i32) (block (result i32) (br 1 (i32.const 1))) (br 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-empty-vs-num (result i32) + (block (result i32) (block (br 1)) (br 0 (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-nested-void-vs-num (result i32) + (block (result i32) (block (result i32) (br 1 (nop))) (br 0 (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-num-vs-num (result i32) + (block (result i32) + (block (result i32) (br 1 (i64.const 1))) (br 0 (i32.const 1)) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-operand-empty-vs-num (result i32) + (i32.ctz (block (br 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-operand-void-vs-num (result i32) + (i64.ctz (block (br 0 (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-operand-num-vs-num (result i32) + (i64.ctz (block (br 0 (i64.const 9)))) + )) + "type mismatch" +) + + +(assert_malformed + (module quote "(func block end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func block $a end $l)") + "mismatching label" +) diff --git a/libraries/wasm-jit/Test/spec/br.wast b/libraries/wasm-jit/Test/spec/br.wast new file mode 100644 index 000000000..77f781d4d --- /dev/null +++ b/libraries/wasm-jit/Test/spec/br.wast @@ -0,0 +1,447 @@ +;; Test `br` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") (block (drop (i32.ctz (br 0))))) + (func (export "type-i64") (block (drop (i64.ctz (br 0))))) + (func (export "type-f32") (block (drop (f32.neg (br 0))))) + (func (export "type-f64") (block (drop (f64.neg (br 0))))) + + (func (export "type-i32-value") (result i32) + (block (result i32) (i32.ctz (br 0 (i32.const 1)))) + ) + (func (export "type-i64-value") (result i64) + (block (result i64) (i64.ctz (br 0 (i64.const 2)))) + ) + (func (export "type-f32-value") (result f32) + (block (result f32) (f32.neg (br 0 (f32.const 3)))) + ) + (func (export "type-f64-value") (result f64) + (block (result f64) (f64.neg (br 0 (f64.const 4)))) + ) + + (func (export "as-block-first") + (block (br 0) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (br 0) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (br 0)) + ) + (func (export "as-block-value") (result i32) + (block (result i32) (nop) (call $dummy) (br 0 (i32.const 2))) + ) + + (func (export "as-loop-first") (result i32) + (block (result i32) (loop (result i32) (br 1 (i32.const 3)) (i32.const 2))) + ) + (func (export "as-loop-mid") (result i32) + (block (result i32) + (loop (result i32) (call $dummy) (br 1 (i32.const 4)) (i32.const 2)) + ) + ) + (func (export "as-loop-last") (result i32) + (block (result i32) + (loop (result i32) (nop) (call $dummy) (br 1 (i32.const 5))) + ) + ) + + (func (export "as-br-value") (result i32) + (block (result i32) (br 0 (br 0 (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (br 0))) + ) + (func (export "as-br_if-value") (result i32) + (block (result i32) + (drop (br_if 0 (br 0 (i32.const 8)) (i32.const 1))) (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block (result i32) + (drop (br_if 0 (i32.const 6) (br 0 (i32.const 9)))) (i32.const 7) + ) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (br 0))) + ) + (func (export "as-br_table-value") (result i32) + (block (result i32) + (br_table 0 0 0 (br 0 (i32.const 10)) (i32.const 1)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block (result i32) + (br_table 0 0 (i32.const 6) (br 0 (i32.const 11))) (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (block (result i64) (return (br 0 (i64.const 7)))) + ) + + (func (export "as-if-cond") (result i32) + (block (result i32) + (if (result i32) (br 0 (i32.const 2)) + (then (i32.const 0)) + (else (i32.const 1)) + ) + ) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (block (result i32) + (if (result i32) (get_local 0) + (then (br 1 (i32.const 3))) + (else (get_local 1)) + ) + ) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (block (result i32) + (if (result i32) (get_local 0) + (then (get_local 1)) + (else (br 1 (i32.const 4))) + ) + ) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (block (result i32) + (select (br 0 (i32.const 5)) (get_local 0) (get_local 1)) + ) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (block (result i32) + (select (get_local 0) (br 0 (i32.const 6)) (get_local 1)) + ) + ) + (func (export "as-select-cond") (result i32) + (block (result i32) + (select (i32.const 0) (i32.const 1) (br 0 (i32.const 7))) + ) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (block (result i32) + (call $f (br 0 (i32.const 12)) (i32.const 2) (i32.const 3)) + ) + ) + (func (export "as-call-mid") (result i32) + (block (result i32) + (call $f (i32.const 1) (br 0 (i32.const 13)) (i32.const 3)) + ) + ) + (func (export "as-call-last") (result i32) + (block (result i32) + (call $f (i32.const 1) (i32.const 2) (br 0 (i32.const 14))) + ) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-func") (result i32) + (block (result i32) + (call_indirect $sig + (br 0 (i32.const 20)) + (i32.const 1) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-first") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) + (br 0 (i32.const 21)) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) + (i32.const 1) (br 0 (i32.const 22)) (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) + (i32.const 1) (i32.const 2) (br 0 (i32.const 23)) + ) + ) + ) + + (func (export "as-set_local-value") (result i32) (local f32) + (block (result i32) (set_local 0 (br 0 (i32.const 17))) (i32.const -1)) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (block (result f32) (f32.load (br 0 (f32.const 1.7)))) + ) + (func (export "as-loadN-address") (result i64) + (block (result i64) (i64.load8_s (br 0 (i64.const 30)))) + ) + + (func (export "as-store-address") (result i32) + (block (result i32) + (f64.store (br 0 (i32.const 30)) (f64.const 7)) (i32.const -1) + ) + ) + (func (export "as-store-value") (result i32) + (block (result i32) + (i64.store (i32.const 2) (br 0 (i32.const 31))) (i32.const -1) + ) + ) + + (func (export "as-storeN-address") (result i32) + (block (result i32) + (i32.store8 (br 0 (i32.const 32)) (i32.const 7)) (i32.const -1) + ) + ) + (func (export "as-storeN-value") (result i32) + (block (result i32) + (i64.store16 (i32.const 2) (br 0 (i32.const 33))) (i32.const -1) + ) + ) + + (func (export "as-unary-operand") (result f32) + (block (result f32) (f32.neg (br 0 (f32.const 3.4)))) + ) + + (func (export "as-binary-left") (result i32) + (block (result i32) (i32.add (br 0 (i32.const 3)) (i32.const 10))) + ) + (func (export "as-binary-right") (result i64) + (block (result i64) (i64.sub (i64.const 10) (br 0 (i64.const 45)))) + ) + + (func (export "as-test-operand") (result i32) + (block (result i32) (i32.eqz (br 0 (i32.const 44)))) + ) + + (func (export "as-compare-left") (result i32) + (block (result i32) (f64.le (br 0 (i32.const 43)) (f64.const 10))) + ) + (func (export "as-compare-right") (result i32) + (block (result i32) (f32.ne (f32.const 10) (br 0 (i32.const 42)))) + ) + + (func (export "as-convert-operand") (result i32) + (block (result i32) (i32.wrap/i64 (br 0 (i32.const 41)))) + ) + + (func (export "as-grow_memory-size") (result i32) + (block (result i32) (grow_memory (br 0 (i32.const 40)))) + ) + + (func (export "nested-block-value") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (call $dummy) + (i32.add (i32.const 4) (br 0 (i32.const 8))) + ) + ) + ) + + (func (export "nested-br-value") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (br 0 (br 1 (i32.const 8))) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (drop (br_if 0 (br 1 (i32.const 8)) (i32.const 1))) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop (br_if 0 (i32.const 4) (br 0 (i32.const 8)))) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (br_table 0 (br 1 (i32.const 8)) (i32.const 1)) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value-index") (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (br_table 0 (i32.const 4) (br 0 (i32.const 8))) + (i32.const 16) + ) + ) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "type-i32-value") (i32.const 1)) +(assert_return (invoke "type-i64-value") (i64.const 2)) +(assert_return (invoke "type-f32-value") (f32.const 3)) +(assert_return (invoke "type-f64-value") (f64.const 4)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index")) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-func") (i32.const 20)) +(assert_return (invoke "as-call_indirect-first") (i32.const 21)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 22)) +(assert_return (invoke "as-call_indirect-last") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_return (invoke "nested-block-value") (i32.const 9)) +(assert_return (invoke "nested-br-value") (i32.const 9)) +(assert_return (invoke "nested-br_if-value") (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond") (i32.const 9)) +(assert_return (invoke "nested-br_table-value") (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index") (i32.const 9)) + +(assert_invalid + (module (func $type-arg-empty-vs-num (result i32) + (block (result i32) (br 0) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (result i32) (br 0 (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-void-vs-num-nested (result i32) + (block (result i32) (i32.const 0) (block (br 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-num (result i32) + (block (result i32) (br 0 (i64.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label (br 1))) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label (block (block (br 5))))) + "unknown label" +) +(assert_invalid + (module (func $large-label (br 0x10000001))) + "unknown label" +) diff --git a/libraries/wasm-jit/Test/spec/br_if.wast b/libraries/wasm-jit/Test/spec/br_if.wast new file mode 100644 index 000000000..0aa46d471 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/br_if.wast @@ -0,0 +1,321 @@ +;; Test `br_if` operator + +(module + (func $dummy) + + (func (export "as-block-first") (param i32) (result i32) + (block (br_if 0 (get_local 0)) (return (i32.const 2))) (i32.const 3) + ) + (func (export "as-block-mid") (param i32) (result i32) + (block (call $dummy) (br_if 0 (get_local 0)) (return (i32.const 2))) + (i32.const 3) + ) + (func (export "as-block-last") (param i32) + (block (call $dummy) (call $dummy) (br_if 0 (get_local 0))) + ) + (func (export "as-block-first-value") (param i32) (result i32) + (block (result i32) + (drop (br_if 0 (i32.const 10) (get_local 0))) (return (i32.const 11)) + ) + ) + (func (export "as-block-mid-value") (param i32) (result i32) + (block (result i32) + (call $dummy) + (drop (br_if 0 (i32.const 20) (get_local 0))) + (return (i32.const 21)) + ) + ) + (func (export "as-block-last-value") (param i32) (result i32) + (block (result i32) + (call $dummy) (call $dummy) (br_if 0 (i32.const 11) (get_local 0)) + ) + ) + + (func (export "as-loop-first") (param i32) (result i32) + (block (loop (br_if 1 (get_local 0)) (return (i32.const 2)))) (i32.const 3) + ) + (func (export "as-loop-mid") (param i32) (result i32) + (block (loop (call $dummy) (br_if 1 (get_local 0)) (return (i32.const 2)))) + (i32.const 4) + ) + (func (export "as-loop-last") (param i32) + (loop (call $dummy) (br_if 1 (get_local 0))) + ) + + (func (export "as-if-then") (param i32 i32) + (block + (if (get_local 0) (then (br_if 1 (get_local 1))) (else (call $dummy))) + ) + ) + (func (export "as-if-else") (param i32 i32) + (block + (if (get_local 0) (then (call $dummy)) (else (br_if 1 (get_local 1)))) + ) + ) + + (func (export "nested-block-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (i32.add + (i32.const 4) + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) + (i32.const 16) + ) + ) + ) + ) + ) + + (func (export "nested-br-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (br 0 + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4) + ) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop (br_if 0 + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4) + ) + (i32.const 1) + )) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop (br_if 0 + (i32.const 4) + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 1) + ) + )) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (br_table 0 + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 4) + ) + (i32.const 1) + ) + (i32.const 16) + ) + ) + ) + + (func (export "nested-br_table-value-index") (param i32) (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (br_table 0 + (i32.const 4) + (block (result i32) + (drop (br_if 1 (i32.const 8) (get_local 0))) (i32.const 1) + ) + ) + (i32.const 16) + ) + ) + ) +) + +(assert_return (invoke "as-block-first" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-block-first" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-block-mid" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-block-mid" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-block-last" (i32.const 0))) +(assert_return (invoke "as-block-last" (i32.const 1))) +(assert_return (invoke "as-block-last-value" (i32.const 0)) (i32.const 11)) +(assert_return (invoke "as-block-last-value" (i32.const 1)) (i32.const 11)) + +(assert_return (invoke "as-loop-first" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-loop-first" (i32.const 1)) (i32.const 3)) +(assert_return (invoke "as-loop-mid" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "as-loop-mid" (i32.const 1)) (i32.const 4)) +(assert_return (invoke "as-loop-last" (i32.const 0))) +(assert_return (invoke "as-loop-last" (i32.const 1))) + +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 4) (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 1))) +(assert_return (invoke "as-if-then" (i32.const 4) (i32.const 1))) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 3) (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 1))) +(assert_return (invoke "as-if-else" (i32.const 3) (i32.const 1))) + +(assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 21)) +(assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 5)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 9)) + +(assert_invalid + (module (func $type-false-i32 (block (i32.ctz (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-i64 (block (i64.ctz (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-f32 (block (f32.neg (br_if 0 (i32.const 0)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-false-f64 (block (f64.neg (br_if 0 (i32.const 0)))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-true-i32 (block (i32.ctz (br_if 0 (i32.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-i64 (block (i64.ctz (br_if 0 (i64.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-f32 (block (f32.neg (br_if 0 (f32.const 1)))))) + "type mismatch" +) +(assert_invalid + (module (func $type-true-f64 (block (f64.neg (br_if 0 (i64.const 1)))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-false-arg-void-vs-num (result i32) + (block (result i32) (br_if 0 (i32.const 0)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-void-vs-num (result i32) + (block (result i32) (br_if 0 (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-false-arg-num-vs-void + (block (br_if 0 (i32.const 0) (i32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-num-vs-void + (block (br_if 0 (i32.const 0) (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-false-arg-void-vs-num (result i32) + (block (result i32) (br_if 0 (nop) (i32.const 0)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-void-vs-num (result i32) + (block (result i32) (br_if 0 (nop) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-false-arg-num-vs-num (result i32) + (block (result i32) + (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-true-arg-num-vs-num (result i32) + (block (result i32) + (drop (br_if 0 (i64.const 1) (i32.const 0))) (i32.const 1) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-cond-void-vs-i32 + (block (br_if 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-cond-num-vs-i32 + (block (br_if 0 (i64.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-cond-void-vs-i32 (result i32) + (block (result i32) (br_if 0 (i32.const 0) (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-void-vs-num-nested (result i32) + (block (result i32) (i32.const 0) (block (br_if 1 (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-cond-num-vs-i32 (result i32) + (block (result i32) (br_if 0 (i32.const 0) (i64.const 0)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label (br_if 1 (i32.const 1)))) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label (block (block (br_if 5 (i32.const 1)))))) + "unknown label" +) +(assert_invalid + (module (func $large-label (br_if 0x10000001 (i32.const 1)))) + "unknown label" +) + diff --git a/libraries/wasm-jit/Test/spec/br_table.wast b/libraries/wasm-jit/Test/spec/br_table.wast new file mode 100644 index 000000000..c8d6082d7 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/br_table.wast @@ -0,0 +1,1515 @@ +;; Test `br_table` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") + (block (drop (i32.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-i64") + (block (drop (i64.ctz (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f32") + (block (drop (f32.neg (br_table 0 0 (i32.const 0))))) + ) + (func (export "type-f64") + (block (drop (f64.neg (br_table 0 0 (i32.const 0))))) + ) + + (func (export "type-i32-value") (result i32) + (block (result i32) (i32.ctz (br_table 0 0 (i32.const 1) (i32.const 0)))) + ) + (func (export "type-i64-value") (result i64) + (block (result i64) (i64.ctz (br_table 0 0 (i64.const 2) (i32.const 0)))) + ) + (func (export "type-f32-value") (result f32) + (block (result f32) (f32.neg (br_table 0 0 (f32.const 3) (i32.const 0)))) + ) + (func (export "type-f64-value") (result f64) + (block (result f64) (f64.neg (br_table 0 0 (f64.const 4) (i32.const 0)))) + ) + + (func (export "empty") (param i32) (result i32) + (block (br_table 0 (get_local 0)) (return (i32.const 21))) + (i32.const 22) + ) + (func (export "empty-value") (param i32) (result i32) + (block (result i32) + (br_table 0 (i32.const 33) (get_local 0)) (i32.const 31) + ) + ) + + (func (export "singleton") (param i32) (result i32) + (block + (block + (br_table 1 0 (get_local 0)) + (return (i32.const 21)) + ) + (return (i32.const 20)) + ) + (i32.const 22) + ) + + (func (export "singleton-value") (param i32) (result i32) + (block (result i32) + (drop + (block (result i32) + (br_table 0 1 (i32.const 33) (get_local 0)) + (return (i32.const 31)) + ) + ) + (i32.const 32) + ) + ) + + (func (export "multiple") (param i32) (result i32) + (block + (block + (block + (block + (block + (br_table 3 2 1 0 4 (get_local 0)) + (return (i32.const 99)) + ) + (return (i32.const 100)) + ) + (return (i32.const 101)) + ) + (return (i32.const 102)) + ) + (return (i32.const 103)) + ) + (i32.const 104) + ) + + (func (export "multiple-value") (param i32) (result i32) + (local i32) + (set_local 1 (block (result i32) + (set_local 1 (block (result i32) + (set_local 1 (block (result i32) + (set_local 1 (block (result i32) + (set_local 1 (block (result i32) + (br_table 3 2 1 0 4 (i32.const 200) (get_local 0)) + (return (i32.add (get_local 1) (i32.const 99))) + )) + (return (i32.add (get_local 1) (i32.const 10))) + )) + (return (i32.add (get_local 1) (i32.const 11))) + )) + (return (i32.add (get_local 1) (i32.const 12))) + )) + (return (i32.add (get_local 1) (i32.const 13))) + )) + (i32.add (get_local 1) (i32.const 14)) + ) + + (func (export "large") (param i32) (result i32) + (block + (block + (br_table + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 + (get_local 0) + ) + (return (i32.const -1)) + ) + (return (i32.const 0)) + ) + (return (i32.const 1)) + ) + + (func (export "as-block-first") + (block (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (br_table 0 0 0 (i32.const 0)) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (br_table 0 0 0 (i32.const 0))) + ) + (func (export "as-block-value") (result i32) + (block (result i32) + (nop) (call $dummy) (br_table 0 0 0 (i32.const 2) (i32.const 0)) + ) + ) + + (func (export "as-loop-first") (result i32) + (loop (result i32) (br_table 1 1 (i32.const 3) (i32.const 0)) (i32.const 1)) + ) + (func (export "as-loop-mid") (result i32) + (loop (result i32) + (call $dummy) + (br_table 1 1 1 (i32.const 4) (i32.const -1)) + (i32.const 2) + ) + ) + (func (export "as-loop-last") (result i32) + (loop (result i32) + (nop) (call $dummy) (br_table 1 1 1 (i32.const 5) (i32.const 1)) + ) + ) + + (func (export "as-br-value") (result i32) + (block (result i32) (br 0 (br 0 (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (br_table 0 0 0 (i32.const 1)))) + ) + (func (export "as-br_if-value") (result i32) + (block (result i32) + (drop (br_if 0 (br_table 0 (i32.const 8) (i32.const 0)) (i32.const 1))) + (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block (result i32) + (drop (br_if 0 (i32.const 6) (br_table 0 0 (i32.const 9) (i32.const 0)))) + (i32.const 7) + ) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (br_table 0 (i32.const 1)))) + ) + (func (export "as-br_table-value") (result i32) + (block (result i32) + (br_table 0 0 0 (br_table 0 (i32.const 10) (i32.const 0)) (i32.const 1)) + (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block (result i32) + (br_table 0 0 (i32.const 6) (br_table 0 (i32.const 11) (i32.const 1))) + (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (block (result i64) (return (br_table 0 (i64.const 7) (i32.const 0)))) + ) + + (func (export "as-if-cond") (result i32) + (block (result i32) + (if (result i32) + (br_table 0 (i32.const 2) (i32.const 0)) + (then (i32.const 0)) + (else (i32.const 1)) + ) + ) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (block (result i32) + (if (result i32) + (get_local 0) + (then (br_table 1 (i32.const 3) (i32.const 0))) + (else (get_local 1)) + ) + ) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (block (result i32) + (if (result i32) + (get_local 0) + (then (get_local 1)) + (else (br_table 1 0 (i32.const 4) (i32.const 0))) + ) + ) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (block (result i32) + (select + (br_table 0 (i32.const 5) (i32.const 0)) (get_local 0) (get_local 1) + ) + ) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (block (result i32) + (select + (get_local 0) (br_table 0 (i32.const 6) (i32.const 1)) (get_local 1) + ) + ) + ) + (func (export "as-select-cond") (result i32) + (block (result i32) + (select + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 7) (i32.const 1)) + ) + ) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (block (result i32) + (call $f + (br_table 0 (i32.const 12) (i32.const 1)) (i32.const 2) (i32.const 3) + ) + ) + ) + (func (export "as-call-mid") (result i32) + (block (result i32) + (call $f + (i32.const 1) (br_table 0 (i32.const 13) (i32.const 1)) (i32.const 3) + ) + ) + ) + (func (export "as-call-last") (result i32) + (block (result i32) + (call $f + (i32.const 1) (i32.const 2) (br_table 0 (i32.const 14) (i32.const 1)) + ) + ) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-first") (result i32) + (block (result i32) + (call_indirect $sig + (br_table 0 (i32.const 20) (i32.const 1)) (i32.const 1) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-mid") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) (br_table 0 (i32.const 21) (i32.const 1)) (i32.const 2) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-last") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) (i32.const 1) (br_table 0 (i32.const 22) (i32.const 1)) + (i32.const 3) + ) + ) + ) + (func (export "as-call_indirect-func") (result i32) + (block (result i32) + (call_indirect $sig + (i32.const 0) (i32.const 1) (i32.const 2) + (br_table 0 (i32.const 23) (i32.const 1)) + ) + ) + ) + + (func (export "as-set_local-value") (result i32) + (local f32) + (block (result i32) + (set_local 0 (br_table 0 (i32.const 17) (i32.const 1))) + (i32.const -1) + ) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (block (result f32) (f32.load (br_table 0 (f32.const 1.7) (i32.const 1)))) + ) + (func (export "as-loadN-address") (result i64) + (block (result i64) (i64.load8_s (br_table 0 (i64.const 30) (i32.const 1)))) + ) + + (func (export "as-store-address") (result i32) + (block (result i32) + (f64.store (br_table 0 (i32.const 30) (i32.const 1)) (f64.const 7)) + (i32.const -1) + ) + ) + (func (export "as-store-value") (result i32) + (block (result i32) + (i64.store (i32.const 2) (br_table 0 (i32.const 31) (i32.const 1))) + (i32.const -1) + ) + ) + + (func (export "as-storeN-address") (result i32) + (block (result i32) + (i32.store8 (br_table 0 (i32.const 32) (i32.const 0)) (i32.const 7)) + (i32.const -1) + ) + ) + (func (export "as-storeN-value") (result i32) + (block (result i32) + (i64.store16 (i32.const 2) (br_table 0 (i32.const 33) (i32.const 0))) + (i32.const -1) + ) + ) + + (func (export "as-unary-operand") (result f32) + (block (result f32) (f32.neg (br_table 0 (f32.const 3.4) (i32.const 0)))) + ) + + (func (export "as-binary-left") (result i32) + (block (result i32) + (i32.add (br_table 0 0 (i32.const 3) (i32.const 0)) (i32.const 10)) + ) + ) + (func (export "as-binary-right") (result i64) + (block (result i64) + (i64.sub (i64.const 10) (br_table 0 (i64.const 45) (i32.const 0))) + ) + ) + + (func (export "as-test-operand") (result i32) + (block (result i32) (i32.eqz (br_table 0 (i32.const 44) (i32.const 0)))) + ) + + (func (export "as-compare-left") (result i32) + (block (result i32) + (f64.le (br_table 0 0 (i32.const 43) (i32.const 0)) (f64.const 10)) + ) + ) + (func (export "as-compare-right") (result i32) + (block (result i32) + (f32.ne (f32.const 10) (br_table 0 (i32.const 42) (i32.const 0))) + ) + ) + + (func (export "as-convert-operand") (result i32) + (block (result i32) + (i32.wrap/i64 (br_table 0 (i32.const 41) (i32.const 0))) + ) + ) + + (func (export "as-grow_memory-size") (result i32) + (block (result i32) (grow_memory (br_table 0 (i32.const 40) (i32.const 0)))) + ) + + (func (export "nested-block-value") (param i32) (result i32) + (block (result i32) + (drop (i32.const -1)) + (i32.add + (i32.const 1) + (block (result i32) + (i32.add + (i32.const 2) + (block (result i32) + (drop (i32.const 4)) + (i32.add + (i32.const 8) + (br_table 0 1 2 (i32.const 16) (get_local 0)) + ) + ) + ) + ) + ) + ) + ) + + (func (export "nested-br-value") (param i32) (result i32) + (block (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (br 0 (br_table 2 1 0 (i32.const 8) (get_local 0))) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value") (param i32) (result i32) + (block (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (drop + (br_if 0 + (br_table 0 1 2 (i32.const 8) (get_local 0)) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_if-value-cond") (param i32) (result i32) + (block (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (br_if 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0))) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value") (param i32) (result i32) + (block (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (drop + (block (result i32) + (drop (i32.const 4)) + (br_table 0 (br_table 0 1 2 (i32.const 8) (get_local 0)) (i32.const 1)) + (i32.const 32) + ) + ) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-value-index") (param i32) (result i32) + (block (result i32) + (i32.add + (i32.const 1) + (block (result i32) + (drop (i32.const 2)) + (br_table 0 (i32.const 4) (br_table 0 1 0 (i32.const 8) (get_local 0))) + (i32.const 16) + ) + ) + ) + ) + + (func (export "nested-br_table-loop-block") (param i32) (result i32) + (set_local 0 + (loop (result i32) + (block + (br_table 1 0 0 (get_local 0)) + ) + (i32.const 0) + ) + ) + (loop (result i32) + (block + (br_table 0 1 1 (get_local 0)) + ) + (i32.const 3) + ) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "type-i32-value") (i32.const 1)) +(assert_return (invoke "type-i64-value") (i64.const 2)) +(assert_return (invoke "type-f32-value") (f32.const 3)) +(assert_return (invoke "type-f64-value") (f64.const 4)) + +(assert_return (invoke "empty" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 11)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -1)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const -100)) (i32.const 22)) +(assert_return (invoke "empty" (i32.const 0xffffffff)) (i32.const 22)) + +(assert_return (invoke "empty-value" (i32.const 0)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "empty-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "singleton" (i32.const 0)) (i32.const 22)) +(assert_return (invoke "singleton" (i32.const 1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 11)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -1)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const -100)) (i32.const 20)) +(assert_return (invoke "singleton" (i32.const 0xffffffff)) (i32.const 20)) + +(assert_return (invoke "singleton-value" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "singleton-value" (i32.const 1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 11)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -1)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const -100)) (i32.const 33)) +(assert_return (invoke "singleton-value" (i32.const 0xffffffff)) (i32.const 33)) + +(assert_return (invoke "multiple" (i32.const 0)) (i32.const 103)) +(assert_return (invoke "multiple" (i32.const 1)) (i32.const 102)) +(assert_return (invoke "multiple" (i32.const 2)) (i32.const 101)) +(assert_return (invoke "multiple" (i32.const 3)) (i32.const 100)) +(assert_return (invoke "multiple" (i32.const 4)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 5)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 6)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 10)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const -1)) (i32.const 104)) +(assert_return (invoke "multiple" (i32.const 0xffffffff)) (i32.const 104)) + +(assert_return (invoke "multiple-value" (i32.const 0)) (i32.const 213)) +(assert_return (invoke "multiple-value" (i32.const 1)) (i32.const 212)) +(assert_return (invoke "multiple-value" (i32.const 2)) (i32.const 211)) +(assert_return (invoke "multiple-value" (i32.const 3)) (i32.const 210)) +(assert_return (invoke "multiple-value" (i32.const 4)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 5)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 6)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 10)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const -1)) (i32.const 214)) +(assert_return (invoke "multiple-value" (i32.const 0xffffffff)) (i32.const 214)) + +(assert_return (invoke "large" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 100)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 101)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 10000)) (i32.const 0)) +(assert_return (invoke "large" (i32.const 10001)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000000)) (i32.const 1)) +(assert_return (invoke "large" (i32.const 1000001)) (i32.const 1)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index")) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-first") (i32.const 20)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 21)) +(assert_return (invoke "as-call_indirect-last") (i32.const 22)) +(assert_return (invoke "as-call_indirect-func") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_return (invoke "nested-block-value" (i32.const 0)) (i32.const 19)) +(assert_return (invoke "nested-block-value" (i32.const 1)) (i32.const 17)) +(assert_return (invoke "nested-block-value" (i32.const 2)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const -1)) (i32.const 16)) +(assert_return (invoke "nested-block-value" (i32.const 100000)) (i32.const 16)) + +(assert_return (invoke "nested-br-value" (i32.const 0)) (i32.const 8)) +(assert_return (invoke "nested-br-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br-value" (i32.const 2)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 11)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const -4)) (i32.const 17)) +(assert_return (invoke "nested-br-value" (i32.const 10213210)) (i32.const 17)) + +(assert_return (invoke "nested-br_if-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_if-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_if-value-cond" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_if-value-cond" (i32.const 9423975)) (i32.const 9)) + +(assert_return (invoke "nested-br_table-value" (i32.const 0)) (i32.const 17)) +(assert_return (invoke "nested-br_table-value" (i32.const 1)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value" (i32.const 2)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const -9)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value" (i32.const 999999)) (i32.const 8)) + +(assert_return (invoke "nested-br_table-value-index" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 3)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const -1000000)) (i32.const 9)) +(assert_return (invoke "nested-br_table-value-index" (i32.const 9423975)) (i32.const 9)) + +(assert_return (invoke "nested-br_table-loop-block" (i32.const 1)) (i32.const 3)) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (br_table 0 (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-arg-void-vs-num (result i32) + (block (result i32) (br_table 0 (nop) (i32.const 1)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-num (result i32) + (block (result i32) + (br_table 0 0 0 (i64.const 1) (i32.const 1)) (i32.const 1) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-num-vs-arg-num + (block + (block (result f32) + (br_table 0 1 (f32.const 0) (i32.const 0)) + ) + (drop) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-index-void-vs-i32 + (block (br_table 0 0 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-index-num-vs-i32 + (block (br_table 0 (i64.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-void-vs-i32 (result i32) + (block (result i32) (br_table 0 0 (i32.const 0) (nop)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-void-vs-num-nested (result i32) + (block (result i32) (i32.const 0) (block (br_table 1 (i32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-arg-index-num-vs-i32 (result i32) + (block (result i32) + (br_table 0 0 (i32.const 0) (i64.const 0)) (i32.const 1) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $unbound-label + (block (br_table 2 1 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label + (block (br_table 0 0x10000001 0 (i32.const 1))) + )) + "unknown label" +) + +(assert_invalid + (module (func $unbound-label-default + (block (br_table 1 2 (i32.const 1))) + )) + "unknown label" +) +(assert_invalid + (module (func $unbound-nested-label-default + (block (block (br_table 0 5 (i32.const 1)))) + )) + "unknown label" +) +(assert_invalid + (module (func $large-label-default + (block (br_table 0 0 0x10000001 (i32.const 1))) + )) + "unknown label" +) + diff --git a/libraries/wasm-jit/Test/spec/break-drop.wast b/libraries/wasm-jit/Test/spec/break-drop.wast new file mode 100644 index 000000000..e10df6671 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/break-drop.wast @@ -0,0 +1,9 @@ +(module + (func (export "br") (block (br 0))) + (func (export "br_if") (block (br_if 0 (i32.const 1)))) + (func (export "br_table") (block (br_table 0 (i32.const 0)))) +) + +(assert_return (invoke "br")) +(assert_return (invoke "br_if")) +(assert_return (invoke "br_table")) diff --git a/libraries/wasm-jit/Test/spec/call.wast b/libraries/wasm-jit/Test/spec/call.wast new file mode 100644 index 000000000..3a89f2323 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/call.wast @@ -0,0 +1,242 @@ +;; Test `call` operator + +(module + ;; Auxiliary definitions + (func $const-i32 (result i32) (i32.const 0x132)) + (func $const-i64 (result i64) (i64.const 0x164)) + (func $const-f32 (result f32) (f32.const 0xf32)) + (func $const-f64 (result f64) (f64.const 0xf64)) + + (func $id-i32 (param i32) (result i32) (get_local 0)) + (func $id-i64 (param i64) (result i64) (get_local 0)) + (func $id-f32 (param f32) (result f32) (get_local 0)) + (func $id-f64 (param f64) (result f64) (get_local 0)) + + (func $f32-i32 (param f32 i32) (result i32) (get_local 1)) + (func $i32-i64 (param i32 i64) (result i64) (get_local 1)) + (func $f64-f32 (param f64 f32) (result f32) (get_local 1)) + (func $i64-f64 (param i64 f64) (result f64) (get_local 1)) + + ;; Typing + + (func (export "type-i32") (result i32) (call $const-i32)) + (func (export "type-i64") (result i64) (call $const-i64)) + (func (export "type-f32") (result f32) (call $const-f32)) + (func (export "type-f64") (result f64) (call $const-f64)) + + (func (export "type-first-i32") (result i32) (call $id-i32 (i32.const 32))) + (func (export "type-first-i64") (result i64) (call $id-i64 (i64.const 64))) + (func (export "type-first-f32") (result f32) (call $id-f32 (f32.const 1.32))) + (func (export "type-first-f64") (result f64) (call $id-f64 (f64.const 1.64))) + + (func (export "type-second-i32") (result i32) + (call $f32-i32 (f32.const 32.1) (i32.const 32)) + ) + (func (export "type-second-i64") (result i64) + (call $i32-i64 (i32.const 32) (i64.const 64)) + ) + (func (export "type-second-f32") (result f32) + (call $f64-f32 (f64.const 64) (f32.const 32)) + ) + (func (export "type-second-f64") (result f64) + (call $i64-f64 (i64.const 64) (f64.const 64.1)) + ) + + ;; Recursion + + (func $fac (export "fac") (param i64) (result i64) + (if (result i64) (i64.eqz (get_local 0)) + (then (i64.const 1)) + (else + (i64.mul + (get_local 0) + (call $fac (i64.sub (get_local 0) (i64.const 1))) + ) + ) + ) + ) + + (func $fac-acc (export "fac-acc") (param i64 i64) (result i64) + (if (result i64) (i64.eqz (get_local 0)) + (then (get_local 1)) + (else + (call $fac-acc + (i64.sub (get_local 0) (i64.const 1)) + (i64.mul (get_local 0) (get_local 1)) + ) + ) + ) + ) + + (func $fib (export "fib") (param i64) (result i64) + (if (result i64) (i64.le_u (get_local 0) (i64.const 1)) + (then (i64.const 1)) + (else + (i64.add + (call $fib (i64.sub (get_local 0) (i64.const 2))) + (call $fib (i64.sub (get_local 0) (i64.const 1))) + ) + ) + ) + ) + + (func $even (export "even") (param i64) (result i32) + (if (result i32) (i64.eqz (get_local 0)) + (then (i32.const 44)) + (else (call $odd (i64.sub (get_local 0) (i64.const 1)))) + ) + ) + (func $odd (export "odd") (param i64) (result i32) + (if (result i32) (i64.eqz (get_local 0)) + (then (i32.const 99)) + (else (call $even (i64.sub (get_local 0) (i64.const 1)))) + ) + ) + + ;; Stack exhaustion + + ;; Implementations are required to have every call consume some abstract + ;; resource towards exhausting some abstract finite limit, such that + ;; infinitely recursive test cases reliably trap in finite time. This is + ;; because otherwise applications could come to depend on it on those + ;; implementations and be incompatible with implementations that don't do + ;; it (or don't do it under the same circumstances). + + (func $runaway (export "runaway") (call $runaway)) + + (func $mutual-runaway1 (export "mutual-runaway") (call $mutual-runaway2)) + (func $mutual-runaway2 (call $mutual-runaway1)) +) + +(assert_return (invoke "type-i32") (i32.const 0x132)) +(assert_return (invoke "type-i64") (i64.const 0x164)) +(assert_return (invoke "type-f32") (f32.const 0xf32)) +(assert_return (invoke "type-f64") (f64.const 0xf64)) + +(assert_return (invoke "type-first-i32") (i32.const 32)) +(assert_return (invoke "type-first-i64") (i64.const 64)) +(assert_return (invoke "type-first-f32") (f32.const 1.32)) +(assert_return (invoke "type-first-f64") (f64.const 1.64)) + +(assert_return (invoke "type-second-i32") (i32.const 32)) +(assert_return (invoke "type-second-i64") (i64.const 64)) +(assert_return (invoke "type-second-f32") (f32.const 32)) +(assert_return (invoke "type-second-f64") (f64.const 64.1)) + +(assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) +(assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-acc" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac-acc" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac-acc" (i64.const 5) (i64.const 1)) (i64.const 120)) +(assert_return + (invoke "fac-acc" (i64.const 25) (i64.const 1)) + (i64.const 7034535277573963776) +) + +(assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) +(assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) +(assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) + +(assert_return (invoke "even" (i64.const 0)) (i32.const 44)) +(assert_return (invoke "even" (i64.const 1)) (i32.const 99)) +(assert_return (invoke "even" (i64.const 100)) (i32.const 44)) +(assert_return (invoke "even" (i64.const 77)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 0)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 1)) (i32.const 44)) +(assert_return (invoke "odd" (i64.const 200)) (i32.const 99)) +(assert_return (invoke "odd" (i64.const 77)) (i32.const 44)) + +(assert_exhaustion (invoke "runaway") "call stack exhausted") +(assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") + + +;; Invalid typing + +(assert_invalid + (module + (func $type-void-vs-num (i32.eqz (call 1))) + (func) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-num-vs-num (i32.eqz (call 1))) + (func (result i64) (i64.const 1)) + ) + "type mismatch" +) + +(assert_invalid + (module + (func $arity-0-vs-1 (call 1)) + (func (param i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-0-vs-2 (call 1)) + (func (param f64 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-1-vs-0 (call 1 (i32.const 1))) + (func) + ) + "type mismatch" +) +(assert_invalid + (module + (func $arity-2-vs-0 (call 1 (f64.const 2) (i32.const 1))) + (func) + ) + "type mismatch" +) + +(assert_invalid + (module + (func $type-first-void-vs-num (call 1 (nop) (i32.const 1))) + (func (param i32 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-second-void-vs-num (call 1 (i32.const 1) (nop))) + (func (param i32 i32)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-first-num-vs-num (call 1 (f64.const 1) (i32.const 1))) + (func (param i32 f64)) + ) + "type mismatch" +) +(assert_invalid + (module + (func $type-second-num-vs-num (call 1 (i32.const 1) (f64.const 1))) + (func (param f64 i32)) + ) + "type mismatch" +) + + +;; Unbound function + +(assert_invalid + (module (func $unbound-func (call 1))) + "unknown function" +) +(assert_invalid + (module (func $large-func (call 1012321300))) + "unknown function" +) diff --git a/libraries/wasm-jit/Test/spec/call_indirect.wast b/libraries/wasm-jit/Test/spec/call_indirect.wast new file mode 100644 index 000000000..3c27c53c6 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/call_indirect.wast @@ -0,0 +1,408 @@ +;; Test `call_indirect` operator + +(module + ;; Auxiliary definitions + (type $proc (func)) + (type $out-i32 (func (result i32))) + (type $out-i64 (func (result i64))) + (type $out-f32 (func (result f32))) + (type $out-f64 (func (result f64))) + (type $over-i32 (func (param i32) (result i32))) + (type $over-i64 (func (param i64) (result i64))) + (type $over-f32 (func (param f32) (result f32))) + (type $over-f64 (func (param f64) (result f64))) + (type $f32-i32 (func (param f32 i32) (result i32))) + (type $i32-i64 (func (param i32 i64) (result i64))) + (type $f64-f32 (func (param f64 f32) (result f32))) + (type $i64-f64 (func (param i64 f64) (result f64))) + (type $over-i32-duplicate (func (param i32) (result i32))) + (type $over-i64-duplicate (func (param i64) (result i64))) + (type $over-f32-duplicate (func (param f32) (result f32))) + (type $over-f64-duplicate (func (param f64) (result f64))) + + (func $const-i32 (type $out-i32) (i32.const 0x132)) + (func $const-i64 (type $out-i64) (i64.const 0x164)) + (func $const-f32 (type $out-f32) (f32.const 0xf32)) + (func $const-f64 (type $out-f64) (f64.const 0xf64)) + + (func $id-i32 (type $over-i32) (get_local 0)) + (func $id-i64 (type $over-i64) (get_local 0)) + (func $id-f32 (type $over-f32) (get_local 0)) + (func $id-f64 (type $over-f64) (get_local 0)) + + (func $i32-i64 (type $i32-i64) (get_local 1)) + (func $i64-f64 (type $i64-f64) (get_local 1)) + (func $f32-i32 (type $f32-i32) (get_local 1)) + (func $f64-f32 (type $f64-f32) (get_local 1)) + + (func $over-i32-duplicate (type $over-i32-duplicate) (get_local 0)) + (func $over-i64-duplicate (type $over-i64-duplicate) (get_local 0)) + (func $over-f32-duplicate (type $over-f32-duplicate) (get_local 0)) + (func $over-f64-duplicate (type $over-f64-duplicate) (get_local 0)) + + (table anyfunc + (elem + $const-i32 $const-i64 $const-f32 $const-f64 + $id-i32 $id-i64 $id-f32 $id-f64 + $f32-i32 $i32-i64 $f64-f32 $i64-f64 + $fac $fib $even $odd + $runaway $mutual-runaway1 $mutual-runaway2 + $over-i32-duplicate $over-i64-duplicate + $over-f32-duplicate $over-f64-duplicate + ) + ) + + ;; Typing + + (func (export "type-i32") (result i32) (call_indirect $out-i32 (i32.const 0))) + (func (export "type-i64") (result i64) (call_indirect $out-i64 (i32.const 1))) + (func (export "type-f32") (result f32) (call_indirect $out-f32 (i32.const 2))) + (func (export "type-f64") (result f64) (call_indirect $out-f64 (i32.const 3))) + + (func (export "type-index") (result i64) + (call_indirect $over-i64 (i64.const 100) (i32.const 5)) + ) + + (func (export "type-first-i32") (result i32) + (call_indirect $over-i32 (i32.const 32) (i32.const 4)) + ) + (func (export "type-first-i64") (result i64) + (call_indirect $over-i64 (i64.const 64) (i32.const 5)) + ) + (func (export "type-first-f32") (result f32) + (call_indirect $over-f32 (f32.const 1.32) (i32.const 6)) + ) + (func (export "type-first-f64") (result f64) + (call_indirect $over-f64 (f64.const 1.64) (i32.const 7)) + ) + + (func (export "type-second-i32") (result i32) + (call_indirect $f32-i32 (f32.const 32.1) (i32.const 32) (i32.const 8)) + ) + (func (export "type-second-i64") (result i64) + (call_indirect $i32-i64 (i32.const 32) (i64.const 64) (i32.const 9)) + ) + (func (export "type-second-f32") (result f32) + (call_indirect $f64-f32 (f64.const 64) (f32.const 32) (i32.const 10)) + ) + (func (export "type-second-f64") (result f64) + (call_indirect $i64-f64 (i64.const 64) (f64.const 64.1) (i32.const 11)) + ) + + ;; Dispatch + + (func (export "dispatch") (param i32 i64) (result i64) + (call_indirect $over-i64 (get_local 1) (get_local 0)) + ) + + (func (export "dispatch-structural") (param i32) (result i64) + (call_indirect $over-i64-duplicate (i64.const 9) (get_local 0)) + ) + + ;; Recursion + + (func $fac (export "fac") (type $over-i64) + (if (result i64) (i64.eqz (get_local 0)) + (then (i64.const 1)) + (else + (i64.mul + (get_local 0) + (call_indirect $over-i64 + (i64.sub (get_local 0) (i64.const 1)) + (i32.const 12) + ) + ) + ) + ) + ) + + (func $fib (export "fib") (type $over-i64) + (if (result i64) (i64.le_u (get_local 0) (i64.const 1)) + (then (i64.const 1)) + (else + (i64.add + (call_indirect $over-i64 + (i64.sub (get_local 0) (i64.const 2)) + (i32.const 13) + ) + (call_indirect $over-i64 + (i64.sub (get_local 0) (i64.const 1)) + (i32.const 13) + ) + ) + ) + ) + ) + + (func $even (export "even") (param i32) (result i32) + (if (result i32) (i32.eqz (get_local 0)) + (then (i32.const 44)) + (else + (call_indirect $over-i32 + (i32.sub (get_local 0) (i32.const 1)) + (i32.const 15) + ) + ) + ) + ) + (func $odd (export "odd") (param i32) (result i32) + (if (result i32) (i32.eqz (get_local 0)) + (then (i32.const 99)) + (else + (call_indirect $over-i32 + (i32.sub (get_local 0) (i32.const 1)) + (i32.const 14) + ) + ) + ) + ) + + ;; Stack exhaustion + + ;; Implementations are required to have every call consume some abstract + ;; resource towards exhausting some abstract finite limit, such that + ;; infinitely recursive test cases reliably trap in finite time. This is + ;; because otherwise applications could come to depend on it on those + ;; implementations and be incompatible with implementations that don't do + ;; it (or don't do it under the same circumstances). + + (func $runaway (export "runaway") (call_indirect $proc (i32.const 16))) + + (func $mutual-runaway1 (export "mutual-runaway") (call_indirect $proc (i32.const 18))) + (func $mutual-runaway2 (call_indirect $proc (i32.const 17))) +) + +(assert_return (invoke "type-i32") (i32.const 0x132)) +(assert_return (invoke "type-i64") (i64.const 0x164)) +(assert_return (invoke "type-f32") (f32.const 0xf32)) +(assert_return (invoke "type-f64") (f64.const 0xf64)) + +(assert_return (invoke "type-index") (i64.const 100)) + +(assert_return (invoke "type-first-i32") (i32.const 32)) +(assert_return (invoke "type-first-i64") (i64.const 64)) +(assert_return (invoke "type-first-f32") (f32.const 1.32)) +(assert_return (invoke "type-first-f64") (f64.const 1.64)) + +(assert_return (invoke "type-second-i32") (i32.const 32)) +(assert_return (invoke "type-second-i64") (i64.const 64)) +(assert_return (invoke "type-second-f32") (f32.const 32)) +(assert_return (invoke "type-second-f64") (f64.const 64.1)) + +(assert_return (invoke "dispatch" (i32.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "dispatch" (i32.const 5) (i64.const 5)) (i64.const 5)) +(assert_return (invoke "dispatch" (i32.const 12) (i64.const 5)) (i64.const 120)) +(assert_return (invoke "dispatch" (i32.const 13) (i64.const 5)) (i64.const 8)) +(assert_return (invoke "dispatch" (i32.const 20) (i64.const 2)) (i64.const 2)) +(assert_trap (invoke "dispatch" (i32.const 0) (i64.const 2)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch" (i32.const 15) (i64.const 2)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch" (i32.const 23) (i64.const 2)) "undefined element") +(assert_trap (invoke "dispatch" (i32.const -1) (i64.const 2)) "undefined element") +(assert_trap (invoke "dispatch" (i32.const 1213432423) (i64.const 2)) "undefined element") + +(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) +(assert_return (invoke "dispatch-structural" (i32.const 5)) (i64.const 9)) +(assert_return (invoke "dispatch-structural" (i32.const 12)) (i64.const 362880)) +(assert_return (invoke "dispatch-structural" (i32.const 20)) (i64.const 9)) +(assert_trap (invoke "dispatch-structural" (i32.const 11)) "indirect call signature mismatch") +(assert_trap (invoke "dispatch-structural" (i32.const 22)) "indirect call signature mismatch") + +(assert_return (invoke "fac" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fac" (i64.const 5)) (i64.const 120)) +(assert_return (invoke "fac" (i64.const 25)) (i64.const 7034535277573963776)) + +(assert_return (invoke "fib" (i64.const 0)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 1)) (i64.const 1)) +(assert_return (invoke "fib" (i64.const 2)) (i64.const 2)) +(assert_return (invoke "fib" (i64.const 5)) (i64.const 8)) +(assert_return (invoke "fib" (i64.const 20)) (i64.const 10946)) + +(assert_return (invoke "even" (i32.const 0)) (i32.const 44)) +(assert_return (invoke "even" (i32.const 1)) (i32.const 99)) +(assert_return (invoke "even" (i32.const 100)) (i32.const 44)) +(assert_return (invoke "even" (i32.const 77)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 0)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 1)) (i32.const 44)) +(assert_return (invoke "odd" (i32.const 200)) (i32.const 99)) +(assert_return (invoke "odd" (i32.const 77)) (i32.const 44)) + +(assert_exhaustion (invoke "runaway") "call stack exhausted") +(assert_exhaustion (invoke "mutual-runaway") "call stack exhausted") + + +;; Invalid typing + +(assert_invalid + (module + (type (func)) + (func $no-table (call_indirect 0 (i32.const 0))) + ) + "unknown table" +) + +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $type-void-vs-num (i32.eqz (call_indirect 0 (i32.const 0)))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (result i64))) + (table 0 anyfunc) + (func $type-num-vs-num (i32.eqz (call_indirect 0 (i32.const 0)))) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $arity-0-vs-1 (call_indirect 0 (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param f64 i32))) + (table 0 anyfunc) + (func $arity-0-vs-2 (call_indirect 0 (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $arity-1-vs-0 (call_indirect 0 (i32.const 1) (i32.const 0))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func)) + (table 0 anyfunc) + (func $arity-2-vs-0 + (call_indirect 0 (f64.const 2) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $type-func-void-vs-i32 (call_indirect 0 (i32.const 1) (nop))) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32))) + (table 0 anyfunc) + (func $type-func-num-vs-i32 (call_indirect 0 (i32.const 0) (i64.const 1))) + ) + "type mismatch" +) + +(assert_invalid + (module + (type (func (param i32 i32))) + (table 0 anyfunc) + (func $type-first-void-vs-num + (call_indirect 0 (nop) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32 i32))) + (table 0 anyfunc) + (func $type-second-void-vs-num + (call_indirect 0 (i32.const 1) (nop) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param i32 f64))) + (table 0 anyfunc) + (func $type-first-num-vs-num + (call_indirect 0 (f64.const 1) (i32.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) +(assert_invalid + (module + (type (func (param f64 i32))) + (table 0 anyfunc) + (func $type-second-num-vs-num + (call_indirect 0 (i32.const 1) (f64.const 1) (i32.const 0)) + ) + ) + "type mismatch" +) + + +;; Unbound type + +(assert_invalid + (module + (table 0 anyfunc) + (func $unbound-type (call_indirect 1 (i32.const 0))) + ) + "unknown type" +) +(assert_invalid + (module + (table 0 anyfunc) + (func $large-type (call_indirect 1012321300 (i32.const 0))) + ) + "unknown type" +) + + +;; Unbound function in table + +(assert_invalid + (module (table anyfunc (elem 0 0))) + "unknown function 0" +) + + +;; Invalid bounds for elements + +(assert_unlinkable + (module + (table 10 anyfunc) + (elem (i32.const 10) $f) + (func $f) + ) + "elements segment does not fit" +) + +(assert_unlinkable + (module + (table 10 anyfunc) + (elem (i32.const -1) $f) + (func $f) + ) + "elements segment does not fit" +) + +(assert_unlinkable + (module + (table 10 anyfunc) + (elem (i32.const -10) $f) + (func $f) + ) + "elements segment does not fit" +) diff --git a/libraries/wasm-jit/Test/spec/comments.wast b/libraries/wasm-jit/Test/spec/comments.wast new file mode 100644 index 0000000000000000000000000000000000000000..90a64b42d9ec854f6522e940c0466eb6c1ca6de9 GIT binary patch literal 701 zcmcDvRtQNgE>TF%&&^HED^Vz}%qvN(;Nr5jhKhigaKOc-00c;K8c3Yn{FKt1RD`4^ zf(bN36J!pEP=Jsc)?8c~AQ2!5wF<&P 8000 0000 +(assert_return (invoke "i32.trunc_u_f32" (f32.const 4294967040.0)) (i32.const -256)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i32.const 0)) +(assert_trap (invoke "i32.trunc_u_f32" (f32.const 4294967296.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -1.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const nan:0x200000)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f32" (f32.const -nan:0x200000)) "invalid conversion to integer") + +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.5)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -1.9)) (i32.const -1)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -2.0)) (i32.const -2)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const 2147483647.0)) (i32.const 2147483647)) +(assert_return (invoke "i32.trunc_s_f64" (f64.const -2147483648.0)) (i32.const -2147483648)) +(assert_trap (invoke "i32.trunc_s_f64" (f64.const 2147483648.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -2147483649.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const nan:0x4000000000000)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_s_f64" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") + +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0.0)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.5)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1.9)) (i32.const 1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 2.0)) (i32.const 2)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 2147483648)) (i32.const -2147483648)) ;; 0x1.00000p+31 -> 8000 0000 +(assert_return (invoke "i32.trunc_u_f64" (f64.const 4294967295.0)) (i32.const -1)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i32.const 0)) +(assert_return (invoke "i32.trunc_u_f64" (f64.const 1e8)) (i32.const 100000000)) +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 4294967296.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -1.0)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e16)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 1e30)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const 9223372036854775808)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -inf)) "integer overflow") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const nan:0x4000000000000)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i32.trunc_u_f64" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -0x1.19999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_f32" (f32.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_f32" (f32.const 9223371487098961920.0)) (i64.const 9223371487098961920)) +(assert_return (invoke "i64.trunc_s_f32" (f32.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_s_f32" (f32.const 9223372036854775808.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -9223373136366403584.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const nan:0x200000)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f32" (f32.const -nan:0x200000)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1p-149)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 0x1.19999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 4294967296)) (i64.const 4294967296)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const 18446742974197923840.0)) (i64.const -1099511627776)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.ccccccp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f32" (f32.const -0x1.fffffep-1)) (i64.const 0)) +(assert_trap (invoke "i64.trunc_u_f32" (f32.const 18446744073709551616.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -1.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const nan:0x200000)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f32" (f32.const -nan:0x200000)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -0x1.199999999999ap+0)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.5)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -1.9)) (i64.const -1)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -2.0)) (i64.const -2)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const 4294967296)) (i64.const 4294967296)) ;; 0x1.00000p+32 -> 1 0000 0000 +(assert_return (invoke "i64.trunc_s_f64" (f64.const -4294967296)) (i64.const -4294967296)) ;; -0x1.00000p+32 -> ffff ffff 0000 0000 +(assert_return (invoke "i64.trunc_s_f64" (f64.const 9223372036854774784.0)) (i64.const 9223372036854774784)) +(assert_return (invoke "i64.trunc_s_f64" (f64.const -9223372036854775808.0)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_s_f64" (f64.const 9223372036854775808.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -9223372036854777856.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const nan:0x4000000000000)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_s_f64" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") + +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0.0)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1.0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 0x1.199999999999ap+0)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1.5)) (i64.const 1)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967295)) (i64.const 0xffffffff)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 4294967296)) (i64.const 0x100000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 18446744073709549568.0)) (i64.const -2048)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.ccccccccccccdp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const -0x1.fffffffffffffp-1)) (i64.const 0)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1e8)) (i64.const 100000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 1e16)) (i64.const 10000000000000000)) +(assert_return (invoke "i64.trunc_u_f64" (f64.const 9223372036854775808)) (i64.const -9223372036854775808)) +(assert_trap (invoke "i64.trunc_u_f64" (f64.const 18446744073709551616.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -1.0)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -inf)) "integer overflow") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const nan:0x4000000000000)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -nan)) "invalid conversion to integer") +(assert_trap (invoke "i64.trunc_u_f64" (f64.const -nan:0x4000000000000)) "invalid conversion to integer") + +(assert_return (invoke "f32.convert_s_i32" (i32.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -1)) (f32.const -1.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 2147483647)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -2147483648)) (f32.const -2147483648)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 1234567890)) (f32.const 0x1.26580cp+30)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_s_i32" (i32.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -16777217)) (f32.const -16777216.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const 16777219)) (f32.const 16777220.0)) +(assert_return (invoke "f32.convert_s_i32" (i32.const -16777219)) (f32.const -16777220.0)) + +(assert_return (invoke "f32.convert_s_i64" (i64.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -1)) (f32.const -1.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -9223372036854775808)) (f32.const -9223372036854775808)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI +;; Test rounding directions. +(assert_return (invoke "f32.convert_s_i64" (i64.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -16777217)) (f32.const -16777216.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const 16777219)) (f32.const 16777220.0)) +(assert_return (invoke "f32.convert_s_i64" (i64.const -16777219)) (f32.const -16777220.0)) + +(assert_return (invoke "f64.convert_s_i32" (i32.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const -1)) (f64.const -1.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 2147483647)) (f64.const 2147483647)) +(assert_return (invoke "f64.convert_s_i32" (i32.const -2147483648)) (f64.const -2147483648)) +(assert_return (invoke "f64.convert_s_i32" (i32.const 987654321)) (f64.const 987654321)) + +(assert_return (invoke "f64.convert_s_i64" (i64.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -1)) (f64.const -1.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9223372036854775808)) (f64.const -9223372036854775808)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum +;; Test rounding directions. +(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740993)) (f64.const -9007199254740992)) +(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) +(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740995)) (f64.const -9007199254740996)) + +(assert_return (invoke "f32.convert_u_i32" (i32.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 2147483647)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_u_i32" (i32.const -2147483648)) (f32.const 2147483648)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0x12345678)) (f32.const 0x1.234568p+28)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0xffffffff)) (f32.const 4294967296.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0x80000080)) (f32.const 0x1.000000p+31)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0x80000081)) (f32.const 0x1.000002p+31)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0x80000082)) (f32.const 0x1.000002p+31)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0xfffffe80)) (f32.const 0x1.fffffcp+31)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0xfffffe81)) (f32.const 0x1.fffffep+31)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 0xfffffe82)) (f32.const 0x1.fffffep+31)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_u_i32" (i32.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_u_i32" (i32.const 16777219)) (f32.const 16777220.0)) + +(assert_return (invoke "f32.convert_u_i64" (i64.const 1)) (f32.const 1.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807)) +(assert_return (invoke "f32.convert_u_i64" (i64.const -9223372036854775808)) (f32.const 9223372036854775808)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0)) +;; Test rounding directions. +(assert_return (invoke "f32.convert_u_i64" (i64.const 16777217)) (f32.const 16777216.0)) +(assert_return (invoke "f32.convert_u_i64" (i64.const 16777219)) (f32.const 16777220.0)) + +(assert_return (invoke "f64.convert_u_i32" (i32.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 2147483647)) (f64.const 2147483647)) +(assert_return (invoke "f64.convert_u_i32" (i32.const -2147483648)) (f64.const 2147483648)) +(assert_return (invoke "f64.convert_u_i32" (i32.const 0xffffffff)) (f64.const 4294967295.0)) + +(assert_return (invoke "f64.convert_u_i64" (i64.const 1)) (f64.const 1.0)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807)) +(assert_return (invoke "f64.convert_u_i64" (i64.const -9223372036854775808)) (f64.const 9223372036854775808)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0x8000000000000400)) (f64.const 0x1.0000000000000p+63)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0x8000000000000401)) (f64.const 0x1.0000000000001p+63)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0x8000000000000402)) (f64.const 0x1.0000000000001p+63)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0xfffffffffffff400)) (f64.const 0x1.ffffffffffffep+63)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0xfffffffffffff401)) (f64.const 0x1.fffffffffffffp+63)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 0xfffffffffffff402)) (f64.const 0x1.fffffffffffffp+63)) +;; Test rounding directions. +(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992)) +(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996)) + +(assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0)) +(assert_return (invoke "f64.promote_f32" (f32.const 0x1p-149)) (f64.const 0x1p-149)) +(assert_return (invoke "f64.promote_f32" (f32.const -0x1p-149)) (f64.const -0x1p-149)) +(assert_return (invoke "f64.promote_f32" (f32.const 1.0)) (f64.const 1.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -1.0)) (f64.const -1.0)) +(assert_return (invoke "f64.promote_f32" (f32.const -0x1.fffffep+127)) (f64.const -0x1.fffffep+127)) +(assert_return (invoke "f64.promote_f32" (f32.const 0x1.fffffep+127)) (f64.const 0x1.fffffep+127)) +;; Generated randomly by picking a random int and reinterpret it to float. +(assert_return (invoke "f64.promote_f32" (f32.const 0x1p-119)) (f64.const 0x1p-119)) +;; Generated randomly by picking a random float. +(assert_return (invoke "f64.promote_f32" (f32.const 0x1.8f867ep+125)) (f64.const 6.6382536710104395e+37)) +(assert_return (invoke "f64.promote_f32" (f32.const inf)) (f64.const inf)) +(assert_return (invoke "f64.promote_f32" (f32.const -inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "f64.promote_f32" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "f64.promote_f32" (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "f64.promote_f32" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "f64.promote_f32" (f32.const -nan:0x200000))) + +(assert_return (invoke "f32.demote_f64" (f64.const 0.0)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0.0)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 1.0)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -1.0)) (f32.const -1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffe0000000p-127)) (f32.const 0x1p-126)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffe0000000p-127)) (f32.const -0x1p-126)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffdfffffffp-127)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffdfffffffp-127)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000000p+127)) (f32.const 0x1.fffffcp+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000000p+127)) (f32.const -0x1.fffffcp+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffd0000001p+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffd0000001p+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffefffffffp+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.fffffefffffffp+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.ffffffp+127)) (f32.const inf)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.ffffffp+127)) (f32.const -inf)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-119)) (f32.const 0x1p-119)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.8f867ep+125)) (f32.const 0x1.8f867ep+125)) +(assert_return (invoke "f32.demote_f64" (f64.const inf)) (f32.const inf)) +(assert_return (invoke "f32.demote_f64" (f64.const -inf)) (f32.const -inf)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p+0)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.fffffffffffffp-1)) (f32.const 1.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+0)) (f32.const 0x1.000000p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+0)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000050000000p+0)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000000p+24)) (f32.const 0x1.0p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000010000001p+24)) (f32.const 0x1.000002p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.000002fffffffp+24)) (f32.const 0x1.000002p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000030000000p+24)) (f32.const 0x1.000004p+24)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.4eae4f7024c7p+108)) (f32.const 0x1.4eae5p+108)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.a12e71e358685p-113)) (f32.const 0x1.a12e72p-113)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.cb98354d521ffp-127)) (f32.const 0x1.cb9834p-127)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.6972b30cfb562p+1)) (f32.const -0x1.6972b4p+1)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.bedbe4819d4c4p+112)) (f32.const -0x1.bedbe4p+112)) +(assert_return_canonical_nan (invoke "f32.demote_f64" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "f32.demote_f64" (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "f32.demote_f64" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "f32.demote_f64" (f64.const -nan:0x4000000000000))) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0p-150)) (f32.const 0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.0p-150)) (f32.const -0.0)) +(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.demote_f64" (f64.const -0x1.0000000000001p-150)) (f32.const -0x1p-149)) + +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0)) (f32.const 0.0)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x80000000)) (f32.const -0.0)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 1)) (f32.const 0x1p-149)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const -1)) (f32.const -nan:0x7fffff)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 123456789)) (f32.const 0x1.b79a2ap-113)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const -2147483647)) (f32.const -0x1p-149)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7f800000)) (f32.const inf)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xff800000)) (f32.const -inf)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fc00000)) (f32.const nan)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffc00000)) (f32.const -nan)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000)) +(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000)) + +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0)) (f64.const 0.0)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const -1)) (f64.const -nan:0xfffffffffffff)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x8000000000000000)) (f64.const -0.0)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 1234567890)) (f64.const 0x0.00000499602d2p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const -9223372036854775807)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff0000000000000)) (f64.const inf)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff0000000000000)) (f64.const -inf)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff8000000000000)) (f64.const nan)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff8000000000000)) (f64.const -nan)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0x7ff4000000000000)) (f64.const nan:0x4000000000000)) +(assert_return (invoke "f64.reinterpret_i64" (i64.const 0xfff4000000000000)) (f64.const -nan:0x4000000000000)) + +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0.0)) (i32.const 0)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0.0)) (i32.const 0x80000000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x7fffff)) (i32.const -1)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1p-149)) (i32.const 0x80000001)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 1.0)) (i32.const 1065353216)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 3.1415926)) (i32.const 1078530010)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const 0x1.fffffep+127)) (i32.const 2139095039)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -0x1.fffffep+127)) (i32.const -8388609)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const inf)) (i32.const 0x7f800000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -inf)) (i32.const 0xff800000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const nan)) (i32.const 0x7fc00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan)) (i32.const 0xffc00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const nan:0x200000)) (i32.const 0x7fa00000)) +(assert_return (invoke "i32.reinterpret_f32" (f32.const -nan:0x200000)) (i32.const 0xffa00000)) + +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0.0)) (i64.const 0)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0.0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0x0.0000000000001p-1022)) (i64.const 1)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0xfffffffffffff)) (i64.const -1)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0x0.0000000000001p-1022)) (i64.const 0x8000000000000001)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 1.0)) (i64.const 4607182418800017408)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 3.14159265358979)) (i64.const 4614256656552045841)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const 0x1.fffffffffffffp+1023)) (i64.const 9218868437227405311)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -0x1.fffffffffffffp+1023)) (i64.const -4503599627370497)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const inf)) (i64.const 0x7ff0000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -inf)) (i64.const 0xfff0000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const nan)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan)) (i64.const 0xfff8000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const nan:0x4000000000000)) (i64.const 0x7ff4000000000000)) +(assert_return (invoke "i64.reinterpret_f64" (f64.const -nan:0x4000000000000)) (i64.const 0xfff4000000000000)) diff --git a/libraries/wasm-jit/Test/spec/custom_section.wast b/libraries/wasm-jit/Test/spec/custom_section.wast new file mode 100644 index 000000000..c6c338905 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/custom_section.wast @@ -0,0 +1,112 @@ +(module binary + "\00asm" "\01\00\00\00" + "\00\24\10" "a custom section" "this is the payload" + "\00\20\10" "a custom section" "this is payload" + "\00\11\10" "a custom section" "" + "\00\10\00" "" "this is payload" + "\00\01\00" "" "" + "\00\24\10" "\00\00custom sectio\00" "this is the payload" + "\00\24\10" "\ef\bb\bfa custom sect" "this is the payload" + "\00\24\10" "a custom sect\e2\8c\a3" "this is the payload" + "\00\1f\16" "module within a module" "\00asm" "\01\00\00\00" +) + +(module binary + "\00asm" "\01\00\00\00" + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\01\01\00" ;; type section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\02\01\00" ;; import section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\03\01\00" ;; function section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\04\01\00" ;; table section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\05\01\00" ;; memory section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\06\01\00" ;; global section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\07\01\00" ;; export section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\09\01\00" ;; element section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\0a\01\00" ;; code section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\0b\01\00" ;; data section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" +) + +(module binary + "\00asm" "\01\00\00\00" + "\01\07\01\60\02\7f\7f\01\7f" ;; type section + "\00\1a\06" "custom" "this is the payload" ;; custom section + "\03\02\01\00" ;; function section + "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section + "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section + "\00\1b\07" "custom2" "this is the payload" ;; custom section +) + +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00" + ) + "unexpected end" +) + +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\00" + ) + "unexpected end" +) + +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\26\10" "a custom section" "this is the payload" + ) + "unexpected end" +) + +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\25\10" "a custom section" "this is the payload" + "\00\24\10" "a custom section" "this is the payload" + ) + "invalid section id" +) + +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\01\07\01\60\02\7f\7f\01\7f" ;; type section + "\00\25\10" "a custom section" "this is the payload" ;; invalid length! + "\03\02\01\00" ;; function section + "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section + "\00\1b\07" "custom2" "this is the payload" ;; custom section + ) + "function and code section have inconsistent lengths" +) + +;; Test concatenated modules. +(assert_malformed + (module binary + "\00asm\01\00\00\00" + "\00asm\01\00\00\00" + ) + "length out of bounds" +) diff --git a/libraries/wasm-jit/Test/spec/endianness.wast b/libraries/wasm-jit/Test/spec/endianness.wast new file mode 100644 index 000000000..8dc0c2e2e --- /dev/null +++ b/libraries/wasm-jit/Test/spec/endianness.wast @@ -0,0 +1,217 @@ +(module + (memory 1) + + ;; Stores an i16 value in little-endian-format + (func $i16_store_little (param $address i32) (param $value i32) + (i32.store8 (get_local $address) (get_local $value)) + (i32.store8 (i32.add (get_local $address) (i32.const 1)) (i32.shr_u (get_local $value) (i32.const 8))) + ) + + ;; Stores an i32 value in little-endian format + (func $i32_store_little (param $address i32) (param $value i32) + (call $i16_store_little (get_local $address) (get_local $value)) + (call $i16_store_little (i32.add (get_local $address) (i32.const 2)) (i32.shr_u (get_local $value) (i32.const 16))) + ) + + ;; Stores an i64 value in little-endian format + (func $i64_store_little (param $address i32) (param $value i64) + (call $i32_store_little (get_local $address) (i32.wrap/i64 (get_local $value))) + (call $i32_store_little (i32.add (get_local $address) (i32.const 4)) (i32.wrap/i64 (i64.shr_u (get_local $value) (i64.const 32)))) + ) + + ;; Loads an i16 value in little-endian format + (func $i16_load_little (param $address i32) (result i32) + (i32.or + (i32.load8_u (get_local $address)) + (i32.shl (i32.load8_u (i32.add (get_local $address) (i32.const 1))) (i32.const 8)) + ) + ) + + ;; Loads an i32 value in little-endian format + (func $i32_load_little (param $address i32) (result i32) + (i32.or + (call $i16_load_little (get_local $address)) + (i32.shl (call $i16_load_little (i32.add (get_local $address) (i32.const 2))) (i32.const 16)) + ) + ) + + ;; Loads an i64 value in little-endian format + (func $i64_load_little (param $address i32) (result i64) + (i64.or + (i64.extend_u/i32 (call $i32_load_little (get_local $address))) + (i64.shl (i64.extend_u/i32 (call $i32_load_little (i32.add (get_local $address) (i32.const 4)))) (i64.const 32)) + ) + ) + + (func (export "i32_load16_s") (param $value i32) (result i32) + (call $i16_store_little (i32.const 0) (get_local $value)) + (i32.load16_s (i32.const 0)) + ) + + (func (export "i32_load16_u") (param $value i32) (result i32) + (call $i16_store_little (i32.const 0) (get_local $value)) + (i32.load16_u (i32.const 0)) + ) + + (func (export "i32_load") (param $value i32) (result i32) + (call $i32_store_little (i32.const 0) (get_local $value)) + (i32.load (i32.const 0)) + ) + + (func (export "i64_load16_s") (param $value i64) (result i64) + (call $i16_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load16_s (i32.const 0)) + ) + + (func (export "i64_load16_u") (param $value i64) (result i64) + (call $i16_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load16_u (i32.const 0)) + ) + + (func (export "i64_load32_s") (param $value i64) (result i64) + (call $i32_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load32_s (i32.const 0)) + ) + + (func (export "i64_load32_u") (param $value i64) (result i64) + (call $i32_store_little (i32.const 0) (i32.wrap/i64 (get_local $value))) + (i64.load32_u (i32.const 0)) + ) + + (func (export "i64_load") (param $value i64) (result i64) + (call $i64_store_little (i32.const 0) (get_local $value)) + (i64.load (i32.const 0)) + ) + + (func (export "f32_load") (param $value f32) (result f32) + (call $i32_store_little (i32.const 0) (i32.reinterpret/f32 (get_local $value))) + (f32.load (i32.const 0)) + ) + + (func (export "f64_load") (param $value f64) (result f64) + (call $i64_store_little (i32.const 0) (i64.reinterpret/f64 (get_local $value))) + (f64.load (i32.const 0)) + ) + + + (func (export "i32_store16") (param $value i32) (result i32) + (i32.store16 (i32.const 0) (get_local $value)) + (call $i16_load_little (i32.const 0)) + ) + + (func (export "i32_store") (param $value i32) (result i32) + (i32.store (i32.const 0) (get_local $value)) + (call $i32_load_little (i32.const 0)) + ) + + (func (export "i64_store16") (param $value i64) (result i64) + (i64.store16 (i32.const 0) (get_local $value)) + (i64.extend_u/i32 (call $i16_load_little (i32.const 0))) + ) + + (func (export "i64_store32") (param $value i64) (result i64) + (i64.store32 (i32.const 0) (get_local $value)) + (i64.extend_u/i32 (call $i32_load_little (i32.const 0))) + ) + + (func (export "i64_store") (param $value i64) (result i64) + (i64.store (i32.const 0) (get_local $value)) + (call $i64_load_little (i32.const 0)) + ) + + (func (export "f32_store") (param $value f32) (result f32) + (f32.store (i32.const 0) (get_local $value)) + (f32.reinterpret/i32 (call $i32_load_little (i32.const 0))) + ) + + (func (export "f64_store") (param $value f64) (result f64) + (f64.store (i32.const 0) (get_local $value)) + (f64.reinterpret/i64 (call $i64_load_little (i32.const 0))) + ) +) + +(assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_load16_s" (i32.const -4242)) (i32.const -4242)) +(assert_return (invoke "i32_load16_s" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_load16_s" (i32.const 0x3210)) (i32.const 0x3210)) + +(assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 0xFFFF)) +(assert_return (invoke "i32_load16_u" (i32.const -4242)) (i32.const 61294)) +(assert_return (invoke "i32_load16_u" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_load16_u" (i32.const 0xCAFE)) (i32.const 0xCAFE)) + +(assert_return (invoke "i32_load" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_load" (i32.const -42424242)) (i32.const -42424242)) +(assert_return (invoke "i32_load" (i32.const 42424242)) (i32.const 42424242)) +(assert_return (invoke "i32_load" (i32.const 0xABAD1DEA)) (i32.const 0xABAD1DEA)) + +(assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load16_s" (i64.const -4242)) (i64.const -4242)) +(assert_return (invoke "i64_load16_s" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_load16_s" (i64.const 0x3210)) (i64.const 0x3210)) + +(assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 0xFFFF)) +(assert_return (invoke "i64_load16_u" (i64.const -4242)) (i64.const 61294)) +(assert_return (invoke "i64_load16_u" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_load16_u" (i64.const 0xCAFE)) (i64.const 0xCAFE)) + +(assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load32_s" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_load32_s" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_load32_s" (i64.const 0x12345678)) (i64.const 0x12345678)) + +(assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 0xFFFFFFFF)) +(assert_return (invoke "i64_load32_u" (i64.const -42424242)) (i64.const 4252543054)) +(assert_return (invoke "i64_load32_u" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_load32_u" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) + +(assert_return (invoke "i64_load" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_load" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_load" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) +(assert_return (invoke "i64_load" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) + +(assert_return (invoke "f32_load" (f32.const -1)) (f32.const -1)) +(assert_return (invoke "f32_load" (f32.const 1234e-5)) (f32.const 1234e-5)) +(assert_return (invoke "f32_load" (f32.const 4242.4242)) (f32.const 4242.4242)) +(assert_return (invoke "f32_load" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) + +(assert_return (invoke "f64_load" (f64.const -1)) (f64.const -1)) +(assert_return (invoke "f64_load" (f64.const 123456789e-5)) (f64.const 123456789e-5)) +(assert_return (invoke "f64_load" (f64.const 424242.424242)) (f64.const 424242.424242)) +(assert_return (invoke "f64_load" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) + + +(assert_return (invoke "i32_store16" (i32.const -1)) (i32.const 0xFFFF)) +(assert_return (invoke "i32_store16" (i32.const -4242)) (i32.const 61294)) +(assert_return (invoke "i32_store16" (i32.const 42)) (i32.const 42)) +(assert_return (invoke "i32_store16" (i32.const 0xCAFE)) (i32.const 0xCAFE)) + +(assert_return (invoke "i32_store" (i32.const -1)) (i32.const -1)) +(assert_return (invoke "i32_store" (i32.const -4242)) (i32.const -4242)) +(assert_return (invoke "i32_store" (i32.const 42424242)) (i32.const 42424242)) +(assert_return (invoke "i32_store" (i32.const 0xDEADCAFE)) (i32.const 0xDEADCAFE)) + +(assert_return (invoke "i64_store16" (i64.const -1)) (i64.const 0xFFFF)) +(assert_return (invoke "i64_store16" (i64.const -4242)) (i64.const 61294)) +(assert_return (invoke "i64_store16" (i64.const 42)) (i64.const 42)) +(assert_return (invoke "i64_store16" (i64.const 0xCAFE)) (i64.const 0xCAFE)) + +(assert_return (invoke "i64_store32" (i64.const -1)) (i64.const 0xFFFFFFFF)) +(assert_return (invoke "i64_store32" (i64.const -4242)) (i64.const 4294963054)) +(assert_return (invoke "i64_store32" (i64.const 42424242)) (i64.const 42424242)) +(assert_return (invoke "i64_store32" (i64.const 0xDEADCAFE)) (i64.const 0xDEADCAFE)) + +(assert_return (invoke "i64_store" (i64.const -1)) (i64.const -1)) +(assert_return (invoke "i64_store" (i64.const -42424242)) (i64.const -42424242)) +(assert_return (invoke "i64_store" (i64.const 0xABAD1DEA)) (i64.const 0xABAD1DEA)) +(assert_return (invoke "i64_store" (i64.const 0xABADCAFEDEAD1DEA)) (i64.const 0xABADCAFEDEAD1DEA)) + +(assert_return (invoke "f32_store" (f32.const -1)) (f32.const -1)) +(assert_return (invoke "f32_store" (f32.const 1234e-5)) (f32.const 1234e-5)) +(assert_return (invoke "f32_store" (f32.const 4242.4242)) (f32.const 4242.4242)) +(assert_return (invoke "f32_store" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) + +(assert_return (invoke "f64_store" (f64.const -1)) (f64.const -1)) +(assert_return (invoke "f64_store" (f64.const 123456789e-5)) (f64.const 123456789e-5)) +(assert_return (invoke "f64_store" (f64.const 424242.424242)) (f64.const 424242.424242)) +(assert_return (invoke "f64_store" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) diff --git a/libraries/wasm-jit/Test/spec/exports.wast b/libraries/wasm-jit/Test/spec/exports.wast new file mode 100644 index 000000000..6841aa873 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/exports.wast @@ -0,0 +1,198 @@ +;; Functions + +(module (func) (export "a" (func 0))) +(module (func) (export "a" (func 0)) (export "b" (func 0))) +(module (func) (func) (export "a" (func 0)) (export "b" (func 1))) + +(module (func (export "a"))) +(module (func (export "a") (export "b") (export "c"))) +(module (func (export "a") (export "b") (param i32))) +(module (func) (export "a" (func 0))) +(module (func $a (export "a"))) +(module (func $a) (export "a" (func $a))) +(module (export "a" (func 0)) (func)) +(module (export "a" (func $a)) (func $a)) + +(module $Func + (export "e" (func $f)) + (func $f (param $n i32) (result i32) + (return (i32.add (get_local $n) (i32.const 1))) + ) +) +(assert_return (invoke "e" (i32.const 42)) (i32.const 43)) +(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) +(module) +(module $Other1) +(assert_return (invoke $Func "e" (i32.const 42)) (i32.const 43)) + +(assert_invalid + (module (func) (export "a" (func 1))) + "unknown function" +) +(assert_invalid + (module (func) (export "a" (func 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (func) (export "a" (func 0)) (export "a" (func 1))) + "duplicate export name" +) +(assert_invalid + (module (func) (global i32 (i32.const 0)) (export "a" (func 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (table 0 anyfunc) (export "a" (func 0)) (export "a" (table 0))) + "duplicate export name" +) +(assert_invalid + (module (func) (memory 0) (export "a" (func 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Globals + +(module (global i32 (i32.const 0)) (export "a" (global 0))) +(module (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 0))) +(module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "b" (global 1))) + +(module (global (export "a") i32 (i32.const 0))) +(module (global i32 (i32.const 0)) (export "a" (global 0))) +(module (global $a (export "a") i32 (i32.const 0))) +(module (global $a i32 (i32.const 0)) (export "a" (global $a))) +(module (export "a" (global 0)) (global i32 (i32.const 0))) +(module (export "a" (global $a)) (global $a i32 (i32.const 0))) + +(module $Global + (export "e" (global $g)) + (global $g i32 (i32.const 42)) +) +(assert_return (get "e") (i32.const 42)) +(assert_return (get $Global "e") (i32.const 42)) +(module) +(module $Other2) +(assert_return (get $Global "e") (i32.const 42)) + +(assert_invalid + (module (global i32 (i32.const 0)) (export "a" (global 1))) + "unknown global" +) +(assert_invalid + (module (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (global i32 (i32.const 0)) (export "a" (global 0)) (export "a" (global 1))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (func) (export "a" (global 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (table 0 anyfunc) (export "a" (global 0)) (export "a" (table 0))) + "duplicate export name" +) +(assert_invalid + (module (global i32 (i32.const 0)) (memory 0) (export "a" (global 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Tables + +(module (table 0 anyfunc) (export "a" (table 0))) +(module (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 0))) +;; No multiple tables yet. +;; (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "b" (table 1))) + +(module (table (export "a") 0 anyfunc)) +(module (table (export "a") 0 1 anyfunc)) +(module (table 0 anyfunc) (export "a" (table 0))) +(module (table 0 1 anyfunc) (export "a" (table 0))) +(module (table $a (export "a") 0 anyfunc)) +(module (table $a (export "a") 0 1 anyfunc)) +(module (table $a 0 anyfunc) (export "a" (table $a))) +(module (table $a 0 1 anyfunc) (export "a" (table $a))) +(module (export "a" (table 0)) (table 0 anyfunc)) +(module (export "a" (table 0)) (table 0 1 anyfunc)) +(module (export "a" (table $a)) (table $a 0 anyfunc)) +(module (export "a" (table $a)) (table $a 0 1 anyfunc)) + +(; TODO: access table ;) + +(assert_invalid + (module (table 0 anyfunc) (export "a" (table 1))) + "unknown table" +) +(assert_invalid + (module (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 0))) + "duplicate export name" +) +;; No multiple tables yet. +;; (assert_invalid +;; (module (table 0 anyfunc) (table 0 anyfunc) (export "a" (table 0)) (export "a" (table 1))) +;; "duplicate export name" +;; ) +(assert_invalid + (module (table 0 anyfunc) (func) (export "a" (table 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (table 0 anyfunc) (global i32 (i32.const 0)) (export "a" (table 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (table 0 anyfunc) (memory 0) (export "a" (table 0)) (export "a" (memory 0))) + "duplicate export name" +) + + +;; Memories + +(module (memory 0) (export "a" (memory 0))) +(module (memory 0) (export "a" (memory 0)) (export "b" (memory 0))) +;; No multiple memories yet. +;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "b" (memory 1))) + +(module (memory (export "a") 0)) +(module (memory (export "a") 0 1)) +(module (memory 0) (export "a" (memory 0))) +(module (memory 0 1) (export "a" (memory 0))) +(module (memory $a (export "a") 0)) +(module (memory $a (export "a") 0 1)) +(module (memory $a 0) (export "a" (memory $a))) +(module (memory $a 0 1) (export "a" (memory $a))) +(module (export "a" (memory 0)) (memory 0)) +(module (export "a" (memory 0)) (memory 0 1)) +(module (export "a" (memory $a)) (memory $a 0)) +(module (export "a" (memory $a)) (memory $a 0 1)) + +(; TODO: access memory ;) + +(assert_invalid + (module (memory 0) (export "a" (memory 1))) + "unknown memory" +) +(assert_invalid + (module (memory 0) (export "a" (memory 0)) (export "a" (memory 0))) + "duplicate export name" +) +;; No multiple memories yet. +;; (assert_invalid +;; (module (memory 0) (memory 0) (export "a" (memory 0)) (export "a" (memory 1))) +;; "duplicate export name" +;; ) +(assert_invalid + (module (memory 0) (func) (export "a" (memory 0)) (export "a" (func 0))) + "duplicate export name" +) +(assert_invalid + (module (memory 0) (global i32 (i32.const 0)) (export "a" (memory 0)) (export "a" (global 0))) + "duplicate export name" +) +(assert_invalid + (module (memory 0) (table 0 anyfunc) (export "a" (memory 0)) (export "a" (table 0))) + "duplicate export name" +) diff --git a/libraries/wasm-jit/Test/spec/f32.wast b/libraries/wasm-jit/Test/spec/f32.wast new file mode 100644 index 000000000..2595a4ac9 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f32.wast @@ -0,0 +1,2518 @@ +;; Test all the f32 operators on major boundary values and all special +;; values (except comparison and bitwise operators, which are tested in +;; f32_bitwise.wast and f32_cmp.wast). + +(module + (func (export "add") (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x f32) (param $y f32) (result f32) (f32.mul (get_local $x) (get_local $y))) + (func (export "div") (param $x f32) (param $y f32) (result f32) (f32.div (get_local $x) (get_local $y))) + (func (export "sqrt") (param $x f32) (result f32) (f32.sqrt (get_local $x))) + (func (export "min") (param $x f32) (param $y f32) (result f32) (f32.min (get_local $x) (get_local $y))) + (func (export "max") (param $x f32) (param $y f32) (result f32) (f32.max (get_local $x) (get_local $y))) + (func (export "ceil") (param $x f32) (result f32) (f32.ceil (get_local $x))) + (func (export "floor") (param $x f32) (result f32) (f32.floor (get_local $x))) + (func (export "trunc") (param $x f32) (result f32) (f32.trunc (get_local $x))) + (func (export "nearest") (param $x f32) (result f32) (f32.nearest (get_local $x))) +) + +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-148)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-148)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-125)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-125)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1.8p+0)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+1)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+1)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "add" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "add" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const inf))) +(assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const -inf))) +(assert_return (invoke "add" (f32.const inf) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "add" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "add" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "add" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x0p+0) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x0p+0) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-148)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-148)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1p-149) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1.000002p-126)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-125)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-125)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1p-126) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1p-1) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1.8p+0)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+1)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+1)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1p+0) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.b21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.721fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.d21fb6p+2)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.521fb6p+2)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const -inf))) +(assert_return (invoke "sub" (f32.const -inf) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "sub" (f32.const inf) (f32.const -inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const inf))) +(assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sub" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "sub" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1p-149) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1p-126) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-127)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-127)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-2)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-2)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-2)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-2)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1p-1) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1p+0) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.8p-147)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.8p-147)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p-124)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+1)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.3bd3cep+5)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep-22)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+1)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+126)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const 0x0p+0))) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "mul" (f32.const -inf) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "mul" (f32.const inf) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "mul" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "mul" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const 0x0p+0))) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-23)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-23)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-23)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-23)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-148)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-148)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-148)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-148)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p+23)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p+23)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p+23)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p+23)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-125)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-125)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-125)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-125)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f3p-129)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p+125)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p+125)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p+125)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p+125)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-4)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-129)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-129)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-129)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-129)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+126)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+126)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+126)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+126)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+1)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+1)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+1)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+1)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f306p-3)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-128)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-128)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-128)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-128)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+3)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb8p-126)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.45f304p+125)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "div" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "div" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "div" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "div" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const -inf))) +(assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const inf))) +(assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const -inf))) +(assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const inf))) +(assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "div" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "div" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "div" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x0p+0) (f32.const inf)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1p-149) (f32.const inf)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1p-126) (f32.const inf)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1p-1) (f32.const inf)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1p+0) (f32.const inf)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x0p+0)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-149)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-126)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p-1)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1p+0)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "min" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const -inf) (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "min" (f32.const inf) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "min" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "min" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "min" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "min" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x0p+0) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const -inf)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x0p+0) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x0p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x0p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x0p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x0p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x0p+0) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-149) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const -inf)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-149) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-149) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-149) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-149) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-149) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-149) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-126) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const -inf)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-126) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-126) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-126) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-126) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-126) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-126) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p-1) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const -inf)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p-1) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p-1) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-1) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-1) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p-1) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p-1) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1p+0) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const -inf)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1p+0) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1p+0) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p+0) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p+0) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1p+0) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1p+0) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000))) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x0p+0)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-149)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-126)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1p-1)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1p+0)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "max" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "max" (f32.const -inf) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "max" (f32.const inf) (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "max" (f32.const -inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const inf) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const inf) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const inf) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const inf) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-149))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-149))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-149))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-149))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-126))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-126))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-126))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-126))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1.921fb6p+2))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const 0x1.fffffep+127))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -inf))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -inf))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const inf))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const inf))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const -nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "max" (f32.const -nan:0x200000) (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan) (f32.const -nan:0x200000))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "max" (f32.const nan) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan) (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "max" (f32.const nan:0x200000) (f32.const nan:0x200000))) +(assert_return (invoke "sqrt" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "sqrt" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-149))) +(assert_return (invoke "sqrt" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-126))) +(assert_return (invoke "sqrt" (f32.const 0x1p-126)) (f32.const 0x1p-63)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p-1))) +(assert_return (invoke "sqrt" (f32.const 0x1p-1)) (f32.const 0x1.6a09e6p-1)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1p+0))) +(assert_return (invoke "sqrt" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1.921fb6p+2))) +(assert_return (invoke "sqrt" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.40d932p+1)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -0x1.fffffep+127))) +(assert_return (invoke "sqrt" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+63)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -inf))) +(assert_return (invoke "sqrt" (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "sqrt" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "sqrt" (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "sqrt" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "sqrt" (f32.const nan:0x200000))) +(assert_return (invoke "floor" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "floor" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "floor" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "floor" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "floor" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.cp+2)) +(assert_return (invoke "floor" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "floor" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "floor" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "floor" (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "floor" (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "floor" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "floor" (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "floor" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "floor" (f32.const nan:0x200000))) +(assert_return (invoke "ceil" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "ceil" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "ceil" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "ceil" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.cp+2)) +(assert_return (invoke "ceil" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "ceil" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "ceil" (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "ceil" (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "ceil" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "ceil" (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "ceil" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "ceil" (f32.const nan:0x200000))) +(assert_return (invoke "trunc" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "trunc" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "trunc" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "trunc" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "trunc" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "trunc" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "trunc" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "trunc" (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "trunc" (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "trunc" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "trunc" (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "trunc" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "trunc" (f32.const nan:0x200000))) +(assert_return (invoke "nearest" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "nearest" (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "nearest" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "nearest" (f32.const -0x1.921fb6p+2)) (f32.const -0x1.8p+2)) +(assert_return (invoke "nearest" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.8p+2)) +(assert_return (invoke "nearest" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "nearest" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "nearest" (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "nearest" (f32.const inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "nearest" (f32.const -nan))) +(assert_return_arithmetic_nan (invoke "nearest" (f32.const -nan:0x200000))) +(assert_return_canonical_nan (invoke "nearest" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "nearest" (f32.const nan:0x200000))) diff --git a/libraries/wasm-jit/Test/spec/f32_bitwise.wast b/libraries/wasm-jit/Test/spec/f32_bitwise.wast new file mode 100644 index 000000000..12bdb866e --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f32_bitwise.wast @@ -0,0 +1,369 @@ +;; Test all the f32 bitwise operators on major boundary values and all special +;; values. + +(module + (func (export "abs") (param $x f32) (result f32) (f32.abs (get_local $x))) + (func (export "neg") (param $x f32) (result f32) (f32.neg (get_local $x))) + (func (export "copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (get_local $x) (get_local $y))) +) + +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-149)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-149)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-126)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-126)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p-1)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p-1)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -inf)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const inf)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const -nan)) (f32.const -0x0p+0)) +(assert_return (invoke "copysign" (f32.const 0x0p+0) (f32.const nan)) (f32.const 0x0p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x0p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x0p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-126)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-126)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p-1)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p-1)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1p+0)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1p+0)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -inf)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const inf)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const -nan)) (f32.const -0x1p-149)) +(assert_return (invoke "copysign" (f32.const 0x1p-149) (f32.const nan)) (f32.const 0x1p-149)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x0p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x0p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-149)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-149)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p-1)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p-1)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1p+0)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1p+0)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -inf)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const inf)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const -nan)) (f32.const -0x1p-126)) +(assert_return (invoke "copysign" (f32.const 0x1p-126) (f32.const nan)) (f32.const 0x1p-126)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x0p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x0p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-149)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-149)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-126)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-126)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1p+0)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1p+0)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -inf)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const inf)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const -nan)) (f32.const -0x1p-1)) +(assert_return (invoke "copysign" (f32.const 0x1p-1) (f32.const nan)) (f32.const 0x1p-1)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x0p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x0p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-149)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-149)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-126)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-126)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p-1)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p-1)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -inf)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const inf)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const -nan)) (f32.const -0x1p+0)) +(assert_return (invoke "copysign" (f32.const 0x1p+0) (f32.const nan)) (f32.const 0x1p+0)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const inf)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const 0x1.921fb6p+2) (f32.const nan)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -inf)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const inf)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const -nan)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const 0x1.fffffep+127) (f32.const nan)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x0p+0)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x0p+0)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-149)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-149)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-126)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-126)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p-1)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p-1)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1p+0)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1p+0)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.921fb6p+2)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.921fb6p+2)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -0x1.fffffep+127)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const 0x1.fffffep+127)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -inf)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const inf)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const -nan)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const -inf) (f32.const nan)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const -nan)) (f32.const -inf)) +(assert_return (invoke "copysign" (f32.const inf) (f32.const nan)) (f32.const inf)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x0p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x0p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-149)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-149)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-126)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-126)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p-1)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p-1)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1p+0)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1p+0)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.921fb6p+2)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.921fb6p+2)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -0x1.fffffep+127)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const 0x1.fffffep+127)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -inf)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const inf)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -inf)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const inf)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const -nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const -nan)) (f32.const -nan)) +(assert_return (invoke "copysign" (f32.const nan) (f32.const nan)) (f32.const nan)) +(assert_return (invoke "abs" (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "abs" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "abs" (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "abs" (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "abs" (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "abs" (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "abs" (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "abs" (f32.const 0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "abs" (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "abs" (f32.const 0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "abs" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "abs" (f32.const 0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "abs" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "abs" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "abs" (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "abs" (f32.const inf)) (f32.const inf)) +(assert_return (invoke "abs" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "abs" (f32.const nan)) (f32.const nan)) +(assert_return (invoke "neg" (f32.const -0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "neg" (f32.const 0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "neg" (f32.const -0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "neg" (f32.const 0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "neg" (f32.const -0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "neg" (f32.const 0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "neg" (f32.const -0x1p-1)) (f32.const 0x1p-1)) +(assert_return (invoke "neg" (f32.const 0x1p-1)) (f32.const -0x1p-1)) +(assert_return (invoke "neg" (f32.const -0x1p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "neg" (f32.const 0x1p+0)) (f32.const -0x1p+0)) +(assert_return (invoke "neg" (f32.const -0x1.921fb6p+2)) (f32.const 0x1.921fb6p+2)) +(assert_return (invoke "neg" (f32.const 0x1.921fb6p+2)) (f32.const -0x1.921fb6p+2)) +(assert_return (invoke "neg" (f32.const -0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "neg" (f32.const 0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "neg" (f32.const -inf)) (f32.const inf)) +(assert_return (invoke "neg" (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "neg" (f32.const -nan)) (f32.const nan)) +(assert_return (invoke "neg" (f32.const nan)) (f32.const -nan)) diff --git a/libraries/wasm-jit/Test/spec/f32_cmp.wast b/libraries/wasm-jit/Test/spec/f32_cmp.wast new file mode 100644 index 000000000..5bae18bcd --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f32_cmp.wast @@ -0,0 +1,2412 @@ +;; Test all the f32 comparison operators on major boundary values and all +;; special values. + +(module + (func (export "eq") (param $x f32) (param $y f32) (result i32) (f32.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x f32) (param $y f32) (result i32) (f32.ne (get_local $x) (get_local $y))) + (func (export "lt") (param $x f32) (param $y f32) (result i32) (f32.lt (get_local $x) (get_local $y))) + (func (export "le") (param $x f32) (param $y f32) (result i32) (f32.le (get_local $x) (get_local $y))) + (func (export "gt") (param $x f32) (param $y f32) (result i32) (f32.gt (get_local $x) (get_local $y))) + (func (export "ge") (param $x f32) (param $y f32) (result i32) (f32.ge (get_local $x) (get_local $y))) +) + +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "eq" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const inf) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "ne" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "lt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "le" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f32.const inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "gt" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x0p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-149) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-126) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p-1) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1p+0) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.921fb6p+2) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const 0x1.fffffep+127) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-149)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-126)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.921fb6p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const 0x1.fffffep+127)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const inf) (f32.const inf)) (i32.const 1)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const inf) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-149)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-126)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.921fb6p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const 0x1.fffffep+127)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const -nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const -nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan) (f32.const nan:0x200000)) (i32.const 0)) +(assert_return (invoke "ge" (f32.const nan:0x200000) (f32.const nan:0x200000)) (i32.const 0)) diff --git a/libraries/wasm-jit/Test/spec/f64.wast b/libraries/wasm-jit/Test/spec/f64.wast new file mode 100644 index 000000000..50db4e708 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f64.wast @@ -0,0 +1,2518 @@ +;; Test all the f64 operators on major boundary values and all special +;; values (except comparison and bitwise operators, which are tested in +;; f64_bitwise.wast and f64_cmp.wast). + +(module + (func (export "add") (param $x f64) (param $y f64) (result f64) (f64.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x f64) (param $y f64) (result f64) (f64.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x f64) (param $y f64) (result f64) (f64.mul (get_local $x) (get_local $y))) + (func (export "div") (param $x f64) (param $y f64) (result f64) (f64.div (get_local $x) (get_local $y))) + (func (export "sqrt") (param $x f64) (result f64) (f64.sqrt (get_local $x))) + (func (export "min") (param $x f64) (param $y f64) (result f64) (f64.min (get_local $x) (get_local $y))) + (func (export "max") (param $x f64) (param $y f64) (result f64) (f64.max (get_local $x) (get_local $y))) + (func (export "ceil") (param $x f64) (result f64) (f64.ceil (get_local $x))) + (func (export "floor") (param $x f64) (result f64) (f64.floor (get_local $x))) + (func (export "trunc") (param $x f64) (result f64) (f64.trunc (get_local $x))) + (func (export "nearest") (param $x f64) (result f64) (f64.nearest (get_local $x))) +) + +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1021)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1021)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1.8p+0)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+1)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+1)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "add" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "add" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const inf))) +(assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const -inf))) +(assert_return (invoke "add" (f64.const inf) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "add" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "add" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "add" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x0p+0) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x0p+0) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.0000000000001p-1022)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1021)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1021)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1p-1) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1.8p+0)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+1)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+1)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1p+0) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.b21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.721fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.d21fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.521fb54442d18p+2)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const -inf))) +(assert_return (invoke "sub" (f64.const -inf) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "sub" (f64.const inf) (f64.const -inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const inf))) +(assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sub" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "sub" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x0.8p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-2)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-2)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-2)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-2)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1p-1) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1p+0) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000006p-1022)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p-1020)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+1)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.3bd3cc9be45dep+5)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp-51)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1022)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const 0x0p+0))) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "mul" (f64.const -inf) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "mul" (f64.const inf) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "mul" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "mul" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const 0x0p+0))) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-52)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-52)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-52)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-52)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000002p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+52)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+52)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+52)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+52)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1021)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1021)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1021)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1021)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.28be60db9391p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p+1021)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p+1021)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p+1021)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p+1021)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-4)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.2p-1022)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.2p-1022)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+1)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+1)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+1)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+1)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c883p-3)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.4p-1022)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.4p-1022)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+3)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d19p-1022)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.45f306dc9c882p+1021)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x1p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "div" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "div" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const -inf))) +(assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const inf))) +(assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const -inf))) +(assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const inf))) +(assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "div" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "div" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "div" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x0p+0) (f64.const inf)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x1p-1022) (f64.const inf)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x1p-1) (f64.const inf)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x1p+0) (f64.const inf)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x0p+0)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p-1)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x1p+0)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "min" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const -inf) (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "min" (f64.const inf) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "min" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "min" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "min" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "min" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0p+0) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const -inf)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0p+0) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x0p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x0p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x0p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1022) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1022) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1022) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1022) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p-1) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const -inf)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p-1) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p-1) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p-1) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1p+0) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const -inf)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1p+0) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p+0) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1p+0) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1p+0) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000))) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x0p+0)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1022)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x1p-1)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x1p+0)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "max" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "max" (f64.const -inf) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "max" (f64.const inf) (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "max" (f64.const -inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const inf) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const inf) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const inf) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const inf) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x0p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x0.0000000000001p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1022))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p-1))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p-1))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1p+0))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1p+0))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -inf))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -inf))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const inf))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const inf))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const -nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "max" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan) (f64.const -nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "max" (f64.const nan) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan) (f64.const nan:0x4000000000000))) +(assert_return_arithmetic_nan (invoke "max" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000))) +(assert_return (invoke "sqrt" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "sqrt" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x0.0000000000001p-1022))) +(assert_return (invoke "sqrt" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-537)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p-1022))) +(assert_return (invoke "sqrt" (f64.const 0x1p-1022)) (f64.const 0x1p-511)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p-1))) +(assert_return (invoke "sqrt" (f64.const 0x1p-1)) (f64.const 0x1.6a09e667f3bcdp-1)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1p+0))) +(assert_return (invoke "sqrt" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1.921fb54442d18p+2))) +(assert_return (invoke "sqrt" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.40d931ff62705p+1)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -0x1.fffffffffffffp+1023))) +(assert_return (invoke "sqrt" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+511)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -inf))) +(assert_return (invoke "sqrt" (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "sqrt" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "sqrt" (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "sqrt" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "sqrt" (f64.const nan:0x4000000000000))) +(assert_return (invoke "floor" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "floor" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "floor" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "floor" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "floor" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.cp+2)) +(assert_return (invoke "floor" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "floor" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "floor" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "floor" (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "floor" (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "floor" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "floor" (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "floor" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "floor" (f64.const nan:0x4000000000000))) +(assert_return (invoke "ceil" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "ceil" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "ceil" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "ceil" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "ceil" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.cp+2)) +(assert_return (invoke "ceil" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "ceil" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "ceil" (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "ceil" (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "ceil" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "ceil" (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "ceil" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "ceil" (f64.const nan:0x4000000000000))) +(assert_return (invoke "trunc" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "trunc" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "trunc" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "trunc" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "trunc" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "trunc" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "trunc" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "trunc" (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "trunc" (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "trunc" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "trunc" (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "trunc" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "trunc" (f64.const nan:0x4000000000000))) +(assert_return (invoke "nearest" (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "nearest" (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "nearest" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "nearest" (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.8p+2)) +(assert_return (invoke "nearest" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.8p+2)) +(assert_return (invoke "nearest" (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "nearest" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "nearest" (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "nearest" (f64.const inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "nearest" (f64.const -nan))) +(assert_return_arithmetic_nan (invoke "nearest" (f64.const -nan:0x4000000000000))) +(assert_return_canonical_nan (invoke "nearest" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "nearest" (f64.const nan:0x4000000000000))) diff --git a/libraries/wasm-jit/Test/spec/f64_bitwise.wast b/libraries/wasm-jit/Test/spec/f64_bitwise.wast new file mode 100644 index 000000000..86c64b54d --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f64_bitwise.wast @@ -0,0 +1,369 @@ +;; Test all the f64 bitwise operators on major boundary values and all special +;; values. + +(module + (func (export "abs") (param $x f64) (result f64) (f64.abs (get_local $x))) + (func (export "neg") (param $x f64) (result f64) (f64.neg (get_local $x))) + (func (export "copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (get_local $x) (get_local $y))) +) + +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p-1)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p-1)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -inf)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const inf)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const -nan)) (f64.const -0x0p+0)) +(assert_return (invoke "copysign" (f64.const 0x0p+0) (f64.const nan)) (f64.const 0x0p+0)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -inf)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const inf)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const -nan)) (f64.const -0x1p-1022)) +(assert_return (invoke "copysign" (f64.const 0x1p-1022) (f64.const nan)) (f64.const 0x1p-1022)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1p+0)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1p+0)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -inf)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const inf)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const -nan)) (f64.const -0x1p-1)) +(assert_return (invoke "copysign" (f64.const 0x1p-1) (f64.const nan)) (f64.const 0x1p-1)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p-1)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p-1)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -inf)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const inf)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const -nan)) (f64.const -0x1p+0)) +(assert_return (invoke "copysign" (f64.const 0x1p+0) (f64.const nan)) (f64.const 0x1p+0)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0p+0)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0p+0)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1022)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1022)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p-1)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p-1)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1p+0)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1p+0)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -inf)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const inf)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const -nan)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const -inf) (f64.const nan)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const -nan)) (f64.const -inf)) +(assert_return (invoke "copysign" (f64.const inf) (f64.const nan)) (f64.const inf)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1022)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1022)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p-1)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p-1)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1p+0)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1p+0)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -inf)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const inf)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -inf)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const inf)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const -nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const -nan)) (f64.const -nan)) +(assert_return (invoke "copysign" (f64.const nan) (f64.const nan)) (f64.const nan)) +(assert_return (invoke "abs" (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "abs" (f64.const 0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "abs" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "abs" (f64.const 0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "abs" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "abs" (f64.const 0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "abs" (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "abs" (f64.const 0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "abs" (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "abs" (f64.const 0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "abs" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "abs" (f64.const 0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "abs" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "abs" (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "abs" (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "abs" (f64.const inf)) (f64.const inf)) +(assert_return (invoke "abs" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "abs" (f64.const nan)) (f64.const nan)) +(assert_return (invoke "neg" (f64.const -0x0p+0)) (f64.const 0x0p+0)) +(assert_return (invoke "neg" (f64.const 0x0p+0)) (f64.const -0x0p+0)) +(assert_return (invoke "neg" (f64.const -0x0.0000000000001p-1022)) (f64.const 0x0.0000000000001p-1022)) +(assert_return (invoke "neg" (f64.const 0x0.0000000000001p-1022)) (f64.const -0x0.0000000000001p-1022)) +(assert_return (invoke "neg" (f64.const -0x1p-1022)) (f64.const 0x1p-1022)) +(assert_return (invoke "neg" (f64.const 0x1p-1022)) (f64.const -0x1p-1022)) +(assert_return (invoke "neg" (f64.const -0x1p-1)) (f64.const 0x1p-1)) +(assert_return (invoke "neg" (f64.const 0x1p-1)) (f64.const -0x1p-1)) +(assert_return (invoke "neg" (f64.const -0x1p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "neg" (f64.const 0x1p+0)) (f64.const -0x1p+0)) +(assert_return (invoke "neg" (f64.const -0x1.921fb54442d18p+2)) (f64.const 0x1.921fb54442d18p+2)) +(assert_return (invoke "neg" (f64.const 0x1.921fb54442d18p+2)) (f64.const -0x1.921fb54442d18p+2)) +(assert_return (invoke "neg" (f64.const -0x1.fffffffffffffp+1023)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "neg" (f64.const 0x1.fffffffffffffp+1023)) (f64.const -0x1.fffffffffffffp+1023)) +(assert_return (invoke "neg" (f64.const -inf)) (f64.const inf)) +(assert_return (invoke "neg" (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "neg" (f64.const -nan)) (f64.const nan)) +(assert_return (invoke "neg" (f64.const nan)) (f64.const -nan)) diff --git a/libraries/wasm-jit/Test/spec/f64_cmp.wast b/libraries/wasm-jit/Test/spec/f64_cmp.wast new file mode 100644 index 000000000..8fe9be4e5 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/f64_cmp.wast @@ -0,0 +1,2412 @@ +;; Test all the f64 comparison operators on major boundary values and all +;; special values. + +(module + (func (export "eq") (param $x f64) (param $y f64) (result i32) (f64.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x f64) (param $y f64) (result i32) (f64.ne (get_local $x) (get_local $y))) + (func (export "lt") (param $x f64) (param $y f64) (result i32) (f64.lt (get_local $x) (get_local $y))) + (func (export "le") (param $x f64) (param $y f64) (result i32) (f64.le (get_local $x) (get_local $y))) + (func (export "gt") (param $x f64) (param $y f64) (result i32) (f64.gt (get_local $x) (get_local $y))) + (func (export "ge") (param $x f64) (param $y f64) (result i32) (f64.ge (get_local $x) (get_local $y))) +) + +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "lt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "le" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "gt" (f64.const inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "gt" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x0.0000000000001p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1022) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p-1) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1p+0) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.921fb54442d18p+2) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const 0x1.fffffffffffffp+1023) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x0p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x0.0000000000001p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1022)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p-1)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x1p+0)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.921fb54442d18p+2)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const inf) (f64.const inf)) (i32.const 1)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const inf) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x0.0000000000001p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1022)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p-1)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1p+0)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.921fb54442d18p+2)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const 0x1.fffffffffffffp+1023)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const inf)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const -nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const -nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan) (f64.const nan:0x4000000000000)) (i32.const 0)) +(assert_return (invoke "ge" (f64.const nan:0x4000000000000) (f64.const nan:0x4000000000000)) (i32.const 0)) diff --git a/libraries/wasm-jit/Test/spec/fac.wast b/libraries/wasm-jit/Test/spec/fac.wast new file mode 100644 index 000000000..acc896231 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/fac.wast @@ -0,0 +1,89 @@ +(module + ;; Recursive factorial + (func (export "fac-rec") (param i64) (result i64) + (if (result i64) (i64.eq (get_local 0) (i64.const 0)) + (then (i64.const 1)) + (else + (i64.mul (get_local 0) (call 0 (i64.sub (get_local 0) (i64.const 1)))) + ) + ) + ) + + ;; Recursive factorial named + (func $fac-rec-named (export "fac-rec-named") (param $n i64) (result i64) + (if (result i64) (i64.eq (get_local $n) (i64.const 0)) + (then (i64.const 1)) + (else + (i64.mul + (get_local $n) + (call $fac-rec-named (i64.sub (get_local $n) (i64.const 1))) + ) + ) + ) + ) + + ;; Iterative factorial + (func (export "fac-iter") (param i64) (result i64) + (local i64 i64) + (set_local 1 (get_local 0)) + (set_local 2 (i64.const 1)) + (block + (loop + (if + (i64.eq (get_local 1) (i64.const 0)) + (then (br 2)) + (else + (set_local 2 (i64.mul (get_local 1) (get_local 2))) + (set_local 1 (i64.sub (get_local 1) (i64.const 1))) + ) + ) + (br 0) + ) + ) + (get_local 2) + ) + + ;; Iterative factorial named + (func (export "fac-iter-named") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (if + (i64.eq (get_local $i) (i64.const 0)) + (then (br $done)) + (else + (set_local $res (i64.mul (get_local $i) (get_local $res))) + (set_local $i (i64.sub (get_local $i) (i64.const 1))) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + ;; Optimized factorial. + (func (export "fac-opt") (param i64) (result i64) + (local i64) + (set_local 1 (i64.const 1)) + (block + (br_if 0 (i64.lt_s (get_local 0) (i64.const 2))) + (loop + (set_local 1 (i64.mul (get_local 1) (get_local 0))) + (set_local 0 (i64.add (get_local 0) (i64.const -1))) + (br_if 0 (i64.gt_s (get_local 0) (i64.const 1))) + ) + ) + (get_local 1) + ) +) + +(assert_return (invoke "fac-rec" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-iter" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-rec-named" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-iter-named" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-opt" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_exhaustion (invoke "fac-rec" (i64.const 1073741824)) "call stack exhausted") diff --git a/libraries/wasm-jit/Test/spec/float_exprs.wast b/libraries/wasm-jit/Test/spec/float_exprs.wast new file mode 100644 index 000000000..1e4fdf0b1 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/float_exprs.wast @@ -0,0 +1,2570 @@ +;; Test interesting floating-point "expressions". These tests contain code +;; patterns which tempt common value-changing optimizations. + +;; Test that x*y+z is not done with x87-style intermediate precision. + +(module + (func (export "f64.no_contraction") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.9e87ce14273afp-103) (f64.const 0x1.2515ad31db63ep+664) (f64.const 0x1.868c6685e6185p+533)) (f64.const -0x1.da94885b11493p+561)) +(assert_return (invoke "f64.no_contraction" (f64.const 0x1.da21c460a6f44p+52) (f64.const 0x1.60859d2e7714ap-321) (f64.const 0x1.e63f1b7b660e1p-302)) (f64.const 0x1.4672f256d1794p-268)) +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.f3eaf43f327cp-594) (f64.const 0x1.dfcc009906b57p+533) (f64.const 0x1.5984e03c520a1p-104)) (f64.const -0x1.d4797fb3db166p-60)) +(assert_return (invoke "f64.no_contraction" (f64.const 0x1.dab6c772cb2e2p-69) (f64.const -0x1.d761663679a84p-101) (f64.const 0x1.f22f92c843226p-218)) (f64.const -0x1.b50d72dfcef68p-169)) +(assert_return (invoke "f64.no_contraction" (f64.const -0x1.87c5def1e4d3dp-950) (f64.const -0x1.50cd5dab2207fp+935) (f64.const 0x1.e629bd0da8c5dp-54)) (f64.const 0x1.01b6feb4e78a7p-14)) + +;; Test that x*y+z is not folded to fma. + +(module + (func (export "f32.no_fma") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.add (f32.mul (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_fma") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_fma" (f32.const 0x1.a78402p+124) (f32.const 0x1.cf8548p-23) (f32.const 0x1.992adap+107)) (f32.const 0x1.a5262cp+107)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.ed15a4p-28) (f32.const -0x1.613c72p-50) (f32.const 0x1.4757bp-88)) (f32.const -0x1.5406b8p-77)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.ae63a2p+37) (f32.const 0x1.b3a59ap-13) (f32.const 0x1.c16918p+10)) (f32.const 0x1.6e385cp+25)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.2a77fap-8) (f32.const -0x1.bb7356p+22) (f32.const -0x1.32be2ap+1)) (f32.const -0x1.0286d4p+15)) +(assert_return (invoke "f32.no_fma" (f32.const 0x1.298fb6p+126) (f32.const -0x1.03080cp-70) (f32.const -0x1.418de6p+34)) (f32.const -0x1.2d15c6p+56)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.ac357ff46eed4p+557) (f64.const 0x1.852c01a5e7297p+430) (f64.const -0x1.05995704eda8ap+987)) (f64.const 0x1.855d905d338ep+987)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.e2fd6bf32010cp+749) (f64.const 0x1.01c2238d405e4p-130) (f64.const 0x1.2ecc0db4b9f94p+573)) (f64.const 0x1.e64eb07e063bcp+619)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.92b7c7439ede3p-721) (f64.const -0x1.6aa97586d3de6p+1011) (f64.const 0x1.8de4823f6358ap+237)) (f64.const -0x1.1d4139fd20ecdp+291)) +(assert_return (invoke "f64.no_fma" (f64.const -0x1.466d30bddb453p-386) (f64.const -0x1.185a4d739c7aap+443) (f64.const 0x1.5f9c436fbfc7bp+55)) (f64.const 0x1.bd61a350fcc1ap+57)) +(assert_return (invoke "f64.no_fma" (f64.const 0x1.7e2c44058a799p+52) (f64.const 0x1.c73b71765b8b2p+685) (f64.const -0x1.16c641df0b108p+690)) (f64.const 0x1.53ccb53de0bd1p+738)) + +;; Test that x+0.0 is not folded to x. +;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". + +(module + (func (export "f32.no_fold_add_zero") (param $x f32) (result f32) + (f32.add (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_add_zero") (param $x f64) (result f64) + (f64.add (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_add_zero" (f32.const -0.0)) (f32.const 0.0)) +(assert_return (invoke "f64.no_fold_add_zero" (f64.const -0.0)) (f64.const 0.0)) +(assert_return_arithmetic_nan (invoke "f32.no_fold_add_zero" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_add_zero" (f64.const nan:0x4000000000000))) + +;; Test that 0.0 - x is not folded to -x. + +(module + (func (export "f32.no_fold_zero_sub") (param $x f32) (result f32) + (f32.sub (f32.const 0.0) (get_local $x))) + (func (export "f64.no_fold_zero_sub") (param $x f64) (result f64) + (f64.sub (f64.const 0.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_zero_sub" (f32.const 0.0)) (f32.const 0.0)) +(assert_return (invoke "f64.no_fold_zero_sub" (f64.const 0.0)) (f64.const 0.0)) +(assert_return_arithmetic_nan (invoke "f32.no_fold_zero_sub" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_zero_sub" (f64.const nan:0x4000000000000))) + +;; Test that x - 0.0 is not folded to x. + +(module + (func (export "f32.no_fold_sub_zero") (param $x f32) (result f32) + (f32.sub (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_sub_zero") (param $x f64) (result f64) + (f64.sub (get_local $x) (f64.const 0.0))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_sub_zero" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_sub_zero" (f64.const nan:0x4000000000000))) + +;; Test that x*0.0 is not folded to 0.0. + +(module + (func (export "f32.no_fold_mul_zero") (param $x f32) (result f32) + (f32.mul (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_mul_zero") (param $x f64) (result f64) + (f64.mul (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -0.0)) (f32.const -0.0)) +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -1.0)) (f32.const -0.0)) +(assert_return (invoke "f32.no_fold_mul_zero" (f32.const -2.0)) (f32.const -0.0)) +(assert_return_arithmetic_nan (invoke "f32.no_fold_mul_zero" (f32.const nan:0x200000))) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -0.0)) (f64.const -0.0)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -1.0)) (f64.const -0.0)) +(assert_return (invoke "f64.no_fold_mul_zero" (f64.const -2.0)) (f64.const -0.0)) +(assert_return_arithmetic_nan (invoke "f64.no_fold_mul_zero" (f64.const nan:0x4000000000000))) + +;; Test that x*1.0 is not folded to x. +;; See IEEE 754-2008 10.4 "Literal meaning and value-changing optimizations". + +(module + (func (export "f32.no_fold_mul_one") (param $x f32) (result f32) + (f32.mul (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_mul_one") (param $x f64) (result f64) + (f64.mul (get_local $x) (f64.const 1.0))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_mul_one" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_mul_one" (f64.const nan:0x4000000000000))) + +;; Test that 0.0/x is not folded to 0.0. + +(module + (func (export "f32.no_fold_zero_div") (param $x f32) (result f32) + (f32.div (f32.const 0.0) (get_local $x))) + (func (export "f64.no_fold_zero_div") (param $x f64) (result f64) + (f64.div (f64.const 0.0) (get_local $x))) +) + +(assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const 0.0))) +(assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const -0.0))) +(assert_return_canonical_nan (invoke "f32.no_fold_zero_div" (f32.const nan))) +(assert_return_arithmetic_nan (invoke "f32.no_fold_zero_div" (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const 0.0))) +(assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const -0.0))) +(assert_return_canonical_nan (invoke "f64.no_fold_zero_div" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_zero_div" (f64.const nan:0x4000000000000))) + +;; Test that x/1.0 is not folded to x. + +(module + (func (export "f32.no_fold_div_one") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 1.0))) + (func (export "f64.no_fold_div_one") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 1.0))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_div_one" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_div_one" (f64.const nan:0x4000000000000))) + +;; Test that x/-1.0 is not folded to -x. + +(module + (func (export "f32.no_fold_div_neg1") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const -1.0))) + (func (export "f64.no_fold_div_neg1") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const -1.0))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_div_neg1" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_div_neg1" (f64.const nan:0x4000000000000))) + +;; Test that -0.0 - x is not folded to -x. + +(module + (func (export "f32.no_fold_neg0_sub") (param $x f32) (result f32) + (f32.sub (f32.const -0.0) (get_local $x))) + (func (export "f64.no_fold_neg0_sub") (param $x f64) (result f64) + (f64.sub (f64.const -0.0) (get_local $x))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_neg0_sub" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_neg0_sub" (f64.const nan:0x4000000000000))) + +;; Test that -1.0 * x is not folded to -x. + +(module + (func (export "f32.no_fold_neg1_mul") (param $x f32) (result f32) + (f32.mul (f32.const -1.0) (get_local $x))) + (func (export "f64.no_fold_neg1_mul") (param $x f64) (result f64) + (f64.mul (f64.const -1.0) (get_local $x))) +) + +(assert_return_arithmetic_nan (invoke "f32.no_fold_neg1_mul" (f32.const nan:0x200000))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_neg1_mul" (f64.const nan:0x4000000000000))) + +;; Test that x == x is not folded to true. + +(module + (func (export "f32.no_fold_eq_self") (param $x f32) (result i32) + (f32.eq (get_local $x) (get_local $x))) + (func (export "f64.no_fold_eq_self") (param $x f64) (result i32) + (f64.eq (get_local $x) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_eq_self" (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_eq_self" (f64.const nan)) (i32.const 0)) + +;; Test that x != x is not folded to false. + +(module + (func (export "f32.no_fold_ne_self") (param $x f32) (result i32) + (f32.ne (get_local $x) (get_local $x))) + (func (export "f64.no_fold_ne_self") (param $x f64) (result i32) + (f64.ne (get_local $x) (get_local $x))) +) + +(assert_return (invoke "f32.no_fold_ne_self" (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f64.no_fold_ne_self" (f64.const nan)) (i32.const 1)) + +;; Test that x - x is not folded to 0.0. + +(module + (func (export "f32.no_fold_sub_self") (param $x f32) (result f32) + (f32.sub (get_local $x) (get_local $x))) + (func (export "f64.no_fold_sub_self") (param $x f64) (result f64) + (f64.sub (get_local $x) (get_local $x))) +) + +(assert_return_canonical_nan (invoke "f32.no_fold_sub_self" (f32.const inf))) +(assert_return_canonical_nan (invoke "f32.no_fold_sub_self" (f32.const nan))) +(assert_return_canonical_nan (invoke "f64.no_fold_sub_self" (f64.const inf))) +(assert_return_canonical_nan (invoke "f64.no_fold_sub_self" (f64.const nan))) + +;; Test that x / x is not folded to 1.0. + +(module + (func (export "f32.no_fold_div_self") (param $x f32) (result f32) + (f32.div (get_local $x) (get_local $x))) + (func (export "f64.no_fold_div_self") (param $x f64) (result f64) + (f64.div (get_local $x) (get_local $x))) +) + +(assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const inf))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const nan))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const 0.0))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_self" (f32.const -0.0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const inf))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const nan))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const 0.0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_self" (f64.const -0.0))) + +;; Test that x/3 is not folded to x*(1/3). + +(module + (func (export "f32.no_fold_div_3") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 3.0))) + (func (export "f64.no_fold_div_3") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 3.0))) +) + +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.359c26p+50)) (f32.const -0x1.9cd032p+48)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.e45646p+93)) (f32.const -0x1.42e42ep+92)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.2a3916p-83)) (f32.const -0x1.8da172p-85)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.1f8b38p-124)) (f32.const -0x1.7f644ap-126)) +(assert_return (invoke "f32.no_fold_div_3" (f32.const -0x1.d64f64p-56)) (f32.const -0x1.398a42p-57)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.a8a88d29e2cc3p+632)) (f64.const -0x1.1b1b08c69732dp+631)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.bcf52dc950972p-167)) (f64.const -0x1.28a373db8b0f7p-168)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.bd3c0d989f7a4p-874)) (f64.const 0x1.28d2b3bb14fc3p-875)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const -0x1.0138bf530a53cp+1007)) (f64.const -0x1.56f6546eb86fbp+1005)) +(assert_return (invoke "f64.no_fold_div_3" (f64.const 0x1.052b87f9d794dp+415)) (f64.const 0x1.5c3a0aa274c67p+413)) + +;; Test that (x*z)+(y*z) is not folded to (x+y)*z. + +(module + (func (export "f32.no_factor") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.add (f32.mul (get_local $x) (get_local $z)) (f32.mul (get_local $y) (get_local $z)))) + (func (export "f64.no_factor") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.add (f64.mul (get_local $x) (get_local $z)) (f64.mul (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_factor" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7dp+109)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a342p-14)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651aaep+82)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa15p+55)) +(assert_return (invoke "f32.no_factor" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9cep-50)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1ap-649)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.no_factor" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e2p+198)) +(assert_return (invoke "f64.no_factor" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f184p-512)) +(assert_return (invoke "f64.no_factor" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af53p-90)) + +;; Test that (x+y)*z is not folded to (x*z)+(y*z). + +(module + (func (export "f32.no_distribute") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.mul (f32.add (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_distribute") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.mul (f64.add (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.4e2352p+40) (f32.const -0x1.842e2cp+49) (f32.const 0x1.eea602p+59)) (f32.const -0x1.77a7d2p+109)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.b4e7f6p-6) (f32.const 0x1.8c990cp-5) (f32.const -0x1.70cc02p-9)) (f32.const -0x1.00a34p-14)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.06722ep-41) (f32.const 0x1.eed3cep-64) (f32.const 0x1.5c5558p+123)) (f32.const -0x1.651abp+82)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.f8c6a4p-64) (f32.const 0x1.08c806p-83) (f32.const 0x1.b5ceccp+118)) (f32.const -0x1.afa14ep+55)) +(assert_return (invoke "f32.no_distribute" (f32.const -0x1.3aaa1ep-84) (f32.const 0x1.c6d5eep-71) (f32.const 0x1.8d2924p+20)) (f32.const 0x1.60c9ccp-50)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.3adeda9144977p-424) (f64.const 0x1.c15af887049e1p-462) (f64.const -0x1.905179c4c4778p-225)) (f64.const -0x1.ec606bcb87b1bp-649)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.3c84821c1d348p-662) (f64.const -0x1.4ffd4c77ad037p-1009) (f64.const -0x1.dd275335c6f4p-957)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.no_distribute" (f64.const -0x1.074f372347051p-334) (f64.const -0x1.aaeef661f4c96p-282) (f64.const -0x1.9bd34abe8696dp+479)) (f64.const 0x1.5767029593e1fp+198)) +(assert_return (invoke "f64.no_distribute" (f64.const -0x1.c4ded58a6f389p-289) (f64.const 0x1.ba6fdef5d59c9p-260) (f64.const -0x1.c1201c0470205p-253)) (f64.const -0x1.841ada2e0f183p-512)) +(assert_return (invoke "f64.no_distribute" (f64.const 0x1.9d3688f8e375ap-608) (f64.const 0x1.bf91311588256p-579) (f64.const -0x1.1605a6b5d5ff8p+489)) (f64.const -0x1.e6118ca76af52p-90)) + +;; Test that x*(y/z) is not folded to (x*y)/z. + +(module + (func (export "f32.no_regroup_div_mul") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.mul (get_local $x) (f32.div (get_local $y) (get_local $z)))) + (func (export "f64.no_regroup_div_mul") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.mul (get_local $x) (f64.div (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x1.2844cap-63)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x0p+0)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.792258p+118)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df2p-89)) +(assert_return (invoke "f32.no_regroup_div_mul" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -0x1.47d0eap+66)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2dp+99)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const inf)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -0x1.926fa3cacc651p+255)) +(assert_return (invoke "f64.no_regroup_div_mul" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x1.38d55f56406dp-639)) + +;; Test that (x*y)/z is not folded to x*(y/z). + +(module + (func (export "f32.no_regroup_mul_div") (param $x f32) (param $y f32) (param $z f32) (result f32) + (f32.div (f32.mul (get_local $x) (get_local $y)) (get_local $z))) + (func (export "f64.no_regroup_mul_div") (param $x f64) (param $y f64) (param $z f64) (result f64) + (f64.div (f64.mul (get_local $x) (get_local $y)) (get_local $z))) +) + +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.2d14a6p-115) (f32.const -0x1.575a6cp-64) (f32.const 0x1.5cee0ep-116)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.454738p+91) (f32.const -0x1.b28a66p-115) (f32.const -0x1.f53908p+72)) (f32.const -0x1.1a00e8p-96)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.6be56ep+16) (f32.const -0x1.b46fc6p-21) (f32.const -0x1.a51df6p-123)) (f32.const -0x1.79225ap+118)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const -0x1.c343f8p-94) (f32.const 0x1.e4d906p+73) (f32.const 0x1.be69f8p+68)) (f32.const -0x1.ea1df4p-89)) +(assert_return (invoke "f32.no_regroup_mul_div" (f32.const 0x1.c6ae76p+112) (f32.const 0x1.fc953cp+24) (f32.const -0x1.60b3e8p+71)) (f32.const -inf)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.3c04b815e30bp-423) (f64.const -0x1.379646fd98127p-119) (f64.const 0x1.bddb158506031p-642)) (f64.const -0x1.b9b3301f2dd2ep+99)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.46b3a402f86d5p+337) (f64.const 0x1.6fbf1b9e1798dp-447) (f64.const -0x1.bd9704a5a6a06p+797)) (f64.const -0x1.0da0b6328e09p-907)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.6c9765bb4347fp-479) (f64.const 0x1.a4af42e34a141p+902) (f64.const 0x1.d2dde70eb68f9p-448)) (f64.const 0x1.4886b6d9a9a79p+871)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const -0x1.706023645be72p+480) (f64.const -0x1.6c229f7d9101dp+611) (f64.const -0x1.4d50fa68d3d9ep+836)) (f64.const -inf)) +(assert_return (invoke "f64.no_regroup_mul_div" (f64.const 0x1.8cc63d8caf4c7p-599) (f64.const 0x1.8671ac4c35753p-878) (f64.const -0x1.ef35b1695e659p-838)) (f64.const -0x0p+0)) + +;; Test that x+y+z+w is not reassociated. + +(module + (func (export "f32.no_reassociate_add") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) + (f32.add (f32.add (f32.add (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) + (func (export "f64.no_reassociate_add") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) + (f64.add (f64.add (f64.add (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) +) + +(assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.5f7ddcp+44) (f32.const 0x1.854e1p+34) (f32.const -0x1.b2068cp+47) (f32.const -0x1.209692p+41)) (f32.const -0x1.e26c76p+47)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.da3b78p-9) (f32.const -0x1.4312fap-7) (f32.const 0x1.0395e6p-4) (f32.const -0x1.6d5ea6p-7)) (f32.const 0x1.78b31ap-5)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const -0x1.fdb93ap+34) (f32.const -0x1.b6fce6p+41) (f32.const 0x1.c131d8p+44) (f32.const 0x1.8835b6p+38)) (f32.const 0x1.8ff3a2p+44)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.1739fcp+47) (f32.const 0x1.a4b186p+49) (f32.const -0x1.0c623cp+35) (f32.const 0x1.16a102p+51)) (f32.const 0x1.913ff6p+51)) +(assert_return (invoke "f32.no_reassociate_add" (f32.const 0x1.733cfap+108) (f32.const -0x1.38d30cp+108) (f32.const 0x1.2f5854p+105) (f32.const -0x1.ccb058p+94)) (f32.const 0x1.813716p+106)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.697a4d9ff19a6p+841) (f64.const 0x1.b305466238397p+847) (f64.const 0x1.e0b2d9bfb4e72p+855) (f64.const -0x1.6e1f3ae2b06bbp+857)) (f64.const -0x1.eb0e5936f087ap+856)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const 0x1.00ef6746b30e1p-543) (f64.const 0x1.cc1cfafdf3fe1p-544) (f64.const -0x1.f7726df3ecba6p-543) (f64.const -0x1.b26695f99d307p-594)) (f64.const -0x1.074892e3fad76p-547)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.e807b3bd6d854p+440) (f64.const 0x1.cedae26c2c5fp+407) (f64.const -0x1.00ab6e1442541p+437) (f64.const 0x1.28538a55997bdp+397)) (f64.const -0x1.040e90bf871ebp+441)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ba2b6f35a2402p-317) (f64.const 0x1.ad1c3fea7cd9ep-307) (f64.const -0x1.93aace2bf1261p-262) (f64.const 0x1.9fddbe472847ep-260)) (f64.const 0x1.3af30abc2c01bp-260)) +(assert_return (invoke "f64.no_reassociate_add" (f64.const -0x1.ccb9c6092fb1dp+641) (f64.const -0x1.4b7c28c108244p+614) (f64.const 0x1.8a7cefef4bde1p+646) (f64.const -0x1.901b28b08b482p+644)) (f64.const 0x1.1810579194126p+646)) + +;; Test that x*y*z*w is not reassociated. + +(module + (func (export "f32.no_reassociate_mul") (param $x f32) (param $y f32) (param $z f32) (param $w f32) (result f32) + (f32.mul (f32.mul (f32.mul (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) + (func (export "f64.no_reassociate_mul") (param $x f64) (param $y f64) (param $z f64) (param $w f64) (result f64) + (f64.mul (f64.mul (f64.mul (get_local $x) (get_local $y)) (get_local $z)) (get_local $w))) +) + +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.950ba8p-116) (f32.const 0x1.efdacep-33) (f32.const -0x1.5f9bcp+102) (f32.const 0x1.f04508p-56)) (f32.const -0x1.ff356ep-101)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.5990aep-56) (f32.const -0x1.7dfb04p+102) (f32.const -0x1.4f774ap-125) (f32.const -0x1.595fe6p+70)) (f32.const -0x1.c7c8fcp-8)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.6ad9a4p-48) (f32.const -0x1.9138aap+55) (f32.const -0x1.4a774ep-40) (f32.const 0x1.1ff08p+76)) (f32.const 0x1.9cd8ecp+44)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const 0x1.e1caecp-105) (f32.const 0x1.af0dd2p+77) (f32.const -0x1.016eep+56) (f32.const -0x1.ab70d6p+59)) (f32.const 0x1.54870ep+89)) +(assert_return (invoke "f32.no_reassociate_mul" (f32.const -0x1.3b1dcp-99) (f32.const 0x1.4e5a34p-49) (f32.const -0x1.38ba5ap+3) (f32.const 0x1.7fb8eep+59)) (f32.const 0x1.5bbf98p-85)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const -0x1.e7842ab7181p-667) (f64.const -0x1.fabf40ceeceafp+990) (f64.const -0x1.1a38a825ab01ap-376) (f64.const -0x1.27e8ea469b14fp+664)) (f64.const 0x1.336eb428af4f3p+613)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.4ca2292a6acbcp+454) (f64.const 0x1.6ffbab850089ap-516) (f64.const -0x1.547c32e1f5b93p-899) (f64.const -0x1.c7571d9388375p+540)) (f64.const 0x1.1ac796954fc1p-419)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.73881a52e0401p-501) (f64.const -0x1.1b68dd9efb1a7p+788) (f64.const 0x1.d1c5e6a3eb27cp-762) (f64.const -0x1.56cb2fcc7546fp+88)) (f64.const 0x1.f508db92c34efp-386)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.2efa87859987cp+692) (f64.const 0x1.68e4373e241p-423) (f64.const 0x1.4e2d0fb383a57p+223) (f64.const -0x1.301d3265c737bp-23)) (f64.const -0x1.4b2b6c393f30cp+470)) +(assert_return (invoke "f64.no_reassociate_mul" (f64.const 0x1.1013f7498b95fp-234) (f64.const 0x1.d2d1c36fff138p-792) (f64.const -0x1.cbf1824ea7bfdp+728) (f64.const -0x1.440da9c8b836dp-599)) (f64.const 0x1.1a16512881c91p-895)) + +;; Test that x/0 is not folded away. + +(module + (func (export "f32.no_fold_div_0") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const 0.0))) + (func (export "f64.no_fold_div_0") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const 0.0))) +) + +(assert_return (invoke "f32.no_fold_div_0" (f32.const 1.0)) (f32.const inf)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const -1.0)) (f32.const -inf)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const inf)) (f32.const inf)) +(assert_return (invoke "f32.no_fold_div_0" (f32.const -inf)) (f32.const -inf)) +(assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const 0))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const -0))) +(assert_return_arithmetic_nan (invoke "f32.no_fold_div_0" (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_0" (f32.const nan))) +(assert_return (invoke "f64.no_fold_div_0" (f64.const 1.0)) (f64.const inf)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const -1.0)) (f64.const -inf)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const inf)) (f64.const inf)) +(assert_return (invoke "f64.no_fold_div_0" (f64.const -inf)) (f64.const -inf)) +(assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const 0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const -0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_0" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_div_0" (f64.const nan:0x4000000000000))) + +;; Test that x/-0 is not folded away. + +(module + (func (export "f32.no_fold_div_neg0") (param $x f32) (result f32) + (f32.div (get_local $x) (f32.const -0.0))) + (func (export "f64.no_fold_div_neg0") (param $x f64) (result f64) + (f64.div (get_local $x) (f64.const -0.0))) +) + +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const 1.0)) (f32.const -inf)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const -1.0)) (f32.const inf)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const inf)) (f32.const -inf)) +(assert_return (invoke "f32.no_fold_div_neg0" (f32.const -inf)) (f32.const inf)) +(assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const 0))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const -0))) +(assert_return_arithmetic_nan (invoke "f32.no_fold_div_neg0" (f32.const nan:0x200000))) +(assert_return_canonical_nan (invoke "f32.no_fold_div_neg0" (f32.const nan))) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const 1.0)) (f64.const -inf)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const -1.0)) (f64.const inf)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const inf)) (f64.const -inf)) +(assert_return (invoke "f64.no_fold_div_neg0" (f64.const -inf)) (f64.const inf)) +(assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const 0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const -0))) +(assert_return_canonical_nan (invoke "f64.no_fold_div_neg0" (f64.const nan))) +(assert_return_arithmetic_nan (invoke "f64.no_fold_div_neg0" (f64.const nan:0x4000000000000))) + +;; Test that sqrt(x*x+y*y) is not folded to hypot. + +(module + (func (export "f32.no_fold_to_hypot") (param $x f32) (param $y f32) (result f32) + (f32.sqrt (f32.add (f32.mul (get_local $x) (get_local $x)) + (f32.mul (get_local $y) (get_local $y))))) + (func (export "f64.no_fold_to_hypot") (param $x f64) (param $y f64) (result f64) + (f64.sqrt (f64.add (f64.mul (get_local $x) (get_local $x)) + (f64.mul (get_local $y) (get_local $y))))) +) + +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.c2f338p-81) (f32.const 0x1.401b5ep-68)) (f32.const 0x1.401cccp-68)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.c38d1p-71) (f32.const -0x1.359ddp-107)) (f32.const 0x1.c36a62p-71)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.99e0cap-114) (f32.const -0x1.ed0c6cp-69)) (f32.const 0x1.ed0e48p-69)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const -0x1.1b6ceap+5) (f32.const 0x1.5440bep+17)) (f32.const 0x1.5440cp+17)) +(assert_return (invoke "f32.no_fold_to_hypot" (f32.const 0x1.8f019ep-76) (f32.const -0x1.182308p-71)) (f32.const 0x1.17e2bcp-71)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.1a0ac4f7c8711p-636) (f64.const 0x1.1372ebafff551p-534)) (f64.const 0x1.13463fa37014ep-534)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.b793512167499p+395) (f64.const -0x1.11cbc52af4c36p+410)) (f64.const 0x1.11cbc530783a2p+410)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.76777f44ff40bp-536) (f64.const -0x1.c3896e4dc1fbp-766)) (f64.const 0x1.8p-536)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const -0x1.889ac72cc6b5dp-521) (f64.const 0x1.8d7084e659f3bp-733)) (f64.const 0x1.889ac72ca843ap-521)) +(assert_return (invoke "f64.no_fold_to_hypot" (f64.const 0x1.5ee588c02cb08p-670) (f64.const -0x1.05ce25788d9ecp-514)) (f64.const 0x1.05ce25788d9dfp-514)) + +;; Test that 1.0/x isn't approximated. + +(module + (func (export "f32.no_approximate_reciprocal") (param $x f32) (result f32) + (f32.div (f32.const 1.0) (get_local $x))) +) + +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.2900b6p-10)) (f32.const -0x1.b950d4p+9)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.e7212p+127)) (f32.const 0x1.0d11f8p-128)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.42a466p-93)) (f32.const -0x1.963ee6p+92)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const 0x1.5d0c32p+76)) (f32.const 0x1.778362p-77)) +(assert_return (invoke "f32.no_approximate_reciprocal" (f32.const -0x1.601de2p-82)) (f32.const -0x1.743d7ep+81)) + +;; Test that 1.0/sqrt(x) isn't approximated or fused. + +(module + (func (export "f32.no_approximate_reciprocal_sqrt") (param $x f32) (result f32) + (f32.div (f32.const 1.0) (f32.sqrt (get_local $x)))) + (func (export "f64.no_fuse_reciprocal_sqrt") (param $x f64) (result f64) + (f64.div (f64.const 1.0) (f64.sqrt (get_local $x)))) +) + +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.6af12ap-43)) (f32.const 0x1.300ed4p+21)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.e82fc6p-8)) (f32.const 0x1.72c376p+3)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.b9fa9cp-66)) (f32.const 0x1.85a9bap+32)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.f4f546p-44)) (f32.const 0x1.6e01c2p+21)) +(assert_return (invoke "f32.no_approximate_reciprocal_sqrt" (f32.const 0x1.5da7aap-86)) (f32.const 0x1.b618cap+42)) + +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.1568a63b55fa3p+889)) (f64.const 0x1.5bc9c74c9952p-445)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.239fcd0939cafp+311)) (f64.const 0x1.5334a922b4818p-156)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.6e36a24e11054p+104)) (f64.const 0x1.ac13f20977f29p-53)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.23ee173219f83p+668)) (f64.const 0x1.df753e055862dp-335)) +(assert_return (invoke "f64.no_fuse_reciprocal_sqrt" (f64.const 0x1.b30f74caf9babp+146)) (f64.const 0x1.88bfc3d1764a9p-74)) + +;; Test that sqrt(1.0/x) isn't approximated. + +(module + (func (export "f32.no_approximate_sqrt_reciprocal") (param $x f32) (result f32) + (f32.sqrt (f32.div (f32.const 1.0) (get_local $x)))) +) + +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.a4c986p+60)) (f32.const 0x1.8f5ac6p-31)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.50511ep-9)) (f32.const 0x1.3bdd46p+4)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.125ec2p+69)) (f32.const 0x1.5db572p-35)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.ba4c5p+13)) (f32.const 0x1.136f16p-7)) +(assert_return (invoke "f32.no_approximate_sqrt_reciprocal" (f32.const 0x1.4a5be2p+104)) (f32.const 0x1.c2b5bp-53)) + +;; Test that converting i32/i64 to f32/f64 and back isn't folded away. + +(module + (func (export "i32.no_fold_f32_s") (param i32) (result i32) + (i32.trunc_s/f32 (f32.convert_s/i32 (get_local 0)))) + (func (export "i32.no_fold_f32_u") (param i32) (result i32) + (i32.trunc_u/f32 (f32.convert_u/i32 (get_local 0)))) + (func (export "i64.no_fold_f64_s") (param i64) (result i64) + (i64.trunc_s/f64 (f64.convert_s/i64 (get_local 0)))) + (func (export "i64.no_fold_f64_u") (param i64) (result i64) + (i64.trunc_u/f64 (f64.convert_u/i64 (get_local 0)))) +) + +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000000)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0x1000001)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_s" (i32.const 0xf0000010)) (i32.const 0xf0000010)) + +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000000)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0x1000001)) (i32.const 0x1000000)) +(assert_return (invoke "i32.no_fold_f32_u" (i32.const 0xf0000010)) (i32.const 0xf0000000)) + +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_s" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000400)) + +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000000)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0x20000000000001)) (i64.const 0x20000000000000)) +(assert_return (invoke "i64.no_fold_f64_u" (i64.const 0xf000000000000400)) (i64.const 0xf000000000000000)) + +;; Test that x+y-y is not folded to x. + +(module + (func (export "f32.no_fold_add_sub") (param $x f32) (param $y f32) (result f32) + (f32.sub (f32.add (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_add_sub") (param $x f64) (param $y f64) (result f64) + (f64.sub (f64.add (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.b553e4p-47) (f32.const -0x1.67db2cp-26)) (f32.const 0x1.cp-47)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.a884dp-23) (f32.const 0x1.f2ae1ep-19)) (f32.const -0x1.a884ep-23)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.fc04fp+82) (f32.const -0x1.65403ap+101)) (f32.const -0x1p+83)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const 0x1.870fa2p-78) (f32.const 0x1.c54916p-56)) (f32.const 0x1.8p-78)) +(assert_return (invoke "f32.no_fold_add_sub" (f32.const -0x1.17e966p-108) (f32.const -0x1.5fa61ap-84)) (f32.const -0x1p-107)) + +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1053ea172dba8p-874) (f64.const 0x1.113c413408ac8p-857)) (f64.const -0x1.1053ea172p-874)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const 0x1.e377d54807972p-546) (f64.const 0x1.040a0a4d1ff7p-526)) (f64.const 0x1.e377d548p-546)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.75f53cd926b62p-30) (f64.const -0x1.66b176e602bb5p-3)) (f64.const -0x1.75f53dp-30)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.c450ff28332ap-341) (f64.const 0x1.15a5855023baep-305)) (f64.const -0x1.c451p-341)) +(assert_return (invoke "f64.no_fold_add_sub" (f64.const -0x1.1ad4a596d3ea8p-619) (f64.const -0x1.17d81a41c0ea8p-588)) (f64.const -0x1.1ad4a8p-619)) + +;; Test that x-y+y is not folded to x. + +(module + (func (export "f32.no_fold_sub_add") (param $x f32) (param $y f32) (result f32) + (f32.add (f32.sub (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_sub_add") (param $x f64) (param $y f64) (result f64) + (f64.add (f64.sub (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.523cb8p+9) (f32.const 0x1.93096cp+8)) (f32.const -0x1.523cbap+9)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const -0x1.a31a1p-111) (f32.const 0x1.745efp-95)) (f32.const -0x1.a4p-111)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.3d5328p+26) (f32.const 0x1.58567p+35)) (f32.const 0x1.3d54p+26)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.374e26p-39) (f32.const -0x1.66a5p-27)) (f32.const 0x1.374p-39)) +(assert_return (invoke "f32.no_fold_sub_add" (f32.const 0x1.320facp-3) (f32.const -0x1.ac069ap+14)) (f32.const 0x1.34p-3)) + +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.8f92aad2c9b8dp+255) (f64.const -0x1.08cd4992266cbp+259)) (f64.const 0x1.8f92aad2c9b9p+255)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.5aaff55742c8bp-666) (f64.const 0x1.8f5f47181f46dp-647)) (f64.const 0x1.5aaff5578p-666)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.21bc52967a98dp+251) (f64.const -0x1.fcffaa32d0884p+300)) (f64.const 0x1.2p+251)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.9c78361f47374p-26) (f64.const -0x1.69d69f4edc61cp-13)) (f64.const 0x1.9c78361f48p-26)) +(assert_return (invoke "f64.no_fold_sub_add" (f64.const 0x1.4dbe68e4afab2p-367) (f64.const -0x1.dc24e5b39cd02p-361)) (f64.const 0x1.4dbe68e4afacp-367)) + +;; Test that x*y/y is not folded to x. + +(module + (func (export "f32.no_fold_mul_div") (param $x f32) (param $y f32) (result f32) + (f32.div (f32.mul (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_mul_div") (param $x f64) (param $y f64) (result f64) + (f64.div (f64.mul (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.cd859ap+54) (f32.const 0x1.6ca936p-47)) (f32.const -0x1.cd8598p+54)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.0b56b8p-26) (f32.const 0x1.48264cp-106)) (f32.const -0x1.0b56a4p-26)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.e7555cp-48) (f32.const -0x1.9161cp+48)) (f32.const -0x1.e7555ap-48)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const 0x1.aaa50ep+52) (f32.const -0x1.dfb39ep+60)) (f32.const 0x1.aaa50cp+52)) +(assert_return (invoke "f32.no_fold_mul_div" (f32.const -0x1.2b7dfap-92) (f32.const -0x1.7c4ca6p-37)) (f32.const -0x1.2b7dfep-92)) + +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.3d79ff4118a1ap-837) (f64.const -0x1.b8b5dda31808cp-205)) (f64.const -0x1.3d79ff412263ep-837)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.f894d1ee6b3a4p+384) (f64.const 0x1.8c2606d03d58ap+585)) (f64.const 0x1.f894d1ee6b3a5p+384)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.a022260acc993p+238) (f64.const -0x1.5fbc128fc8e3cp-552)) (f64.const -0x1.a022260acc992p+238)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const 0x1.9d4b8ed174f54p-166) (f64.const 0x1.ee3d467aeeac6p-906)) (f64.const 0x1.8dcc95a053b2bp-166)) +(assert_return (invoke "f64.no_fold_mul_div" (f64.const -0x1.e95ea897cdcd4p+660) (f64.const -0x1.854d5df085f2ep-327)) (f64.const -0x1.e95ea897cdcd5p+660)) + +;; Test that x/y*y is not folded to x. + +(module + (func (export "f32.no_fold_div_mul") (param $x f32) (param $y f32) (result f32) + (f32.mul (f32.div (get_local $x) (get_local $y)) (get_local $y))) + (func (export "f64.no_fold_div_mul") (param $x f64) (param $y f64) (result f64) + (f64.mul (f64.div (get_local $x) (get_local $y)) (get_local $y))) +) + +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.dc6364p+38) (f32.const 0x1.d630ecp+29)) (f32.const -0x1.dc6362p+38)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.1f9836p-52) (f32.const -0x1.16c4e4p-18)) (f32.const -0x1.1f9838p-52)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.c5972cp-126) (f32.const -0x1.d6659ep+7)) (f32.const 0x1.c5980ep-126)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const -0x1.2e3a9ep-74) (f32.const -0x1.353994p+59)) (f32.const -0x1.2e3a4p-74)) +(assert_return (invoke "f32.no_fold_div_mul" (f32.const 0x1.d96b82p-98) (f32.const 0x1.95d908p+27)) (f32.const 0x1.d96b84p-98)) + +(assert_return (invoke "f64.no_fold_div_mul" (f64.const 0x1.d01f913a52481p-876) (f64.const -0x1.2cd0668b28344p+184)) (f64.const 0x1.d020daf71cdcp-876)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.81cb7d400918dp-714) (f64.const 0x1.7caa643586d6ep-53)) (f64.const -0x1.81cb7d400918ep-714)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.66904c97b5c8ep-145) (f64.const 0x1.5c3481592ad4cp+428)) (f64.const -0x1.66904c97b5c8dp-145)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.e75859d2f0765p-278) (f64.const -0x1.5f19b6ab497f9p+283)) (f64.const -0x1.e75859d2f0764p-278)) +(assert_return (invoke "f64.no_fold_div_mul" (f64.const -0x1.515fe9c3b5f5p+620) (f64.const 0x1.36be869c99f7ap+989)) (f64.const -0x1.515fe9c3b5f4fp+620)) + +;; Test that x/2*2 is not folded to x. + +(module + (func (export "f32.no_fold_div2_mul2") (param $x f32) (result f32) + (f32.mul (f32.div (get_local $x) (f32.const 2.0)) (f32.const 2.0))) + (func (export "f64.no_fold_div2_mul2") (param $x f64) (result f64) + (f64.mul (f64.div (get_local $x) (f64.const 2.0)) (f64.const 2.0))) +) + +(assert_return (invoke "f32.no_fold_div2_mul2" (f32.const 0x1.fffffep-126)) (f32.const 0x1p-125)) +(assert_return (invoke "f64.no_fold_div2_mul2" (f64.const 0x1.fffffffffffffp-1022)) (f64.const 0x1p-1021)) + +;; Test that promote(demote(x)) is not folded to x. + +(module + (func (export "no_fold_demote_promote") (param $x f64) (result f64) + (f64.promote/f32 (f32.demote/f64 (get_local $x)))) +) + +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.dece272390f5dp-133)) (f64.const -0x1.decep-133)) +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.19e6c79938a6fp-85)) (f64.const -0x1.19e6c8p-85)) +(assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.49b297ec44dc1p+107)) (f64.const 0x1.49b298p+107)) +(assert_return (invoke "no_fold_demote_promote" (f64.const -0x1.74f5bd865163p-88)) (f64.const -0x1.74f5bep-88)) +(assert_return (invoke "no_fold_demote_promote" (f64.const 0x1.26d675662367ep+104)) (f64.const 0x1.26d676p+104)) + +;; Test that demote(promote(x)) is not folded to x, and aside from NaN is +;; bit-preserving. + +(module + (func (export "no_fold_promote_demote") (param $x f32) (result f32) + (f32.demote/f64 (f64.promote/f32 (get_local $x)))) +) + +;;(assert_return (invoke "no_fold_promote_demote" (f32.const nan:0x200000)) (f32.const nan:0x600000)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x0p+0)) (f32.const 0x0p+0)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x0p+0)) (f32.const -0x0p+0)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-149)) (f32.const 0x1p-149)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-149)) (f32.const -0x1p-149)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffcp-127)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffcp-127)) (f32.const -0x1.fffffcp-127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1p-126)) (f32.const 0x1p-126)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1p-126)) (f32.const -0x1p-126)) +(assert_return (invoke "no_fold_promote_demote" (f32.const 0x1.fffffep+127)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -0x1.fffffep+127)) (f32.const -0x1.fffffep+127)) +(assert_return (invoke "no_fold_promote_demote" (f32.const inf)) (f32.const inf)) +(assert_return (invoke "no_fold_promote_demote" (f32.const -inf)) (f32.const -inf)) + +;; Test that demote(x+promote(y)) is not folded to demote(x)+y. + +(module + (func (export "no_demote_mixed_add") (param $x f64) (param $y f32) (result f32) + (f32.demote/f64 (f64.add (get_local $x) (f64.promote/f32 (get_local $y))))) + (func (export "no_demote_mixed_add_commuted") (param $y f32) (param $x f64) (result f32) + (f32.demote/f64 (f64.add (f64.promote/f32 (get_local $y)) (get_local $x)))) +) + +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.f51a9d04854f9p-95) (f32.const 0x1.3f4e9cp-119)) (f32.const 0x1.f51a9ep-95)) +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.065b3d81ad8dp+37) (f32.const 0x1.758cd8p+38)) (f32.const 0x1.f8ba76p+38)) +(assert_return (invoke "no_demote_mixed_add" (f64.const 0x1.626c80963bd17p-119) (f32.const -0x1.9bbf86p-121)) (f32.const 0x1.f6f93ep-120)) +(assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.0d5110e3385bbp-20) (f32.const 0x1.096f4ap-29)) (f32.const -0x1.0ccc5ap-20)) +(assert_return (invoke "no_demote_mixed_add" (f64.const -0x1.73852db4e5075p-20) (f32.const -0x1.24e474p-41)) (f32.const -0x1.738536p-20)) + +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.3f4e9cp-119) (f64.const 0x1.f51a9d04854f9p-95)) (f32.const 0x1.f51a9ep-95)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.758cd8p+38) (f64.const 0x1.065b3d81ad8dp+37)) (f32.const 0x1.f8ba76p+38)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.9bbf86p-121) (f64.const 0x1.626c80963bd17p-119)) (f32.const 0x1.f6f93ep-120)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const 0x1.096f4ap-29) (f64.const -0x1.0d5110e3385bbp-20)) (f32.const -0x1.0ccc5ap-20)) +(assert_return (invoke "no_demote_mixed_add_commuted" (f32.const -0x1.24e474p-41) (f64.const -0x1.73852db4e5075p-20)) (f32.const -0x1.738536p-20)) + +;; Test that demote(x-promote(y)) is not folded to demote(x)-y. + +(module + (func (export "no_demote_mixed_sub") (param $x f64) (param $y f32) (result f32) + (f32.demote/f64 (f64.sub (get_local $x) (f64.promote/f32 (get_local $y))))) +) + +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a0a183220e9b1p+82) (f32.const 0x1.c5acf8p+61)) (f32.const 0x1.a0a174p+82)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.6e2c5ac39f63ep+30) (f32.const 0x1.d48ca4p+17)) (f32.const -0x1.6e3bp+30)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const -0x1.98c74350dde6ap+6) (f32.const 0x1.9d69bcp-12)) (f32.const -0x1.98c7aap+6)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.0459f34091dbfp-54) (f32.const 0x1.61ad08p-71)) (f32.const 0x1.045942p-54)) +(assert_return (invoke "no_demote_mixed_sub" (f64.const 0x1.a7498dca3fdb7p+14) (f32.const 0x1.ed21c8p+15)) (f32.const -0x1.197d02p+15)) + +;; Test that converting between integer and float and back isn't folded away. + +(module + (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $x f32) (result f32) + (f32.convert_s/i32 (i32.trunc_s/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $x f32) (result f32) + (f32.convert_s/i32 (i32.trunc_u/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $x f32) (result f32) + (f32.convert_u/i32 (i32.trunc_s/f32 (get_local $x)))) + (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $x f32) (result f32) + (f32.convert_u/i32 (i32.trunc_u/f32 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $x f64) (result f64) + (f64.convert_s/i32 (i32.trunc_s/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $x f64) (result f64) + (f64.convert_s/i32 (i32.trunc_u/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $x f64) (result f64) + (f64.convert_u/i32 (i32.trunc_s/f64 (get_local $x)))) + (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $x f64) (result f64) + (f64.convert_u/i32 (i32.trunc_u/f64 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $x f32) (result f32) + (f32.convert_s/i64 (i64.trunc_s/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $x f32) (result f32) + (f32.convert_s/i64 (i64.trunc_u/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $x f32) (result f32) + (f32.convert_u/i64 (i64.trunc_s/f32 (get_local $x)))) + (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $x f32) (result f32) + (f32.convert_u/i64 (i64.trunc_u/f32 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $x f64) (result f64) + (f64.convert_s/i64 (i64.trunc_s/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $x f64) (result f64) + (f64.convert_s/i64 (i64.trunc_u/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $x f64) (result f64) + (f64.convert_u/i64 (i64.trunc_s/f64 (get_local $x)))) + (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $x f64) (result f64) + (f64.convert_u/i64 (i64.trunc_u/f64 (get_local $x)))) +) + +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+32)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i32.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) + +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1.fffffffep+31)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i32.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) + +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_s" (f32.const -1.5)) (f32.const -1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_s" (f32.const -0.5)) (f32.const 0.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_s_convert_u" (f32.const -1.5)) (f32.const 0x1p+64)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const 1.5)) (f32.const 1.0)) +(assert_return (invoke "f32.i64.no_fold_trunc_u_convert_u" (f32.const -0.5)) (f32.const 0.0)) + +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_s" (f64.const -1.5)) (f64.const -1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_s" (f64.const -0.5)) (f64.const 0.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_s_convert_u" (f64.const -1.5)) (f64.const 0x1p+64)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const 1.5)) (f64.const 1.0)) +(assert_return (invoke "f64.i64.no_fold_trunc_u_convert_u" (f64.const -0.5)) (f64.const 0.0)) + +;; Test that dividing by a loop-invariant constant isn't optimized to be a +;; multiplication by a reciprocal, which would be particularly tempting since +;; the reciprocal computation could be hoisted. + +(module + (memory 1 1) + (func (export "init") (param $i i32) (param $x f32) (f32.store (get_local $i) (get_local $x))) + + (func (export "run") (param $n i32) (param $z f32) + (local $i i32) + (block $exit + (loop $cont + (f32.store + (get_local $i) + (f32.div (f32.load (get_local $i)) (get_local $z)) + ) + (set_local $i (i32.add (get_local $i) (i32.const 4))) + (br_if $cont (i32.lt_u (get_local $i) (get_local $n))) + ) + ) + ) + + (func (export "check") (param $i i32) (result f32) (f32.load (get_local $i))) +) + +(invoke "init" (i32.const 0) (f32.const 15.1)) +(invoke "init" (i32.const 4) (f32.const 15.2)) +(invoke "init" (i32.const 8) (f32.const 15.3)) +(invoke "init" (i32.const 12) (f32.const 15.4)) +(assert_return (invoke "check" (i32.const 0)) (f32.const 15.1)) +(assert_return (invoke "check" (i32.const 4)) (f32.const 15.2)) +(assert_return (invoke "check" (i32.const 8)) (f32.const 15.3)) +(assert_return (invoke "check" (i32.const 12)) (f32.const 15.4)) +(invoke "run" (i32.const 16) (f32.const 3.0)) +(assert_return (invoke "check" (i32.const 0)) (f32.const 0x1.422222p+2)) +(assert_return (invoke "check" (i32.const 4)) (f32.const 0x1.444444p+2)) +(assert_return (invoke "check" (i32.const 8)) (f32.const 0x1.466666p+2)) +(assert_return (invoke "check" (i32.const 12)) (f32.const 0x1.488888p+2)) + +(module + (memory 1 1) + (func (export "init") (param $i i32) (param $x f64) (f64.store (get_local $i) (get_local $x))) + + (func (export "run") (param $n i32) (param $z f64) + (local $i i32) + (block $exit + (loop $cont + (f64.store + (get_local $i) + (f64.div (f64.load (get_local $i)) (get_local $z)) + ) + (set_local $i (i32.add (get_local $i) (i32.const 8))) + (br_if $cont (i32.lt_u (get_local $i) (get_local $n))) + ) + ) + ) + + (func (export "check") (param $i i32) (result f64) (f64.load (get_local $i))) +) + +(invoke "init" (i32.const 0) (f64.const 15.1)) +(invoke "init" (i32.const 8) (f64.const 15.2)) +(invoke "init" (i32.const 16) (f64.const 15.3)) +(invoke "init" (i32.const 24) (f64.const 15.4)) +(assert_return (invoke "check" (i32.const 0)) (f64.const 15.1)) +(assert_return (invoke "check" (i32.const 8)) (f64.const 15.2)) +(assert_return (invoke "check" (i32.const 16)) (f64.const 15.3)) +(assert_return (invoke "check" (i32.const 24)) (f64.const 15.4)) +(invoke "run" (i32.const 32) (f64.const 3.0)) +(assert_return (invoke "check" (i32.const 0)) (f64.const 0x1.4222222222222p+2)) +(assert_return (invoke "check" (i32.const 8)) (f64.const 0x1.4444444444444p+2)) +(assert_return (invoke "check" (i32.const 16)) (f64.const 0x1.4666666666667p+2)) +(assert_return (invoke "check" (i32.const 24)) (f64.const 0x1.4888888888889p+2)) + +;; Test that ult/ugt/etc. aren't folded to olt/ogt/etc. + +(module + (func (export "f32.ult") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.ge (get_local $x) (get_local $y)))) + (func (export "f32.ule") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.gt (get_local $x) (get_local $y)))) + (func (export "f32.ugt") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.le (get_local $x) (get_local $y)))) + (func (export "f32.uge") (param $x f32) (param $y f32) (result i32) (i32.eqz (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f64.ult") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.ge (get_local $x) (get_local $y)))) + (func (export "f64.ule") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.gt (get_local $x) (get_local $y)))) + (func (export "f64.ugt") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.le (get_local $x) (get_local $y)))) + (func (export "f64.uge") (param $x f64) (param $y f64) (result i32) (i32.eqz (f64.lt (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.ult" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) +(assert_return (invoke "f32.ult" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 3.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const 3.0)) (i32.const 1)) +(assert_return (invoke "f32.ule" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.ugt" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 2.0)) (i32.const 0)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) +(assert_return (invoke "f32.ugt" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 3.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 2.0)) (i32.const 1)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const 3.0)) (i32.const 0)) +(assert_return (invoke "f32.uge" (f32.const 2.0) (f32.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ult" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) +(assert_return (invoke "f64.ult" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 3.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const 3.0)) (i32.const 1)) +(assert_return (invoke "f64.ule" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.ugt" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 2.0)) (i32.const 0)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) +(assert_return (invoke "f64.ugt" (f64.const 2.0) (f64.const nan)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 3.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 2.0)) (i32.const 1)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const 3.0)) (i32.const 0)) +(assert_return (invoke "f64.uge" (f64.const 2.0) (f64.const nan)) (i32.const 1)) + +;; Test that x= y+z is not optimized to x >= y (monotonicity). +;; http://cs.nyu.edu/courses/spring13/CSCI-UA.0201-003/lecture6.pdf + +(module + (func (export "f32.no_fold_add_le_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) + (f32.le (f32.add (get_local $x) (get_local $z)) (f32.add (get_local $y) (get_local $z)))) + + (func (export "f32.no_fold_add_ge_monotonicity") (param $x f32) (param $y f32) (param $z f32) (result i32) + (f32.ge (f32.add (get_local $x) (get_local $z)) (f32.add (get_local $y) (get_local $z)))) + + (func (export "f64.no_fold_add_le_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) + (f64.le (f64.add (get_local $x) (get_local $z)) (f64.add (get_local $y) (get_local $z)))) + + (func (export "f64.no_fold_add_ge_monotonicity") (param $x f64) (param $y f64) (param $z f64) (result i32) + (f64.ge (f64.add (get_local $x) (get_local $z)) (f64.add (get_local $y) (get_local $z)))) +) + +(assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const 0.0) (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_fold_add_le_monotonicity" (f32.const inf) (f32.const -inf) (f32.const inf)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const 0.0) (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_fold_add_le_monotonicity" (f64.const inf) (f64.const -inf) (f64.const inf)) (i32.const 0)) + +;; Test that !(x < y) and friends are not optimized to x >= y and friends. + +(module + (func (export "f32.not_lt") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f32.not_le") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.le (get_local $x) (get_local $y)))) + + (func (export "f32.not_gt") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.gt (get_local $x) (get_local $y)))) + + (func (export "f32.not_ge") (param $x f32) (param $y f32) (result i32) + (i32.eqz (f32.ge (get_local $x) (get_local $y)))) + + (func (export "f64.not_lt") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.lt (get_local $x) (get_local $y)))) + + (func (export "f64.not_le") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.le (get_local $x) (get_local $y)))) + + (func (export "f64.not_gt") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.gt (get_local $x) (get_local $y)))) + + (func (export "f64.not_ge") (param $x f64) (param $y f64) (result i32) + (i32.eqz (f64.ge (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.not_lt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_le" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_gt" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f32.not_ge" (f32.const nan) (f32.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_lt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_le" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_gt" (f64.const nan) (f64.const 0.0)) (i32.const 1)) +(assert_return (invoke "f64.not_ge" (f64.const nan) (f64.const 0.0)) (i32.const 1)) + +;; Test that a method for approximating a "machine epsilon" produces the expected +;; approximation. +;; http://blogs.mathworks.com/cleve/2014/07/07/floating-point-numbers/#24cb4f4d-b8a9-4c19-b22b-9d2a9f7f3812 + +(module + (func (export "f32.epsilon") (result f32) + (f32.sub (f32.const 1.0) (f32.mul (f32.const 3.0) (f32.sub (f32.div (f32.const 4.0) (f32.const 3.0)) (f32.const 1.0))))) + + (func (export "f64.epsilon") (result f64) + (f64.sub (f64.const 1.0) (f64.mul (f64.const 3.0) (f64.sub (f64.div (f64.const 4.0) (f64.const 3.0)) (f64.const 1.0))))) +) + +(assert_return (invoke "f32.epsilon") (f32.const -0x1p-23)) +(assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) + +;; Test that a method for computing a "machine epsilon" produces the expected +;; result. +;; https://www.math.utah.edu/~beebe/software/ieee/ + +(module + (func (export "f32.epsilon") (result f32) + (local $x f32) + (local $result f32) + (set_local $x (f32.const 1)) + (loop $loop + (br_if $loop + (f32.gt + (f32.add + (tee_local $x + (f32.mul + (tee_local $result (get_local $x)) + (f32.const 0.5) + ) + ) + (f32.const 1) + ) + (f32.const 1) + ) + ) + ) + (get_local $result) + ) + + (func (export "f64.epsilon") (result f64) + (local $x f64) + (local $result f64) + (set_local $x (f64.const 1)) + (loop $loop + (br_if $loop + (f64.gt + (f64.add + (tee_local $x + (f64.mul + (tee_local $result (get_local $x)) + (f64.const 0.5) + ) + ) + (f64.const 1) + ) + (f64.const 1) + ) + ) + ) + (get_local $result) + ) +) + +(assert_return (invoke "f32.epsilon") (f32.const 0x1p-23)) +(assert_return (invoke "f64.epsilon") (f64.const 0x1p-52)) + +;; Test that floating-point numbers are not optimized as if they form a +;; trichotomy. + +(module + (func (export "f32.no_trichotomy_lt") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.lt (get_local $x) (get_local $y)) (f32.ge (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_le") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.le (get_local $x) (get_local $y)) (f32.gt (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_gt") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.gt (get_local $x) (get_local $y)) (f32.le (get_local $x) (get_local $y)))) + (func (export "f32.no_trichotomy_ge") (param $x f32) (param $y f32) (result i32) + (i32.or (f32.ge (get_local $x) (get_local $y)) (f32.lt (get_local $x) (get_local $y)))) + + (func (export "f64.no_trichotomy_lt") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.lt (get_local $x) (get_local $y)) (f64.ge (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_le") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.le (get_local $x) (get_local $y)) (f64.gt (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_gt") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.gt (get_local $x) (get_local $y)) (f64.le (get_local $x) (get_local $y)))) + (func (export "f64.no_trichotomy_ge") (param $x f64) (param $y f64) (result i32) + (i32.or (f64.ge (get_local $x) (get_local $y)) (f64.lt (get_local $x) (get_local $y)))) +) + +(assert_return (invoke "f32.no_trichotomy_lt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_le" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_gt" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f32.no_trichotomy_ge" (f32.const 0.0) (f32.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_lt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_le" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_gt" (f64.const 0.0) (f64.const nan)) (i32.const 0)) +(assert_return (invoke "f64.no_trichotomy_ge" (f64.const 0.0) (f64.const nan)) (i32.const 0)) + +;; Some test harnesses which can run this testsuite are unable to perform tests +;; of NaN bitpatterns. The following tests whether the underlying platform is +;; generally producing the kinds of NaNs expected. +(module + (func (export "f32.arithmetic_nan_bitpattern") + (param $x i32) (param $y i32) (result i32) + (i32.and (i32.reinterpret/f32 + (f32.div + (f32.reinterpret/i32 (get_local $x)) + (f32.reinterpret/i32 (get_local $y)))) + (i32.const 0x7fc00000))) + (func (export "f32.canonical_nan_bitpattern") + (param $x i32) (param $y i32) (result i32) + (i32.and (i32.reinterpret/f32 + (f32.div + (f32.reinterpret/i32 (get_local $x)) + (f32.reinterpret/i32 (get_local $y)))) + (i32.const 0x7fffffff))) + (func (export "f32.nonarithmetic_nan_bitpattern") + (param $x i32) (result i32) + (i32.reinterpret/f32 (f32.neg (f32.reinterpret/i32 (get_local $x))))) + + (func (export "f64.arithmetic_nan_bitpattern") + (param $x i64) (param $y i64) (result i64) + (i64.and (i64.reinterpret/f64 + (f64.div + (f64.reinterpret/i64 (get_local $x)) + (f64.reinterpret/i64 (get_local $y)))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.canonical_nan_bitpattern") + (param $x i64) (param $y i64) (result i64) + (i64.and (i64.reinterpret/f64 + (f64.div + (f64.reinterpret/i64 (get_local $x)) + (f64.reinterpret/i64 (get_local $y)))) + (i64.const 0x7fffffffffffffff))) + (func (export "f64.nonarithmetic_nan_bitpattern") + (param $x i64) (result i64) + (i64.reinterpret/f64 (f64.neg (f64.reinterpret/i64 (get_local $x))))) + + ;; Versions of no_fold testcases that only care about NaN bitpatterns. + (func (export "f32.no_fold_sub_zero") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.sub (f32.reinterpret/i32 (get_local $x)) (f32.const 0.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_neg0_sub") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.sub (f32.const -0.0) (f32.reinterpret/i32 (get_local $x)))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_mul_one") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.mul (f32.reinterpret/i32 (get_local $x)) (f32.const 1.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_neg1_mul") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.mul (f32.const -1.0) (f32.reinterpret/i32 (get_local $x)))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_div_one") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.div (f32.reinterpret/i32 (get_local $x)) (f32.const 1.0))) + (i32.const 0x7fc00000))) + (func (export "f32.no_fold_div_neg1") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.div (f32.reinterpret/i32 (get_local $x)) (f32.const -1.0))) + (i32.const 0x7fc00000))) + (func (export "f64.no_fold_sub_zero") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.sub (f64.reinterpret/i64 (get_local $x)) (f64.const 0.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_neg0_sub") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.sub (f64.const -0.0) (f64.reinterpret/i64 (get_local $x)))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_mul_one") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.mul (f64.reinterpret/i64 (get_local $x)) (f64.const 1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_neg1_mul") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.mul (f64.const -1.0) (f64.reinterpret/i64 (get_local $x)))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_div_one") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.div (f64.reinterpret/i64 (get_local $x)) (f64.const 1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "f64.no_fold_div_neg1") (param $x i64) (result i64) + (i64.and (i64.reinterpret/f64 (f64.div (f64.reinterpret/i64 (get_local $x)) (f64.const -1.0))) + (i64.const 0x7ff8000000000000))) + (func (export "no_fold_promote_demote") (param $x i32) (result i32) + (i32.and (i32.reinterpret/f32 (f32.demote/f64 (f64.promote/f32 (f32.reinterpret/i32 (get_local $x))))) + (i32.const 0x7fc00000))) +) + +(assert_return (invoke "f32.arithmetic_nan_bitpattern" (i32.const 0x7f803210) (i32.const 0x7f803210)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0) (i32.const 0)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0x7fc00000)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0x7fc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.canonical_nan_bitpattern" (i32.const 0xffc00000) (i32.const 0xffc00000)) (i32.const 0x7fc00000)) +(assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7fc03210)) (i32.const 0xffc03210)) +(assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xffc03210)) (i32.const 0x7fc03210)) +(assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0x7f803210)) (i32.const 0xff803210)) +(assert_return (invoke "f32.nonarithmetic_nan_bitpattern" (i32.const 0xff803210)) (i32.const 0x7f803210)) +(assert_return (invoke "f64.arithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210) (i64.const 0x7ff0000000003210)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0) (i64.const 0)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0x7ff8000000000000)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0x7ff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.canonical_nan_bitpattern" (i64.const 0xfff8000000000000) (i64.const 0xfff8000000000000)) (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff8000000003210)) (i64.const 0xfff8000000003210)) +(assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff8000000003210)) (i64.const 0x7ff8000000003210)) +(assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0x7ff0000000003210)) (i64.const 0xfff0000000003210)) +(assert_return (invoke "f64.nonarithmetic_nan_bitpattern" (i64.const 0xfff0000000003210)) (i64.const 0x7ff0000000003210)) +;;(assert_return (invoke "f32.no_fold_sub_zero" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f32.no_fold_neg0_sub" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f32.no_fold_mul_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f32.no_fold_neg1_mul" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f32.no_fold_div_one" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f32.no_fold_div_neg1" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) +;;(assert_return (invoke "f64.no_fold_sub_zero" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "f64.no_fold_neg0_sub" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "f64.no_fold_mul_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "f64.no_fold_neg1_mul" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "f64.no_fold_div_one" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "f64.no_fold_div_neg1" (i64.const 0x7ff4000000000000)) (i64.const 0x7ff8000000000000)) +;;(assert_return (invoke "no_fold_promote_demote" (i32.const 0x7fa00000)) (i32.const 0x7fc00000)) + +;; Test that IEEE 754 double precision does, in fact, compute a certain dot +;; product correctly. + +(module + (func (export "dot_product_example") + (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) + (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) + (result f64) + (f64.add (f64.add (f64.add + (f64.mul (get_local $x0) (get_local $y0)) + (f64.mul (get_local $x1) (get_local $y1))) + (f64.mul (get_local $x2) (get_local $y2))) + (f64.mul (get_local $x3) (get_local $y3))) + ) + + (func (export "with_binary_sum_collapse") + (param $x0 f64) (param $x1 f64) (param $x2 f64) (param $x3 f64) + (param $y0 f64) (param $y1 f64) (param $y2 f64) (param $y3 f64) + (result f64) + (f64.add (f64.add (f64.mul (get_local $x0) (get_local $y0)) + (f64.mul (get_local $x1) (get_local $y1))) + (f64.add (f64.mul (get_local $x2) (get_local $y2)) + (f64.mul (get_local $x3) (get_local $y3)))) + ) +) + +(assert_return (invoke "dot_product_example" + (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) + (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) + (f64.const 2.0)) +(assert_return (invoke "with_binary_sum_collapse" + (f64.const 3.2e7) (f64.const 1.0) (f64.const -1.0) (f64.const 8.0e7) + (f64.const 4.0e7) (f64.const 1.0) (f64.const -1.0) (f64.const -1.6e7)) + (f64.const 2.0)) + +;; http://www.vinc17.org/research/fptest.en.html#contract2fma + +(module + (func (export "f32.contract2fma") + (param $x f32) (param $y f32) (result f32) + (f32.sqrt (f32.sub (f32.mul (get_local $x) (get_local $x)) + (f32.mul (get_local $y) (get_local $y))))) + (func (export "f64.contract2fma") + (param $x f64) (param $y f64) (result f64) + (f64.sqrt (f64.sub (f64.mul (get_local $x) (get_local $x)) + (f64.mul (get_local $y) (get_local $y))))) +) + +(assert_return (invoke "f32.contract2fma" (f32.const 1.0) (f32.const 1.0)) (f32.const 0.0)) +(assert_return (invoke "f32.contract2fma" (f32.const 0x1.19999ap+0) (f32.const 0x1.19999ap+0)) (f32.const 0.0)) +(assert_return (invoke "f32.contract2fma" (f32.const 0x1.333332p+0) (f32.const 0x1.333332p+0)) (f32.const 0.0)) +(assert_return (invoke "f64.contract2fma" (f64.const 1.0) (f64.const 1.0)) (f64.const 0.0)) +(assert_return (invoke "f64.contract2fma" (f64.const 0x1.199999999999ap+0) (f64.const 0x1.199999999999ap+0)) (f64.const 0.0)) +(assert_return (invoke "f64.contract2fma" (f64.const 0x1.3333333333333p+0) (f64.const 0x1.3333333333333p+0)) (f64.const 0.0)) + +;; Test that floating-point isn't implemented with QuickBasic for MS-DOS. +;; https://support.microsoft.com/en-us/help/42980/-complete-tutorial-to-understand-ieee-floating-point-errors + +(module + (func (export "f32.division_by_small_number") + (param $a f32) (param $b f32) (param $c f32) (result f32) + (f32.sub (get_local $a) (f32.div (get_local $b) (get_local $c)))) + (func (export "f64.division_by_small_number") + (param $a f64) (param $b f64) (param $c f64) (result f64) + (f64.sub (get_local $a) (f64.div (get_local $b) (get_local $c)))) +) + +(assert_return (invoke "f32.division_by_small_number" (f32.const 112000000) (f32.const 100000) (f32.const 0.0009)) (f32.const 888888)) +(assert_return (invoke "f64.division_by_small_number" (f64.const 112000000) (f64.const 100000) (f64.const 0.0009)) (f64.const 888888.8888888806)) + +;; Test a simple golden ratio computation. +;; http://mathworld.wolfram.com/GoldenRatio.html + +(module + (func (export "f32.golden_ratio") (param $a f32) (param $b f32) (param $c f32) (result f32) + (f32.mul (get_local 0) (f32.add (get_local 1) (f32.sqrt (get_local 2))))) + (func (export "f64.golden_ratio") (param $a f64) (param $b f64) (param $c f64) (result f64) + (f64.mul (get_local 0) (f64.add (get_local 1) (f64.sqrt (get_local 2))))) +) + +(assert_return (invoke "f32.golden_ratio" (f32.const 0.5) (f32.const 1.0) (f32.const 5.0)) (f32.const 1.618034)) +(assert_return (invoke "f64.golden_ratio" (f64.const 0.5) (f64.const 1.0) (f64.const 5.0)) (f64.const 1.618033988749895)) + +;; Test some silver means computations. +;; http://mathworld.wolfram.com/SilverRatio.html + +(module + (func (export "f32.silver_means") (param $n f32) (result f32) + (f32.mul (f32.const 0.5) + (f32.add (get_local $n) + (f32.sqrt (f32.add (f32.mul (get_local $n) (get_local $n)) + (f32.const 4.0)))))) + (func (export "f64.silver_means") (param $n f64) (result f64) + (f64.mul (f64.const 0.5) + (f64.add (get_local $n) + (f64.sqrt (f64.add (f64.mul (get_local $n) (get_local $n)) + (f64.const 4.0)))))) +) + +(assert_return (invoke "f32.silver_means" (f32.const 0.0)) (f32.const 1.0)) +(assert_return (invoke "f32.silver_means" (f32.const 1.0)) (f32.const 1.6180340)) +(assert_return (invoke "f32.silver_means" (f32.const 2.0)) (f32.const 2.4142136)) +(assert_return (invoke "f32.silver_means" (f32.const 3.0)) (f32.const 3.3027756)) +(assert_return (invoke "f32.silver_means" (f32.const 4.0)) (f32.const 4.2360680)) +(assert_return (invoke "f32.silver_means" (f32.const 5.0)) (f32.const 5.1925821)) +(assert_return (invoke "f64.silver_means" (f64.const 0.0)) (f64.const 1.0)) +(assert_return (invoke "f64.silver_means" (f64.const 1.0)) (f64.const 1.618033988749895)) +(assert_return (invoke "f64.silver_means" (f64.const 2.0)) (f64.const 2.414213562373095)) +(assert_return (invoke "f64.silver_means" (f64.const 3.0)) (f64.const 3.302775637731995)) +(assert_return (invoke "f64.silver_means" (f64.const 4.0)) (f64.const 4.236067977499790)) +(assert_return (invoke "f64.silver_means" (f64.const 5.0)) (f64.const 5.192582403567252)) + +;; Test that an f64 0.4 isn't double-rounded as via extended precision. +;; https://bugs.llvm.org/show_bug.cgi?id=11200 + +(module + (func (export "point_four") (param $four f64) (param $ten f64) (result i32) + (f64.lt (f64.div (get_local $four) (get_local $ten)) (f64.const 0.4))) +) + +(assert_return (invoke "point_four" (f64.const 4.0) (f64.const 10.0)) (i32.const 0)) + +;; Test an approximation function for tau; it should produces the correctly +;; rounded result after (and only after) the expected number of iterations. + +(module + (func (export "tau") (param i32) (result f64) + (local f64 f64 f64 f64) + f64.const 0x0p+0 + set_local 1 + block + get_local 0 + i32.const 1 + i32.lt_s + br_if 0 + f64.const 0x1p+0 + set_local 2 + f64.const 0x0p+0 + set_local 3 + loop + get_local 1 + get_local 2 + f64.const 0x1p+3 + get_local 3 + f64.const 0x1p+3 + f64.mul + tee_local 4 + f64.const 0x1p+0 + f64.add + f64.div + f64.const 0x1p+2 + get_local 4 + f64.const 0x1p+2 + f64.add + f64.div + f64.sub + f64.const 0x1p+1 + get_local 4 + f64.const 0x1.4p+2 + f64.add + f64.div + f64.sub + f64.const 0x1p+1 + get_local 4 + f64.const 0x1.8p+2 + f64.add + f64.div + f64.sub + f64.mul + f64.add + set_local 1 + get_local 3 + f64.const 0x1p+0 + f64.add + set_local 3 + get_local 2 + f64.const 0x1p-4 + f64.mul + set_local 2 + get_local 0 + i32.const -1 + i32.add + tee_local 0 + br_if 0 + end + end + get_local 1 + ) +) + +(assert_return (invoke "tau" (i32.const 10)) (f64.const 0x1.921fb54442d14p+2)) +(assert_return (invoke "tau" (i32.const 11)) (f64.const 0x1.921fb54442d18p+2)) + +;; Test that y < 0 ? x : (x + 1) is not folded to x + (y < 0). + +(module + (func (export "f32.no_fold_conditional_inc") (param $x f32) (param $y f32) (result f32) + (select (get_local $x) + (f32.add (get_local $x) (f32.const 1.0)) + (f32.lt (get_local $y) (f32.const 0.0)))) + (func (export "f64.no_fold_conditional_inc") (param $x f64) (param $y f64) (result f64) + (select (get_local $x) + (f64.add (get_local $x) (f64.const 1.0)) + (f64.lt (get_local $y) (f64.const 0.0)))) +) + +(assert_return (invoke "f32.no_fold_conditional_inc" (f32.const -0.0) (f32.const -1.0)) (f32.const -0.0)) +(assert_return (invoke "f64.no_fold_conditional_inc" (f64.const -0.0) (f64.const -1.0)) (f64.const -0.0)) diff --git a/libraries/wasm-jit/Test/spec/float_literals.wast b/libraries/wasm-jit/Test/spec/float_literals.wast new file mode 100644 index 000000000..1ab14f1a0 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/float_literals.wast @@ -0,0 +1,137 @@ +;; Test floating-point literal parsing. + +(module + ;; f32 special values + (func (export "f32.nan") (result i32) (i32.reinterpret/f32 (f32.const nan))) + (func (export "f32.positive_nan") (result i32) (i32.reinterpret/f32 (f32.const +nan))) + (func (export "f32.negative_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan))) + (func (export "f32.plain_nan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x400000))) + (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x200000))) + (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan:0x7fffff))) + (func (export "f32.misc_nan") (result i32) (i32.reinterpret/f32 (f32.const nan:0x012345))) + (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret/f32 (f32.const +nan:0x304050))) + (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret/f32 (f32.const -nan:0x2abcde))) + (func (export "f32.infinity") (result i32) (i32.reinterpret/f32 (f32.const inf))) + (func (export "f32.positive_infinity") (result i32) (i32.reinterpret/f32 (f32.const +inf))) + (func (export "f32.negative_infinity") (result i32) (i32.reinterpret/f32 (f32.const -inf))) + + ;; f32 numbers + (func (export "f32.zero") (result i32) (i32.reinterpret/f32 (f32.const 0x0.0p0))) + (func (export "f32.positive_zero") (result i32) (i32.reinterpret/f32 (f32.const +0x0.0p0))) + (func (export "f32.negative_zero") (result i32) (i32.reinterpret/f32 (f32.const -0x0.0p0))) + (func (export "f32.misc") (result i32) (i32.reinterpret/f32 (f32.const 0x1.921fb6p+2))) + (func (export "f32.min_positive") (result i32) (i32.reinterpret/f32 (f32.const 0x1p-149))) + (func (export "f32.min_normal") (result i32) (i32.reinterpret/f32 (f32.const 0x1p-126))) + (func (export "f32.max_finite") (result i32) (i32.reinterpret/f32 (f32.const 0x1.fffffep+127))) + (func (export "f32.max_subnormal") (result i32) (i32.reinterpret/f32 (f32.const 0x1.fffffcp-127))) + (func (export "f32.trailing_dot") (result i32) (i32.reinterpret/f32 (f32.const 0x1.p10))) + + ;; f32 in decimal format + (func (export "f32_dec.zero") (result i32) (i32.reinterpret/f32 (f32.const 0.0e0))) + (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret/f32 (f32.const +0.0e0))) + (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret/f32 (f32.const -0.0e0))) + (func (export "f32_dec.misc") (result i32) (i32.reinterpret/f32 (f32.const 6.28318548202514648))) + (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret/f32 (f32.const 1.4013e-45))) + (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret/f32 (f32.const 1.1754944e-38))) + (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret/f32 (f32.const 1.1754942e-38))) + (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret/f32 (f32.const 3.4028234e+38))) + (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret/f32 (f32.const 1.e10))) + + ;; f64 special values + (func (export "f64.nan") (result i64) (i64.reinterpret/f64 (f64.const nan))) + (func (export "f64.positive_nan") (result i64) (i64.reinterpret/f64 (f64.const +nan))) + (func (export "f64.negative_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan))) + (func (export "f64.plain_nan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x8000000000000))) + (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x4000000000000))) + (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan:0xfffffffffffff))) + (func (export "f64.misc_nan") (result i64) (i64.reinterpret/f64 (f64.const nan:0x0123456789abc))) + (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret/f64 (f64.const +nan:0x3040506070809))) + (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret/f64 (f64.const -nan:0x2abcdef012345))) + (func (export "f64.infinity") (result i64) (i64.reinterpret/f64 (f64.const inf))) + (func (export "f64.positive_infinity") (result i64) (i64.reinterpret/f64 (f64.const +inf))) + (func (export "f64.negative_infinity") (result i64) (i64.reinterpret/f64 (f64.const -inf))) + + ;; f64 numbers + (func (export "f64.zero") (result i64) (i64.reinterpret/f64 (f64.const 0x0.0p0))) + (func (export "f64.positive_zero") (result i64) (i64.reinterpret/f64 (f64.const +0x0.0p0))) + (func (export "f64.negative_zero") (result i64) (i64.reinterpret/f64 (f64.const -0x0.0p0))) + (func (export "f64.misc") (result i64) (i64.reinterpret/f64 (f64.const 0x1.921fb54442d18p+2))) + (func (export "f64.min_positive") (result i64) (i64.reinterpret/f64 (f64.const 0x0.0000000000001p-1022))) + (func (export "f64.min_normal") (result i64) (i64.reinterpret/f64 (f64.const 0x1p-1022))) + (func (export "f64.max_subnormal") (result i64) (i64.reinterpret/f64 (f64.const 0x0.fffffffffffffp-1022))) + (func (export "f64.max_finite") (result i64) (i64.reinterpret/f64 (f64.const 0x1.fffffffffffffp+1023))) + (func (export "f64.trailing_dot") (result i64) (i64.reinterpret/f64 (f64.const 0x1.p100))) + + ;; f64 numbers in decimal format + (func (export "f64_dec.zero") (result i64) (i64.reinterpret/f64 (f64.const 0.0e0))) + (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret/f64 (f64.const +0.0e0))) + (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret/f64 (f64.const -0.0e0))) + (func (export "f64_dec.misc") (result i64) (i64.reinterpret/f64 (f64.const 6.28318530717958623))) + (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret/f64 (f64.const 4.94066e-324))) + (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret/f64 (f64.const 2.2250738585072012e-308))) + (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret/f64 (f64.const 2.2250738585072011e-308))) + (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret/f64 (f64.const 1.7976931348623157e+308))) + (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret/f64 (f64.const 1.e100))) +) + +(assert_return (invoke "f32.nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000)) +(assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000)) +(assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff)) +(assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345)) +(assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050)) +(assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde)) +(assert_return (invoke "f32.infinity") (i32.const 0x7f800000)) +(assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000)) +(assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000)) +(assert_return (invoke "f32.zero") (i32.const 0)) +(assert_return (invoke "f32.positive_zero") (i32.const 0)) +(assert_return (invoke "f32.negative_zero") (i32.const 0x80000000)) +(assert_return (invoke "f32.misc") (i32.const 0x40c90fdb)) +(assert_return (invoke "f32.min_positive") (i32.const 1)) +(assert_return (invoke "f32.min_normal") (i32.const 0x800000)) +(assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff)) +(assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff)) +(assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000)) +(assert_return (invoke "f32_dec.zero") (i32.const 0)) +(assert_return (invoke "f32_dec.positive_zero") (i32.const 0)) +(assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000)) +(assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb)) +(assert_return (invoke "f32_dec.min_positive") (i32.const 1)) +(assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000)) +(assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff)) +(assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff)) +(assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9)) + +(assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000)) +(assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000)) +(assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff)) +(assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc)) +(assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809)) +(assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345)) +(assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000)) +(assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000)) +(assert_return (invoke "f64.zero") (i64.const 0)) +(assert_return (invoke "f64.positive_zero") (i64.const 0)) +(assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000)) +(assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18)) +(assert_return (invoke "f64.min_positive") (i64.const 1)) +(assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000)) +(assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff)) +(assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff)) +(assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000)) +(assert_return (invoke "f64_dec.zero") (i64.const 0)) +(assert_return (invoke "f64_dec.positive_zero") (i64.const 0)) +(assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000)) +(assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18)) +(assert_return (invoke "f64_dec.min_positive") (i64.const 1)) +(assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000)) +(assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff)) +(assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff)) +(assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d)) diff --git a/libraries/wasm-jit/Test/spec/float_memory.wast b/libraries/wasm-jit/Test/spec/float_memory.wast new file mode 100644 index 000000000..3801158f9 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/float_memory.wast @@ -0,0 +1,157 @@ +;; Test that floating-point load and store are bit-preserving. + +;; Test that load and store do not canonicalize NaNs as x87 does. + +(module + (memory (data "\00\00\a0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 0))) + (func (export "i32.load") (result i32) (i32.load (i32.const 0))) + (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000))) + (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fa00000))) + (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) + +(module + (memory (data "\00\00\00\00\00\00\f4\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 0))) + (func (export "i64.load") (result i64) (i64.load (i32.const 0))) + (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000))) + (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ff4000000000000))) + (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) + +;; Test that unaligned load and store do not canonicalize NaNs. + +(module + (memory (data "\00\00\00\a0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 1))) + (func (export "i32.load") (result i32) (i32.load (i32.const 1))) + (func (export "f32.store") (f32.store (i32.const 1) (f32.const nan:0x200000))) + (func (export "i32.store") (i32.store (i32.const 1) (i32.const 0x7fa00000))) + (func (export "reset") (i32.store (i32.const 1) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fa00000)) +(assert_return (invoke "f32.load") (f32.const nan:0x200000)) + +(module + (memory (data "\00\00\00\00\00\00\00\f4\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 1))) + (func (export "i64.load") (result i64) (i64.load (i32.const 1))) + (func (export "f64.store") (f64.store (i32.const 1) (f64.const nan:0x4000000000000))) + (func (export "i64.store") (i64.store (i32.const 1) (i64.const 0x7ff4000000000000))) + (func (export "reset") (i64.store (i32.const 1) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ff4000000000000)) +(assert_return (invoke "f64.load") (f64.const nan:0x4000000000000)) + +;; Test that load and store do not canonicalize NaNs as some JS engines do. + +(module + (memory (data "\01\00\d0\7f")) + + (func (export "f32.load") (result f32) (f32.load (i32.const 0))) + (func (export "i32.load") (result i32) (i32.load (i32.const 0))) + (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x500001))) + (func (export "i32.store") (i32.store (i32.const 0) (i32.const 0x7fd00001))) + (func (export "reset") (i32.store (i32.const 0) (i32.const 0))) +) + +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "f32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) +(invoke "reset") +(assert_return (invoke "i32.load") (i32.const 0x0)) +(assert_return (invoke "f32.load") (f32.const 0.0)) +(invoke "i32.store") +(assert_return (invoke "i32.load") (i32.const 0x7fd00001)) +(assert_return (invoke "f32.load") (f32.const nan:0x500001)) + +(module + (memory (data "\01\00\00\00\00\00\fc\7f")) + + (func (export "f64.load") (result f64) (f64.load (i32.const 0))) + (func (export "i64.load") (result i64) (i64.load (i32.const 0))) + (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0xc000000000001))) + (func (export "i64.store") (i64.store (i32.const 0) (i64.const 0x7ffc000000000001))) + (func (export "reset") (i64.store (i32.const 0) (i64.const 0))) +) + +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "f64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) +(invoke "reset") +(assert_return (invoke "i64.load") (i64.const 0x0)) +(assert_return (invoke "f64.load") (f64.const 0.0)) +(invoke "i64.store") +(assert_return (invoke "i64.load") (i64.const 0x7ffc000000000001)) +(assert_return (invoke "f64.load") (f64.const nan:0xc000000000001)) diff --git a/libraries/wasm-jit/Test/spec/float_misc.wast b/libraries/wasm-jit/Test/spec/float_misc.wast new file mode 100644 index 000000000..095b8d827 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/float_misc.wast @@ -0,0 +1,678 @@ +;; Platforms intended to run WebAssembly must support IEEE 754 arithmetic. +;; This testsuite is not currently sufficient for full IEEE 754 conformance +;; testing; platforms are currently expected to meet these requirements in +;; their own way (widely-used hardware platforms already do this). +;; +;; What this testsuite does test is that (a) the platform is basically IEEE 754 +;; rather than something else entirely, (b) it's configured correctly for +;; WebAssembly (rounding direction, exception masks, precision level, subnormal +;; mode, etc.), (c) the WebAssembly implementation doesn't perform any common +;; value-changing optimizations, and (d) that the WebAssembly implementation +;; doesn't exhibit any known implementation bugs. +;; +;; This file supplements f32.wast, f64.wast, f32_bitwise.wast, f64_bitwise.wast, +;; f32_cmp.wast, and f64_cmp.wast with additional single-instruction tests +;; covering additional miscellaneous interesting cases. + +(module + (func (export "f32.add") (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y))) + (func (export "f32.sub") (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y))) + (func (export "f32.mul") (param $x f32) (param $y f32) (result f32) (f32.mul (get_local $x) (get_local $y))) + (func (export "f32.div") (param $x f32) (param $y f32) (result f32) (f32.div (get_local $x) (get_local $y))) + (func (export "f32.sqrt") (param $x f32) (result f32) (f32.sqrt (get_local $x))) + (func (export "f32.abs") (param $x f32) (result f32) (f32.abs (get_local $x))) + (func (export "f32.neg") (param $x f32) (result f32) (f32.neg (get_local $x))) + (func (export "f32.copysign") (param $x f32) (param $y f32) (result f32) (f32.copysign (get_local $x) (get_local $y))) + (func (export "f32.ceil") (param $x f32) (result f32) (f32.ceil (get_local $x))) + (func (export "f32.floor") (param $x f32) (result f32) (f32.floor (get_local $x))) + (func (export "f32.trunc") (param $x f32) (result f32) (f32.trunc (get_local $x))) + (func (export "f32.nearest") (param $x f32) (result f32) (f32.nearest (get_local $x))) + (func (export "f32.min") (param $x f32) (param $y f32) (result f32) (f32.min (get_local $x) (get_local $y))) + (func (export "f32.max") (param $x f32) (param $y f32) (result f32) (f32.max (get_local $x) (get_local $y))) + + (func (export "f64.add") (param $x f64) (param $y f64) (result f64) (f64.add (get_local $x) (get_local $y))) + (func (export "f64.sub") (param $x f64) (param $y f64) (result f64) (f64.sub (get_local $x) (get_local $y))) + (func (export "f64.mul") (param $x f64) (param $y f64) (result f64) (f64.mul (get_local $x) (get_local $y))) + (func (export "f64.div") (param $x f64) (param $y f64) (result f64) (f64.div (get_local $x) (get_local $y))) + (func (export "f64.sqrt") (param $x f64) (result f64) (f64.sqrt (get_local $x))) + (func (export "f64.abs") (param $x f64) (result f64) (f64.abs (get_local $x))) + (func (export "f64.neg") (param $x f64) (result f64) (f64.neg (get_local $x))) + (func (export "f64.copysign") (param $x f64) (param $y f64) (result f64) (f64.copysign (get_local $x) (get_local $y))) + (func (export "f64.ceil") (param $x f64) (result f64) (f64.ceil (get_local $x))) + (func (export "f64.floor") (param $x f64) (result f64) (f64.floor (get_local $x))) + (func (export "f64.trunc") (param $x f64) (result f64) (f64.trunc (get_local $x))) + (func (export "f64.nearest") (param $x f64) (result f64) (f64.nearest (get_local $x))) + (func (export "f64.min") (param $x f64) (param $y f64) (result f64) (f64.min (get_local $x) (get_local $y))) + (func (export "f64.max") (param $x f64) (param $y f64) (result f64) (f64.max (get_local $x) (get_local $y))) +) + +;; Miscellaneous values. +(assert_return (invoke "f32.add" (f32.const 1.1234567890) (f32.const 1.2345e-10)) (f32.const 1.123456789)) +(assert_return (invoke "f64.add" (f64.const 1.1234567890) (f64.const 1.2345e-10)) (f64.const 0x1.1f9add37c11f7p+0)) + +;; Test adding the greatest value to 1.0 that rounds back to 1.0, and the +;; least that rounds to something greater. +(assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1p-24)) (f32.const 0x1.0p+0)) +(assert_return (invoke "f32.add" (f32.const 1.0) (f32.const 0x1.000002p-24)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1p-53)) (f64.const 0x1.0p+0)) +(assert_return (invoke "f64.add" (f64.const 1.0) (f64.const 0x1.0000000000001p-53)) (f64.const 0x1.0000000000001p+0)) + +;; Max subnormal + min subnormal = min normal. +(assert_return (invoke "f32.add" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-126)) +(assert_return (invoke "f64.add" (f64.const 0x0.0000000000001p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1p-1022)) + +;; Test for a case of double rounding, example from: +;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html +;; section 3.3.1: A typical problem: "double rounding" +(assert_return (invoke "f32.add" (f32.const 0x1p+31) (f32.const 1024.25)) (f32.const 0x1.000008p+31)) +(assert_return (invoke "f64.add" (f64.const 0x1p+63) (f64.const 1024.25)) (f64.const 0x1.0000000000001p+63)) + +;; Test a case that was "tricky" on MMIX. +;; http://mmix.cs.hm.edu/bugs/bug_rounding.html +(assert_return (invoke "f64.add" (f64.const -0x1p-1008) (f64.const 0x0.0000000001716p-1022)) (f64.const -0x1.fffffffffffffp-1009)) + +;; http://www.vinc17.org/software/tst-ieee754.xsl +(assert_return (invoke "f64.add" (f64.const 9007199254740992) (f64.const 1.00001)) (f64.const 9007199254740994)) + +;; http://www.vinc17.org/software/test.java +(assert_return (invoke "f64.add" (f64.const 9007199254740994) (f64.const 0x1.fffep-1)) (f64.const 9007199254740994)) + +;; Computations that round differently in ties-to-odd mode. +(assert_return (invoke "f32.add" (f32.const 0x1p23) (f32.const 0x1p-1)) (f32.const 0x1p23)) +(assert_return (invoke "f32.add" (f32.const 0x1.000002p+23) (f32.const 0x1p-1)) (f32.const 0x1.000004p+23)) +(assert_return (invoke "f64.add" (f64.const 0x1p52) (f64.const 0x1p-1)) (f64.const 0x1p52)) +(assert_return (invoke "f64.add" (f64.const 0x1.0000000000001p+52) (f64.const 0x1p-1)) (f64.const 0x1.0000000000002p+52)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.add" (f32.const -0x1.39675ap+102) (f32.const 0x1.76c94cp-99)) (f32.const -0x1.39675ap+102)) +(assert_return (invoke "f32.add" (f32.const 0x1.6c0f24p+67) (f32.const -0x1.2b92dp+52)) (f32.const 0x1.6c0cccp+67)) +(assert_return (invoke "f32.add" (f32.const 0x1.e62318p-83) (f32.const 0x1.f74abep-125)) (f32.const 0x1.e62318p-83)) +(assert_return (invoke "f32.add" (f32.const 0x1.2a71d4p+39) (f32.const -0x1.c9f10cp+55)) (f32.const -0x1.c9efe2p+55)) +(assert_return (invoke "f32.add" (f32.const 0x1.f8f736p-15) (f32.const 0x1.7bd45ep+106)) (f32.const 0x1.7bd45ep+106)) +(assert_return (invoke "f64.add" (f64.const 0x1.f33e1fbca27aap-413) (f64.const -0x1.6b192891ed61p+249)) (f64.const -0x1.6b192891ed61p+249)) +(assert_return (invoke "f64.add" (f64.const -0x1.46f75d130eeb1p+76) (f64.const 0x1.25275d6f7a4acp-184)) (f64.const -0x1.46f75d130eeb1p+76)) +(assert_return (invoke "f64.add" (f64.const 0x1.04dec9265a731p-148) (f64.const -0x1.11eed4e8c127cp-12)) (f64.const -0x1.11eed4e8c127cp-12)) +(assert_return (invoke "f64.add" (f64.const 0x1.05773b7166b0ap+497) (f64.const 0x1.134022f2da37bp+66)) (f64.const 0x1.05773b7166b0ap+497)) +(assert_return (invoke "f64.add" (f64.const 0x1.ef4f794282a82p+321) (f64.const 0x1.14a82266badep+394)) (f64.const 0x1.14a82266badep+394)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.add" (f32.const 0x1.1bf976p+72) (f32.const -0x1.7f5868p+20)) (f32.const 0x1.1bf976p+72)) +(assert_return (invoke "f32.add" (f32.const 0x1.7f9c6cp-45) (f32.const -0x1.b9bb0ep-78)) (f32.const 0x1.7f9c6cp-45)) +(assert_return (invoke "f32.add" (f32.const -0x1.32d1bcp-42) (f32.const 0x1.f7d214p+125)) (f32.const 0x1.f7d214p+125)) +(assert_return (invoke "f32.add" (f32.const -0x1.8e5c0ep-44) (f32.const -0x1.3afa4cp-106)) (f32.const -0x1.8e5c0ep-44)) +(assert_return (invoke "f32.add" (f32.const 0x1.13cd78p-10) (f32.const -0x1.3af316p-107)) (f32.const 0x1.13cd78p-10)) +(assert_return (invoke "f64.add" (f64.const 0x1.f8dd15ca97d4ap+179) (f64.const -0x1.367317d1fe8bfp-527)) (f64.const 0x1.f8dd15ca97d4ap+179)) +(assert_return (invoke "f64.add" (f64.const 0x1.5db08d739228cp+155) (f64.const -0x1.fb316fa147dcbp-61)) (f64.const 0x1.5db08d739228cp+155)) +(assert_return (invoke "f64.add" (f64.const 0x1.bbb403cb85c07p-404) (f64.const -0x1.7e44046b8bbf3p-979)) (f64.const 0x1.bbb403cb85c07p-404)) +(assert_return (invoke "f64.add" (f64.const -0x1.34d38af291831p+147) (f64.const -0x1.9890b47439953p+139)) (f64.const -0x1.366c1ba705bcap+147)) +(assert_return (invoke "f64.add" (f64.const -0x1.b61dedf4e0306p+3) (f64.const 0x1.09e2f31773c4ap+290)) (f64.const 0x1.09e2f31773c4ap+290)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.add" (f32.const -0x1.129bd8p-117) (f32.const 0x1.c75012p-43)) (f32.const 0x1.c75012p-43)) +(assert_return (invoke "f32.add" (f32.const -0x1.c204a2p-16) (f32.const 0x1.80b132p-27)) (f32.const -0x1.c1d48cp-16)) +(assert_return (invoke "f32.add" (f32.const -0x1.decc1cp+36) (f32.const 0x1.c688dap-109)) (f32.const -0x1.decc1cp+36)) +(assert_return (invoke "f32.add" (f32.const 0x1.61ce6ap-118) (f32.const -0x1.772892p+30)) (f32.const -0x1.772892p+30)) +(assert_return (invoke "f32.add" (f32.const -0x1.3dc826p-120) (f32.const 0x1.fc3f66p+95)) (f32.const 0x1.fc3f66p+95)) +(assert_return (invoke "f64.add" (f64.const 0x1.bf68acc263a0fp-777) (f64.const -0x1.5f9352965e5a6p+1004)) (f64.const -0x1.5f9352965e5a6p+1004)) +(assert_return (invoke "f64.add" (f64.const -0x1.76eaa70911f51p+516) (f64.const -0x1.2d746324ce47ap+493)) (f64.const -0x1.76eaa963fabb6p+516)) +(assert_return (invoke "f64.add" (f64.const -0x1.b637d82c15a7ap-967) (f64.const 0x1.cc654ccab4152p-283)) (f64.const 0x1.cc654ccab4152p-283)) +(assert_return (invoke "f64.add" (f64.const -0x1.a5b1fb66e846ep-509) (f64.const 0x1.4bdd36f0bb5ccp-860)) (f64.const -0x1.a5b1fb66e846ep-509)) +(assert_return (invoke "f64.add" (f64.const -0x1.14108da880f9ep+966) (f64.const 0x1.417f35701e89fp+800)) (f64.const -0x1.14108da880f9ep+966)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.add" (f64.const -0x1.fa0caf21ffebcp+804) (f64.const 0x1.4ca8fdcff89f9p+826)) (f64.const 0x1.4ca8f5e7c5e31p+826)) +(assert_return (invoke "f64.add" (f64.const 0x1.016f1fcbdfd38p+784) (f64.const 0x1.375dffcbc9a2cp+746)) (f64.const 0x1.016f1fcbe4b0fp+784)) +(assert_return (invoke "f64.add" (f64.const -0x1.dffda6d5bff3ap+624) (f64.const 0x1.f9e8cc2dff782p+674)) (f64.const 0x1.f9e8cc2dff77bp+674)) +(assert_return (invoke "f64.add" (f64.const 0x1.fff4b43687dfbp+463) (f64.const 0x1.0fd5617c4a809p+517)) (f64.const 0x1.0fd5617c4a809p+517)) +(assert_return (invoke "f64.add" (f64.const 0x1.535d380035da2p-995) (f64.const 0x1.cce37dddbb73bp-963)) (f64.const 0x1.cce37ddf0ed0fp-963)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.add" (f64.const -0x1.d91cd3fc0c66fp+752) (f64.const -0x1.4e18c80229734p+952)) (f64.const -0x1.4e18c80229734p+952)) +(assert_return (invoke "f64.add" (f64.const 0x1.afc70fd36e372p+193) (f64.const -0x1.bd10a9b377b46p+273)) (f64.const -0x1.bd10a9b377b46p+273)) +(assert_return (invoke "f64.add" (f64.const -0x1.2abd570b078b2p+302) (f64.const 0x1.b3c1ad759cb5bp-423)) (f64.const -0x1.2abd570b078b2p+302)) +(assert_return (invoke "f64.add" (f64.const -0x1.5b2ae84c0686cp-317) (f64.const -0x1.dba7a1c022823p+466)) (f64.const -0x1.dba7a1c022823p+466)) +(assert_return (invoke "f64.add" (f64.const -0x1.ac627bd7cbf38p-198) (f64.const 0x1.2312e265b8d59p-990)) (f64.const -0x1.ac627bd7cbf38p-198)) + +;; Computations that utilize the maximum exponent value to avoid overflow. +(assert_return (invoke "f32.add" (f32.const 0x1.2b91ap+116) (f32.const 0x1.cbcd52p+127)) (f32.const 0x1.cbf2c4p+127)) +(assert_return (invoke "f32.add" (f32.const 0x1.96f392p+127) (f32.const -0x1.6b3fecp+107)) (f32.const 0x1.96f37cp+127)) +(assert_return (invoke "f32.add" (f32.const 0x1.132f1cp+118) (f32.const -0x1.63d632p+127)) (f32.const -0x1.634c9ap+127)) +(assert_return (invoke "f32.add" (f32.const -0x1.1dda64p+120) (f32.const -0x1.ef02ep+127)) (f32.const -0x1.f13e94p+127)) +(assert_return (invoke "f32.add" (f32.const -0x1.4ad8dap+127) (f32.const -0x1.eae082p+125)) (f32.const -0x1.c590fap+127)) +(assert_return (invoke "f64.add" (f64.const 0x1.017099f2a4b8bp+1023) (f64.const 0x1.1f63b28f05454p+981)) (f64.const 0x1.017099f2a5009p+1023)) +(assert_return (invoke "f64.add" (f64.const 0x1.d88b6c74984efp+1023) (f64.const 0x1.33b444775eabcp+990)) (f64.const 0x1.d88b6c7532291p+1023)) +(assert_return (invoke "f64.add" (f64.const -0x1.84576422fdf5p+1023) (f64.const 0x1.60ee6aa12fb9cp+1012)) (f64.const -0x1.842b4655a9cf1p+1023)) +(assert_return (invoke "f64.add" (f64.const -0x1.9aaace3e79f7dp+1001) (f64.const 0x1.e4068af295cb6p+1023)) (f64.const 0x1.e4068487ea926p+1023)) +(assert_return (invoke "f64.add" (f64.const 0x1.06cdae79f27b9p+1023) (f64.const -0x1.e05cb0c96f975p+991)) (f64.const 0x1.06cdae78121eep+1023)) + +;; Computations that utilize the minimum exponent value. +(assert_return (invoke "f32.add" (f32.const 0x1.6a1a2p-127) (f32.const 0x1.378p-140)) (f32.const 0x1.6a23dcp-127)) +(assert_return (invoke "f32.add" (f32.const 0x1.28p-144) (f32.const -0x1p-148)) (f32.const 0x1.18p-144)) +(assert_return (invoke "f32.add" (f32.const -0x1p-146) (f32.const 0x1.c3cap-128)) (f32.const 0x1.c3c9cp-128)) +(assert_return (invoke "f32.add" (f32.const -0x1.4p-145) (f32.const 0x1.424052p-122)) (f32.const 0x1.42405p-122)) +(assert_return (invoke "f32.add" (f32.const 0x1.c5p-141) (f32.const -0x1.72f8p-135)) (f32.const -0x1.6be4p-135)) +(assert_return (invoke "f64.add" (f64.const 0x1.4774c681d1e21p-1022) (f64.const -0x1.271e58e9f58cap-1021)) (f64.const -0x1.06c7eb5219373p-1022)) +(assert_return (invoke "f64.add" (f64.const 0x1.10b3a75e31916p-1021) (f64.const -0x1.ffb82b0e868a7p-1021)) (f64.const -0x1.de090760a9f22p-1022)) +(assert_return (invoke "f64.add" (f64.const -0x0.6b58448b8098ap-1022) (f64.const -0x1.579796ed04cbep-1022)) (f64.const -0x1.c2efdb7885648p-1022)) +(assert_return (invoke "f64.add" (f64.const 0x1.9eb9e7baae8d1p-1020) (f64.const -0x1.d58e136f8c6eep-1020)) (f64.const -0x0.db50aed377874p-1022)) +(assert_return (invoke "f64.add" (f64.const -0x1.f1115deeafa0bp-1022) (f64.const 0x1.221b1c87dca29p-1022)) (f64.const -0x0.cef64166d2fe2p-1022)) + +;; Test an add of the second-greatest finite value with the distance to greatest +;; finite value. +(assert_return (invoke "f32.add" (f32.const 0x1.fffffcp+127) (f32.const 0x1p+104)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f64.add" (f64.const 0x1.ffffffffffffep+1023) (f64.const 0x1p+971)) (f64.const 0x1.fffffffffffffp+1023)) + +;; http://news.harvard.edu/gazette/story/2013/09/dawn-of-a-revolution/ +(assert_return (invoke "f32.add" (f32.const 2.0) (f32.const 2.0)) (f32.const 4.0)) +(assert_return (invoke "f64.add" (f64.const 2.0) (f64.const 2.0)) (f64.const 4.0)) + +;; Test rounding above the greatest finite value. +(assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.add" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const inf)) +(assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "f64.add" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const inf)) + +;; Test for a historic spreadsheet bug. +;; https://blogs.office.com/2007/09/25/calculation-issue-update/ +(assert_return (invoke "f32.sub" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 65536.0)) +(assert_return (invoke "f64.sub" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1.fffffffffffffp+15)) + +;; Test subtracting the greatest value from 1.0 that rounds back to 1.0, and the +;; least that rounds to something less. +(assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1p-25)) (f32.const 0x1.0p+0)) +(assert_return (invoke "f32.sub" (f32.const 1.0) (f32.const 0x1.000002p-25)) (f32.const 0x1.fffffep-1)) +(assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1p-54)) (f64.const 0x1.0p+0)) +(assert_return (invoke "f64.sub" (f64.const 1.0) (f64.const 0x1.0000000000001p-54)) (f64.const 0x1.fffffffffffffp-1)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.sub" (f32.const 0x1.ee2466p-106) (f32.const -0x1.16277ep+119)) (f32.const 0x1.16277ep+119)) +(assert_return (invoke "f32.sub" (f32.const -0x1.446f9ep+119) (f32.const -0x1.4396a4p+43)) (f32.const -0x1.446f9ep+119)) +(assert_return (invoke "f32.sub" (f32.const 0x1.74773cp+0) (f32.const -0x1.a25512p-82)) (f32.const 0x1.74773cp+0)) +(assert_return (invoke "f32.sub" (f32.const 0x1.9345c4p-117) (f32.const 0x1.6792c2p-76)) (f32.const -0x1.6792c2p-76)) +(assert_return (invoke "f32.sub" (f32.const 0x1.9ecfa4p-18) (f32.const -0x1.864b44p-107)) (f32.const 0x1.9ecfa4p-18)) +(assert_return (invoke "f64.sub" (f64.const -0x1.5b798875e7845p-333) (f64.const -0x1.b5147117452fep-903)) (f64.const -0x1.5b798875e7845p-333)) +(assert_return (invoke "f64.sub" (f64.const -0x1.6c87baeb6d72dp+552) (f64.const -0x1.64fb35d4b5571p-158)) (f64.const -0x1.6c87baeb6d72dp+552)) +(assert_return (invoke "f64.sub" (f64.const 0x1.b3d369fcf74bp-461) (f64.const -0x1.ea1668c0dec93p-837)) (f64.const 0x1.b3d369fcf74bp-461)) +(assert_return (invoke "f64.sub" (f64.const 0x1.0abd449353eadp-1005) (f64.const -0x1.0422ea3e82ee9p+154)) (f64.const 0x1.0422ea3e82ee9p+154)) +(assert_return (invoke "f64.sub" (f64.const -0x1.aadbc6b43cc3dp-143) (f64.const -0x1.e7f922ef1ee58p-539)) (f64.const -0x1.aadbc6b43cc3dp-143)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.sub" (f32.const -0x1.61e262p+108) (f32.const -0x1.baf3e4p+112)) (f32.const 0x1.a4d5bep+112)) +(assert_return (invoke "f32.sub" (f32.const -0x1.62c2f6p+109) (f32.const 0x1.6e514ap+6)) (f32.const -0x1.62c2f6p+109)) +(assert_return (invoke "f32.sub" (f32.const -0x1.287c94p-83) (f32.const 0x1.0f2f9cp-24)) (f32.const -0x1.0f2f9cp-24)) +(assert_return (invoke "f32.sub" (f32.const -0x1.c8825cp-77) (f32.const -0x1.4aead6p-12)) (f32.const 0x1.4aead6p-12)) +(assert_return (invoke "f32.sub" (f32.const -0x1.2976a4p+99) (f32.const 0x1.c6e3b8p-59)) (f32.const -0x1.2976a4p+99)) +(assert_return (invoke "f64.sub" (f64.const -0x1.76cb28ae6c045p+202) (f64.const -0x1.0611f2af4e9b9p+901)) (f64.const 0x1.0611f2af4e9b9p+901)) +(assert_return (invoke "f64.sub" (f64.const 0x1.baf35eff22e9ep-368) (f64.const 0x1.5c3e08ecf73ecp-451)) (f64.const 0x1.baf35eff22e9ep-368)) +(assert_return (invoke "f64.sub" (f64.const -0x1.8fd354b376f1fp-200) (f64.const 0x1.513c860f386ffp-508)) (f64.const -0x1.8fd354b376f1fp-200)) +(assert_return (invoke "f64.sub" (f64.const -0x1.760d447230ae6p-992) (f64.const -0x1.16f788438ae3ep-328)) (f64.const 0x1.16f788438ae3ep-328)) +(assert_return (invoke "f64.sub" (f64.const -0x1.73aab4fcfc7ap+112) (f64.const 0x1.7c589f990b884p+171)) (f64.const -0x1.7c589f990b884p+171)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.sub" (f32.const 0x1.ea264cp+95) (f32.const 0x1.852988p-15)) (f32.const 0x1.ea264cp+95)) +(assert_return (invoke "f32.sub" (f32.const -0x1.14ec7cp+19) (f32.const -0x1.0ad3fep-35)) (f32.const -0x1.14ec7cp+19)) +(assert_return (invoke "f32.sub" (f32.const -0x1.3251dap-36) (f32.const -0x1.49c97ep-56)) (f32.const -0x1.3251c6p-36)) +(assert_return (invoke "f32.sub" (f32.const -0x1.13565ep-14) (f32.const 0x1.2f89a8p-13)) (f32.const -0x1.b934d8p-13)) +(assert_return (invoke "f32.sub" (f32.const -0x1.6032b6p-33) (f32.const -0x1.bb5196p-104)) (f32.const -0x1.6032b6p-33)) +(assert_return (invoke "f64.sub" (f64.const -0x1.b5b0797af491p-157) (f64.const -0x1.694b8348189e8p+722)) (f64.const 0x1.694b8348189e8p+722)) +(assert_return (invoke "f64.sub" (f64.const -0x1.72b142826ed73p+759) (f64.const -0x1.010477bc9afbdp+903)) (f64.const 0x1.010477bc9afbdp+903)) +(assert_return (invoke "f64.sub" (f64.const 0x1.83273b6bb94cfp-796) (f64.const 0x1.1a93f948a2abbp+181)) (f64.const -0x1.1a93f948a2abbp+181)) +(assert_return (invoke "f64.sub" (f64.const -0x1.207e7156cbf2p-573) (f64.const 0x1.cf3f12fd3814dp-544)) (f64.const -0x1.cf3f13063c086p-544)) +(assert_return (invoke "f64.sub" (f64.const -0x1.837e6844f1718p-559) (f64.const -0x1.1c29b757f98abp-14)) (f64.const 0x1.1c29b757f98abp-14)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.sub" (f64.const 0x1.c21151a709b6cp-78) (f64.const 0x1.0a12fff8910f6p-115)) (f64.const 0x1.c21151a701663p-78)) +(assert_return (invoke "f64.sub" (f64.const 0x1.c57912aae2f64p-982) (f64.const 0x1.dbfbd4800b7cfp-1010)) (f64.const 0x1.c579128d2338fp-982)) +(assert_return (invoke "f64.sub" (f64.const 0x1.ffef4399af9c6p-254) (f64.const 0x1.edb96dfaea8b1p-200)) (f64.const -0x1.edb96dfaea8b1p-200)) +(assert_return (invoke "f64.sub" (f64.const -0x1.363eee391cde2p-39) (f64.const -0x1.a65462000265fp-69)) (f64.const -0x1.363eee32838c9p-39)) +(assert_return (invoke "f64.sub" (f64.const 0x1.59016dba002a1p-25) (f64.const 0x1.5d4374f124cccp-3)) (f64.const -0x1.5d436f8d1f15dp-3)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.sub" (f64.const -0x1.18196bca005cfp-814) (f64.const -0x1.db7b01ce3f52fp-766)) (f64.const 0x1.db7b01ce3f51dp-766)) +(assert_return (invoke "f64.sub" (f64.const -0x1.d17b3528d219p+33) (f64.const 0x1.fd739d4ea220ap+367)) (f64.const -0x1.fd739d4ea220ap+367)) +(assert_return (invoke "f64.sub" (f64.const 0x1.dea46994de319p+114) (f64.const 0x1.b5b19cd55c7d3p-590)) (f64.const 0x1.dea46994de319p+114)) +(assert_return (invoke "f64.sub" (f64.const 0x1.b60f9b2fbd9ecp-489) (f64.const -0x1.6f81c59ec5b8ep-694)) (f64.const 0x1.b60f9b2fbd9ecp-489)) +(assert_return (invoke "f64.sub" (f64.const 0x1.5e423fe8571f4p-57) (f64.const 0x1.9624ed7c162dfp-618)) (f64.const 0x1.5e423fe8571f4p-57)) + +;; pow(e, π) - π +;; https://xkcd.com/217 +(assert_return (invoke "f32.sub" (f32.const 0x1.724046p+4) (f32.const 0x1.921fb6p+1)) (f32.const 0x1.3ffc5p+4)) +(assert_return (invoke "f64.sub" (f64.const 0x1.724046eb0933ap+4) (f64.const 0x1.921fb54442d18p+1)) (f64.const 0x1.3ffc504280d97p+4)) + +;; https://www.cnet.com/news/googles-calculator-muffs-some-math-problems/ +(assert_return (invoke "f32.sub" (f32.const 2999999) (f32.const 2999998)) (f32.const 1.0)) +(assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999995)) (f32.const 4.0)) +(assert_return (invoke "f32.sub" (f32.const 1999999) (f32.const 1999993)) (f32.const 6.0)) +(assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400001)) (f32.const 1.0)) +(assert_return (invoke "f32.sub" (f32.const 400002) (f32.const 400000)) (f32.const 2.0)) +(assert_return (invoke "f64.sub" (f64.const 2999999999999999) (f64.const 2999999999999998)) (f64.const 1.0)) +(assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999995)) (f64.const 4.0)) +(assert_return (invoke "f64.sub" (f64.const 1999999999999999) (f64.const 1999999999999993)) (f64.const 6.0)) +(assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000001)) (f64.const 1.0)) +(assert_return (invoke "f64.sub" (f64.const 400000000000002) (f64.const 400000000000000)) (f64.const 2.0)) + +;; Min normal - max subnormal = min subnormal. +(assert_return (invoke "f32.sub" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.sub" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x0.0000000000001p-1022)) + +;; Test subtraction of numbers very close to 1. +(assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.8p-23)) +(assert_return (invoke "f32.sub" (f32.const 0x1.000002p+0) (f32.const 0x1.0p+0)) (f32.const 0x1p-23)) +(assert_return (invoke "f32.sub" (f32.const 0x1p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p-24)) +(assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.8p-52)) +(assert_return (invoke "f64.sub" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0p+0)) (f64.const 0x1p-52)) +(assert_return (invoke "f64.sub" (f64.const 0x1p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p-53)) + +;; Test the least value that can be subtracted from the max value to produce a +;; different value. +(assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1.fffffep+102)) (f32.const 0x1.fffffep+127)) +(assert_return (invoke "f32.sub" (f32.const 0x1.fffffep+127) (f32.const 0x1p+103)) (f32.const 0x1.fffffcp+127)) +(assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1.fffffffffffffp+969)) (f64.const 0x1.fffffffffffffp+1023)) +(assert_return (invoke "f64.sub" (f64.const 0x1.fffffffffffffp+1023) (f64.const 0x1p+970)) (f64.const 0x1.ffffffffffffep+1023)) + +;; Miscellaneous values. +(assert_return (invoke "f32.mul" (f32.const 1e15) (f32.const 1e15)) (f32.const 0x1.93e592p+99)) +(assert_return (invoke "f32.mul" (f32.const 1e20) (f32.const 1e20)) (f32.const inf)) +(assert_return (invoke "f32.mul" (f32.const 1e25) (f32.const 1e25)) (f32.const inf)) +(assert_return (invoke "f64.mul" (f64.const 1e15) (f64.const 1e15)) (f64.const 0x1.93e5939a08ceap+99)) +(assert_return (invoke "f64.mul" (f64.const 1e20) (f64.const 1e20)) (f64.const 0x1.d6329f1c35ca5p+132)) +(assert_return (invoke "f64.mul" (f64.const 1e25) (f64.const 1e25)) (f64.const 0x1.11b0ec57e649bp+166)) + +;; Test for a case of double rounding, example from: +;; http://perso.ens-lyon.fr/jean-michel.muller/Handbook.html +;; section 3.3.1: A typical problem: "double rounding" +(assert_return (invoke "f32.mul" (f32.const 1848874880.0) (f32.const 19954563072.0)) (f32.const 0x1.000002p+65)) +(assert_return (invoke "f64.mul" (f64.const 1848874847.0) (f64.const 19954562207.0)) (f64.const 3.6893488147419111424e+19)) + +;; Test for a historic spreadsheet bug. +;; http://www.joelonsoftware.com/items/2007/09/26b.html +(assert_return (invoke "f32.mul" (f32.const 77.1) (f32.const 850)) (f32.const 65535)) +(assert_return (invoke "f64.mul" (f64.const 77.1) (f64.const 850)) (f64.const 65534.99999999999272404)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.14df2ep+61) (f32.const 0x1.748878p-36)) (f32.const -0x1.92e7e8p+25)) +(assert_return (invoke "f32.mul" (f32.const -0x1.5629e2p+102) (f32.const -0x1.c33012p-102)) (f32.const 0x1.2d8604p+1)) +(assert_return (invoke "f32.mul" (f32.const -0x1.b17694p+92) (f32.const -0x1.e4b56ap-97)) (f32.const 0x1.9a5baep-4)) +(assert_return (invoke "f32.mul" (f32.const -0x1.1626a6p+79) (f32.const -0x1.c57d7p-75)) (f32.const 0x1.ecbaaep+4)) +(assert_return (invoke "f32.mul" (f32.const 0x1.7acf72p+53) (f32.const 0x1.6c89acp+5)) (f32.const 0x1.0db556p+59)) +(assert_return (invoke "f64.mul" (f64.const -0x1.25c293f6f37e4p+425) (f64.const 0x1.f5fd4fa41c6d8p+945)) (f64.const -inf)) +(assert_return (invoke "f64.mul" (f64.const -0x1.cc1ae79fffc5bp-986) (f64.const -0x1.c36ccc2861ca6p-219)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.c0232b3e64b56p+606) (f64.const -0x1.f6939cf3affaap+106)) (f64.const -0x1.b7e3aedf190d3p+713)) +(assert_return (invoke "f64.mul" (f64.const -0x1.60f289966b271p-313) (f64.const 0x1.28a5497f0c259p+583)) (f64.const -0x1.98fc50bcec259p+270)) +(assert_return (invoke "f64.mul" (f64.const 0x1.37dab12d3afa2p+795) (f64.const 0x1.81e156bd393f1p-858)) (f64.const 0x1.d6126554b8298p-63)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.3f57a2p-89) (f32.const -0x1.041d68p+92)) (f32.const 0x1.4479bp+3)) +(assert_return (invoke "f32.mul" (f32.const 0x1.4d0582p+73) (f32.const 0x1.6e043ap+19)) (f32.const 0x1.dc236p+92)) +(assert_return (invoke "f32.mul" (f32.const -0x1.2fdap-32) (f32.const -0x1.e1731cp+74)) (f32.const 0x1.1db89ep+43)) +(assert_return (invoke "f32.mul" (f32.const 0x1.7bc8fep+67) (f32.const -0x1.3ad592p+15)) (f32.const -0x1.d3115ep+82)) +(assert_return (invoke "f32.mul" (f32.const 0x1.936742p+30) (f32.const -0x1.a7a19p+66)) (f32.const -0x1.4dc71ap+97)) +(assert_return (invoke "f64.mul" (f64.const -0x1.ba737b4ca3b13p-639) (f64.const 0x1.8923309857438p-314)) (f64.const -0x1.53bc0d07baa37p-952)) +(assert_return (invoke "f64.mul" (f64.const 0x1.7c1932e610219p-276) (f64.const -0x1.2605db646489fp-635)) (f64.const -0x1.b48da2b0d2ae3p-911)) +(assert_return (invoke "f64.mul" (f64.const -0x1.e43cdf3b2108p+329) (f64.const -0x1.99d96abbd61d1p+835)) (f64.const inf)) +(assert_return (invoke "f64.mul" (f64.const 0x1.4c19466551da3p+947) (f64.const 0x1.0bdcd6c7646e9p-439)) (f64.const 0x1.5b7cd8c3f638ap+508)) +(assert_return (invoke "f64.mul" (f64.const 0x1.ff1da1726e3dfp+339) (f64.const -0x1.043c44f52b158p+169)) (f64.const -0x1.03c9364bb585cp+509)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.mul" (f32.const -0x1.907e8ap+46) (f32.const -0x1.5d3668p+95)) (f32.const inf)) +(assert_return (invoke "f32.mul" (f32.const -0x1.8c9f74p-3) (f32.const 0x1.e2b452p-99)) (f32.const -0x1.75edccp-101)) +(assert_return (invoke "f32.mul" (f32.const -0x1.cc605ap-19) (f32.const 0x1.ec321ap+105)) (f32.const -0x1.ba91a4p+87)) +(assert_return (invoke "f32.mul" (f32.const -0x1.5fbb7ap+56) (f32.const 0x1.a8965ep-96)) (f32.const -0x1.23ae8ep-39)) +(assert_return (invoke "f32.mul" (f32.const -0x1.fb7f12p+16) (f32.const 0x1.3a701ap-119)) (f32.const -0x1.37ac0cp-102)) +(assert_return (invoke "f64.mul" (f64.const -0x1.5b0266454c26bp-496) (f64.const -0x1.af5787e3e0399p+433)) (f64.const 0x1.2457d81949e0bp-62)) +(assert_return (invoke "f64.mul" (f64.const 0x1.0d54a82393d45p+478) (f64.const -0x1.425760807ceaep-764)) (f64.const -0x1.532068c8d0d5dp-286)) +(assert_return (invoke "f64.mul" (f64.const -0x1.b532af981786p+172) (f64.const 0x1.ada95085ba36fp+359)) (f64.const -0x1.6ee38c1e01864p+532)) +(assert_return (invoke "f64.mul" (f64.const 0x1.e132f4d49d1cep+768) (f64.const -0x1.a75afe9a7d864p+374)) (f64.const -inf)) +(assert_return (invoke "f64.mul" (f64.const 0x1.68bbf1cfff90ap+81) (f64.const 0x1.09cd17d652c5p+70)) (f64.const 0x1.768b8d67d794p+151)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.mul" (f64.const 0x1.f99fb602c89b7p-341) (f64.const 0x1.6caab46a31a2ep-575)) (f64.const 0x1.68201f986e9d7p-915)) +(assert_return (invoke "f64.mul" (f64.const -0x1.86999c5eee379p-9) (f64.const 0x1.6e3b9e0d53e0dp+723)) (f64.const -0x1.17654a0ef35f5p+715)) +(assert_return (invoke "f64.mul" (f64.const -0x1.069571b176f9p+367) (f64.const -0x1.e248b6ab0a0e3p-652)) (f64.const 0x1.eeaff575cae1dp-285)) +(assert_return (invoke "f64.mul" (f64.const 0x1.c217645777dd2p+775) (f64.const 0x1.d93f5715dd646p+60)) (f64.const 0x1.a0064aa1d920dp+836)) +(assert_return (invoke "f64.mul" (f64.const -0x1.848981b6e694ap-276) (f64.const 0x1.f5aacb64a0d19p+896)) (f64.const -0x1.7cb2296e6c2e5p+621)) + +;; Computations that round differently on x87 in double-precision mode. +(assert_return (invoke "f64.mul" (f64.const 0x1.db3bd2a286944p-599) (f64.const 0x1.ce910af1d55cap-425)) (f64.const 0x0.d6accdd538a39p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.aca223916012p-57) (f64.const -0x1.2b2b4958dd228p-966)) (f64.const 0x0.fa74eccae5615p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.bd062def16cffp-488) (f64.const -0x1.7ddd91a0c4c0ep-536)) (f64.const 0x0.a5f4d7769d90dp-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.c6a56169e9cep-772) (f64.const 0x1.517d55a474122p-255)) (f64.const -0x0.12baf260afb77p-1022)) +(assert_return (invoke "f64.mul" (f64.const -0x1.08951b0b41705p-516) (f64.const -0x1.102dc27168d09p-507)) (f64.const 0x0.8ca6dbf3f592bp-1022)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.mul" (f64.const 0x1.8d0dea50c8c9bp+852) (f64.const 0x1.21cac31d87a24p-881)) (f64.const 0x1.c177311f7cd73p-29)) +(assert_return (invoke "f64.mul" (f64.const 0x1.98049118e3063p-7) (f64.const 0x1.6362525151b58p-149)) (f64.const 0x1.1b358514103f9p-155)) +(assert_return (invoke "f64.mul" (f64.const -0x1.ea65cb0631323p+1) (f64.const 0x1.fce683201a19bp-41)) (f64.const -0x1.e76dc8c223667p-39)) +(assert_return (invoke "f64.mul" (f64.const 0x1.e4d235961d543p-373) (f64.const 0x1.bc56f20ef9a48p-205)) (f64.const 0x1.a4c09efcb71d6p-577)) +(assert_return (invoke "f64.mul" (f64.const -0x1.b9612e66faba8p+77) (f64.const 0x1.e2bc6aa782273p-348)) (f64.const -0x1.a026ea4f81db1p-270)) + +;; Test the least positive value with a positive square. +(assert_return (invoke "f32.mul" (f32.const 0x1p-75) (f32.const 0x1p-75)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.mul" (f32.const 0x1.000002p-75) (f32.const 0x1.000002p-75)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bccp-538) (f64.const 0x1.6a09e667f3bccp-538)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.6a09e667f3bcdp-538) (f64.const 0x1.6a09e667f3bcdp-538)) (f64.const 0x0.0000000000001p-1022)) + +;; Test the greatest positive value with a finite square. +(assert_return (invoke "f32.mul" (f32.const 0x1.fffffep+63) (f32.const 0x1.fffffep+63)) (f32.const 0x1.fffffcp+127)) +(assert_return (invoke "f32.mul" (f32.const 0x1p+64) (f32.const 0x1p+64)) (f32.const inf)) +(assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp+511) (f64.const 0x1.fffffffffffffp+511)) (f64.const 0x1.ffffffffffffep+1023)) +(assert_return (invoke "f64.mul" (f64.const 0x1p+512) (f64.const 0x1p+512)) (f64.const inf)) + +;; Test the squares of values very close to 1. +(assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.mul" (f32.const 0x1.fffffep-1) (f32.const 0x1.fffffep-1)) (f32.const 0x1.fffffcp-1)) +(assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.0000000000002p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.ffffffffffffep-1)) + +;; Test multiplication of numbers very close to 1. +(assert_return (invoke "f32.mul" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1p+0)) +(assert_return (invoke "f32.mul" (f32.const 0x1.000004p+0) (f32.const 0x1.fffffcp-1)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1p+0)) +(assert_return (invoke "f64.mul" (f64.const 0x1.0000000000002p+0) (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.0000000000001p+0)) + +;; Test MIN * EPSILON. +;; http://www.mpfr.org/mpfr-2.0.1/patch2 +(assert_return (invoke "f32.mul" (f32.const 0x1p-126) (f32.const 0x1p-23)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.mul" (f64.const 0x1p-1022) (f64.const 0x1p-52)) (f64.const 0x0.0000000000001p-1022)) + +;; http://opencores.org/bug,view,2454 +(assert_return (invoke "f32.mul" (f32.const -0x1.0006p+4) (f32.const 0x1.ap-132)) (f32.const -0x1.a009cp-128)) + +;; Miscellaneous values. +(assert_return (invoke "f32.div" (f32.const 1.123456789) (f32.const 100)) (f32.const 0x1.702264p-7)) +(assert_return (invoke "f32.div" (f32.const 8391667.0) (f32.const 12582905.0)) (f32.const 0x1.55754p-1)) +(assert_return (invoke "f32.div" (f32.const 65536.0) (f32.const 0x1p-37)) (f32.const 0x1p+53)) +(assert_return (invoke "f32.div" (f32.const 0x1.dcbf6ap+0) (f32.const 0x1.fffffep+127)) (f32.const 0x1.dcbf68p-128)) +(assert_return (invoke "f32.div" (f32.const 4) (f32.const 3)) (f32.const 0x1.555556p+0)) +(assert_return (invoke "f64.div" (f64.const 1.123456789) (f64.const 100)) (f64.const 0.01123456789)) +(assert_return (invoke "f64.div" (f64.const 8391667.0) (f64.const 12582905.0)) (f64.const 0x1.55753f1d9ba27p-1)) +(assert_return (invoke "f64.div" (f64.const 65536.0) (f64.const 0x1p-37)) (f64.const 0x1p+53)) +(assert_return (invoke "f64.div" (f64.const 0x1.dcbf6ap+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda8p-1022)) +(assert_return (invoke "f64.div" (f64.const 4) (f64.const 3)) (f64.const 0x1.5555555555555p+0)) + +;; Test for a historic hardware bug. +;; https://en.wikipedia.org/wiki/Pentium_FDIV_bug +(assert_return (invoke "f32.div" (f32.const 4195835) (f32.const 3145727)) (f32.const 0x1.557542p+0)) +(assert_return (invoke "f64.div" (f64.const 4195835) (f64.const 3145727)) (f64.const 0x1.557541c7c6b43p+0)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.div" (f32.const 0x1.6a6c5ap-48) (f32.const 0x1.fa0b7p+127)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.616fb2p-87) (f32.const 0x1.332172p+68)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const -0x1.96e778p+16) (f32.const 0x1.eb0c56p-80)) (f32.const -0x1.a8440ap+95)) +(assert_return (invoke "f32.div" (f32.const -0x1.e2624p-76) (f32.const -0x1.ed236ep-122)) (f32.const 0x1.f4d584p+45)) +(assert_return (invoke "f32.div" (f32.const -0x1.e2374ep+41) (f32.const 0x1.71fcdcp-80)) (f32.const -0x1.4da706p+121)) +(assert_return (invoke "f64.div" (f64.const 0x1.163c09d0c38c1p+147) (f64.const 0x1.e04cc737348e6p+223)) (f64.const 0x1.289921caeed23p-77)) +(assert_return (invoke "f64.div" (f64.const 0x1.d6867e741e0a9p-626) (f64.const 0x1.335eb19a9aae4p-972)) (f64.const 0x1.87e342d11f519p+346)) +(assert_return (invoke "f64.div" (f64.const -0x1.d5edf648aeb98p+298) (f64.const 0x1.0dda15b079355p+640)) (f64.const -0x1.bdceaf9734b5cp-342)) +(assert_return (invoke "f64.div" (f64.const -0x1.b683e3934aedap+691) (f64.const 0x1.c364e1df00dffp+246)) (f64.const -0x1.f16456e7afe3bp+444)) +(assert_return (invoke "f64.div" (f64.const -0x1.44ca7539cc851p+540) (f64.const 0x1.58501bccc58fep+453)) (f64.const -0x1.e2f8657e0924ep+86)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.div" (f32.const -0x1.c2c54ap+69) (f32.const -0x1.00d142p-86)) (f32.const inf)) +(assert_return (invoke "f32.div" (f32.const 0x1.e35abep-46) (f32.const 0x1.c69dfp+44)) (f32.const 0x1.102eb4p-90)) +(assert_return (invoke "f32.div" (f32.const 0x1.45ff2ap+0) (f32.const -0x1.1e8754p+89)) (f32.const -0x1.23434ep-89)) +(assert_return (invoke "f32.div" (f32.const 0x1.8db18ap-51) (f32.const 0x1.47c678p-128)) (f32.const 0x1.369b96p+77)) +(assert_return (invoke "f32.div" (f32.const 0x1.78599p+90) (f32.const 0x1.534144p+87)) (f32.const 0x1.1bfddcp+3)) +(assert_return (invoke "f64.div" (f64.const 0x0.f331c4f47eb51p-1022) (f64.const -0x1.c7ff45bf6f03ap+362)) (f64.const -0x0p+0)) +(assert_return (invoke "f64.div" (f64.const -0x1.0fc8707b9d19cp-987) (f64.const 0x1.77524d5f4a563p-536)) (f64.const -0x1.72c1a937d231p-452)) +(assert_return (invoke "f64.div" (f64.const -0x1.edb3aa64bb338p-403) (f64.const -0x1.1c7c164320e4p+45)) (f64.const 0x1.bc44cc1c5ae63p-448)) +(assert_return (invoke "f64.div" (f64.const -0x1.6534b34e8686bp+80) (f64.const 0x1.c34a7fc59e3c3p-791)) (f64.const -0x1.95421bf291b66p+870)) +(assert_return (invoke "f64.div" (f64.const -0x1.91f58d7ed1237p+236) (f64.const -0x1.f190d808383c8p+55)) (f64.const 0x1.9d9eb0836f906p+180)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.div" (f32.const 0x1.64b2a4p+26) (f32.const 0x1.e95752p-119)) (f32.const inf)) +(assert_return (invoke "f32.div" (f32.const -0x1.53c9b6p+77) (f32.const 0x1.d689ap+27)) (f32.const -0x1.71baa4p+49)) +(assert_return (invoke "f32.div" (f32.const 0x1.664a8ap+38) (f32.const -0x1.59dba2p+96)) (f32.const -0x1.0933f4p-58)) +(assert_return (invoke "f32.div" (f32.const -0x1.99e0fap+111) (f32.const -0x1.c2b5a8p+9)) (f32.const 0x1.d19de6p+101)) +(assert_return (invoke "f32.div" (f32.const -0x1.5a815ap+92) (f32.const -0x1.b5820ap+13)) (f32.const 0x1.9580b8p+78)) +(assert_return (invoke "f64.div" (f64.const -0x1.81fd1e2af7bebp-655) (f64.const 0x1.edefc4eae536cp-691)) (f64.const -0x1.901abdd91b661p+35)) +(assert_return (invoke "f64.div" (f64.const -0x1.47cf932953c43p+782) (f64.const -0x1.bc40496b1f2a1p-553)) (f64.const inf)) +(assert_return (invoke "f64.div" (f64.const -0x1.2bd2e8fbdcad7p-746) (f64.const 0x1.b115674cc476ep-65)) (f64.const -0x1.62752bf19fa81p-682)) +(assert_return (invoke "f64.div" (f64.const -0x1.f923e3fea9efep+317) (f64.const -0x1.8044c74d27a39p-588)) (f64.const 0x1.5086518cc7186p+905)) +(assert_return (invoke "f64.div" (f64.const 0x1.516ed2051d6bbp+181) (f64.const -0x1.c9f455eb9c2eep+214)) (f64.const -0x1.79414d67f2889p-34)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.div" (f64.const -0x1.9c52726aed366p+585) (f64.const -0x1.7d0568c75660fp+195)) (f64.const 0x1.1507ca2a65f23p+390)) +(assert_return (invoke "f64.div" (f64.const -0x1.522672f461667p+546) (f64.const -0x1.36d36572c9f71p+330)) (f64.const 0x1.1681369370619p+216)) +(assert_return (invoke "f64.div" (f64.const 0x1.01051b4e8cd61p+185) (f64.const -0x1.2cbb5ca3d33ebp+965)) (f64.const -0x1.b59471598a2f3p-781)) +(assert_return (invoke "f64.div" (f64.const 0x1.5f93bb80fc2cbp+217) (f64.const 0x1.7e051aae9f0edp+427)) (f64.const 0x1.d732fa926ba4fp-211)) +(assert_return (invoke "f64.div" (f64.const -0x1.e251d762163ccp+825) (f64.const 0x1.3ee63581e1796p+349)) (f64.const -0x1.8330077d90a07p+476)) + +;; Computations that round differently on x87 in double-precision mode. +(assert_return (invoke "f64.div" (f64.const 0x1.dcbf69f10006dp+0) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.772fda7c4001bp-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.e14169442fbcap-1011) (f64.const 0x1.505451d62ff7dp+12)) (f64.const 0x0.b727e85f38b39p-1022)) +(assert_return (invoke "f64.div" (f64.const -0x1.d3ebe726ec964p-144) (f64.const -0x1.4a7bfc0b83608p+880)) (f64.const 0x0.5a9d8c50cbf87p-1022)) +(assert_return (invoke "f64.div" (f64.const -0x1.6c3def770aee1p-393) (f64.const -0x1.8b84724347598p+631)) (f64.const 0x0.3af0707fcd0c7p-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.16abda1bb3cb3p-856) (f64.const 0x1.6c9c7198eb1e6p+166)) (f64.const 0x0.c3a8fd6741649p-1022)) +(assert_return (invoke "f64.div" (f64.const 0x1.7057d6ab553cap-1005) (f64.const -0x1.2abf1e98660ebp+23)) (f64.const -0x0.04ee8d8ec01cdp-1022)) + +;; Computations that round differently when div is mul by reciprocal. +(assert_return (invoke "f32.div" (f32.const 0x1.ada9aap+89) (f32.const 0x1.69884cp+42)) (f32.const 0x1.303e2ep+47)) +(assert_return (invoke "f32.div" (f32.const 0x1.8281c8p+90) (f32.const -0x1.62883cp+106)) (f32.const -0x1.17169cp-16)) +(assert_return (invoke "f32.div" (f32.const 0x1.5c6be2p+81) (f32.const 0x1.d01dfep-1)) (f32.const 0x1.805e32p+81)) +(assert_return (invoke "f32.div" (f32.const -0x1.bbd252p+19) (f32.const -0x1.fba95p+33)) (f32.const 0x1.bf9d56p-15)) +(assert_return (invoke "f32.div" (f32.const -0x1.0f41d6p-42) (f32.const -0x1.3f2dbep+56)) (f32.const 0x1.b320d8p-99)) +(assert_return (invoke "f64.div" (f64.const 0x1.b2348a1c81899p+61) (f64.const -0x1.4a58aad903dd3p-861)) (f64.const -0x1.507c1e2a41b35p+922)) +(assert_return (invoke "f64.div" (f64.const 0x1.23fa5137a918ap-130) (f64.const -0x1.7268db1951263p-521)) (f64.const -0x1.93965e0d896bep+390)) +(assert_return (invoke "f64.div" (f64.const 0x1.dcb3915d82deep+669) (f64.const 0x1.50caaa1dc6b19p+638)) (f64.const 0x1.6a58ec814b09dp+31)) +(assert_return (invoke "f64.div" (f64.const -0x1.046e378c0cc46p+182) (f64.const 0x1.ac925009a922bp+773)) (f64.const -0x1.3720aa94dab18p-592)) +(assert_return (invoke "f64.div" (f64.const -0x1.8945fd69d8e11p-871) (f64.const -0x1.0a37870af809ap-646)) (f64.const 0x1.7a2e286c62382p-225)) + +;; Computations that round differently when computed via f32. +(assert_return (invoke "f64.div" (f64.const 0x1.82002af0ea1f3p-57) (f64.const 0x1.d0a9b0c2fa339p+0)) (f64.const 0x1.a952fbd1fc17cp-58)) +(assert_return (invoke "f64.div" (f64.const 0x1.1e12b515db471p-102) (f64.const -0x1.41fc3c94fba5p-42)) (f64.const -0x1.c6e50cccb7cb6p-61)) +(assert_return (invoke "f64.div" (f64.const 0x1.aba5adcd6f583p-41) (f64.const 0x1.17dfac639ce0fp-112)) (f64.const 0x1.872b0a008c326p+71)) +(assert_return (invoke "f64.div" (f64.const 0x1.cf82510d0ae6bp+89) (f64.const 0x1.0207d86498053p+97)) (f64.const 0x1.cbdc804e2cf14p-8)) +(assert_return (invoke "f64.div" (f64.const 0x1.4c82cbb508e21p-11) (f64.const -0x1.6b57208c2d5d5p+52)) (f64.const -0x1.d48e8b369129ap-64)) + +;; Division involving the maximum subnormal value and the minimum normal value. +(assert_return (invoke "f32.div" (f32.const 0x1p-126) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.fffffcp-127) (f32.const 0x1p-126)) (f32.const 0x1.fffffcp-1)) +(assert_return (invoke "f64.div" (f64.const 0x1p-1022) (f64.const 0x0.fffffffffffffp-1022)) (f64.const 0x1.0000000000001p+0)) +(assert_return (invoke "f64.div" (f64.const 0x0.fffffffffffffp-1022) (f64.const 0x1p-1022)) (f64.const 0x1.ffffffffffffep-1)) + +;; Test the least positive value with a positive quotient with the maximum value. +(assert_return (invoke "f32.div" (f32.const 0x1.fffffep-23) (f32.const 0x1.fffffep+127)) (f32.const 0x0p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1p-22) (f32.const 0x1.fffffep+127)) (f32.const 0x1p-149)) +(assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-52) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0p+0)) +(assert_return (invoke "f64.div" (f64.const 0x1p-51) (f64.const 0x1.fffffffffffffp+1023)) (f64.const 0x0.0000000000001p-1022)) + +;; Test the least positive value with a finite reciprocal. +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p-128)) (f32.const inf)) +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000008p-128)) (f32.const 0x1.fffffp+127)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4p-1022)) (f64.const inf)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x0.4000000000001p-1022)) (f64.const 0x1.ffffffffffff8p+1023)) + +;; Test the least positive value that has a subnormal reciprocal. +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1.000002p+126)) (f32.const 0x1.fffffcp-127)) +(assert_return (invoke "f32.div" (f32.const 1.0) (f32.const 0x1p+126)) (f32.const 0x1p-126)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1.0000000000001p+1022)) (f64.const 0x0.fffffffffffffp-1022)) +(assert_return (invoke "f64.div" (f64.const 1.0) (f64.const 0x1p+1022)) (f64.const 0x1p-1022)) + +;; Test that the last binary digit of 1.0/3.0 is even in f32, +;; https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Single-precision_examples +;; +;; and odd in f64, +;; https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples +;; +;; and that 1.0/3.0, 3.0/9.0, and 9.0/27.0 all agree. +;; http://www.netlib.org/paranoia +(assert_return (invoke "f32.div" (f32.const 0x1p+0) (f32.const 0x1.8p+1)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f32.div" (f32.const 0x3p+0) (f32.const 0x1.2p+3)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f32.div" (f32.const 0x1.2p+3) (f32.const 0x1.bp+4)) (f32.const 0x1.555556p-2)) +(assert_return (invoke "f64.div" (f64.const 0x1p+0) (f64.const 0x1.8p+1)) (f64.const 0x1.5555555555555p-2)) +(assert_return (invoke "f64.div" (f64.const 0x3p+0) (f64.const 0x1.2p+3)) (f64.const 0x1.5555555555555p-2)) +(assert_return (invoke "f64.div" (f64.const 0x1.2p+3) (f64.const 0x1.bp+4)) (f64.const 0x1.5555555555555p-2)) + +;; Test division of numbers very close to 1. +(assert_return (invoke "f32.div" (f32.const 0x1.000002p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000004p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.fffffep-1) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffap-1)) +(assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.fffffep-1)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f32.div" (f32.const 0x1.0p+0) (f32.const 0x1.000002p+0)) (f32.const 0x1.fffffcp-1)) +(assert_return (invoke "f64.div" (f64.const 0x1.0000000000001p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000002p+0)) +(assert_return (invoke "f64.div" (f64.const 0x1.fffffffffffffp-1) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffdp-1)) +(assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.0000000000001p+0)) +(assert_return (invoke "f64.div" (f64.const 0x1.0p+0) (f64.const 0x1.0000000000001p+0)) (f64.const 0x1.ffffffffffffep-1)) + +;; Test for bugs found in an early RISC-V implementation. +;; https://github.com/riscv/riscv-tests/pull/8 +(assert_return (invoke "f32.sqrt" (f32.const 0x1.56p+7)) (f32.const 0x1.a2744cp+3)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.594dfcp-23)) (f32.const 0x1.a4789cp-12)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.56p+7)) (f64.const 0x1.a2744ce9674f5p+3)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.594dfc70aa105p-23)) (f64.const 0x1.a4789c0e37f99p-12)) + +;; Computations that round differently on x87. +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0263fcc94f259p-164)) (f64.const 0x1.0131485de579fp-82)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.352dfa278c43dp+338)) (f64.const 0x1.195607dac5417p+169)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.b15daa23924fap+402)) (f64.const 0x1.4d143db561493p+201)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.518c8e68cb753p-37)) (f64.const 0x1.9fb8ef1ad5bfdp-19)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.86d8b6518078ep-370)) (f64.const 0x1.3c5142a48fcadp-185)) + +;; Test another sqrt case on x87. +;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52593 +(assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-1)) (f64.const 0x1.fffffffffffffp-1)) + +;; Computations that round differently in round-upward mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.098064p-3)) (f32.const 0x1.70b23p-2)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.d9befp+100)) (f32.const 0x1.5c4052p+50)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.42b5b6p-4)) (f32.const 0x1.1f6d0ep-2)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.3684dp-71)) (f32.const 0x1.8ebae2p-36)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.d8bc4ep-11)) (f32.const 0x1.ebf9eap-6)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.5c39f220d5704p-924)) (f64.const 0x1.2a92bc24ceae9p-462)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.53521a635745cp+727)) (f64.const 0x1.a0cfdc4ef8ff1p+363)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.dfd5bbc9f4678p+385)) (f64.const 0x1.efa817117c94cp+192)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.33f9640811cd4p+105)) (f64.const 0x1.8d17c9243baa3p+52)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.6c0ef0267ff45p+999)) (f64.const 0x1.afbcfae3f2b4p+499)) + +;; Computations that round differently in round-downward mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.26a62ep+27)) (f32.const 0x1.84685p+13)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.166002p-113)) (f32.const 0x1.798762p-57)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.3dfb5p-15)) (f32.const 0x1.937e38p-8)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.30eb2cp-120)) (f32.const 0x1.176406p-60)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.cb705cp-123)) (f32.const 0x1.e5020ap-62)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.edae8aea0543p+695)) (f64.const 0x1.f6c1ea4fc8dd2p+347)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.f7ee4bda5c9c3p-763)) (f64.const 0x1.fbf30bdaf11c5p-382)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.a48f348266ad1p-30)) (f64.const 0x1.481ee7540baf7p-15)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.feb5a1ce3ed9cp-242)) (f64.const 0x1.6995060c20d46p-121)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.957d9796e3834p+930)) (f64.const 0x1.42305213157bap+465)) + +;; Computations that round differently in round-toward-zero mode. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.65787cp+118)) (f32.const 0x1.2e82a4p+59)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.736044p+15)) (f32.const 0x1.b40e4p+7)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.a00edp-1)) (f32.const 0x1.cd8aecp-1)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.7a4c8p-87)) (f32.const 0x1.b819e4p-44)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.5d24d4p-94)) (f32.const 0x1.2af75ep-47)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.a008948ead274p+738)) (f64.const 0x1.4659b37c39b19p+369)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.70f6199ed21f5p-381)) (f64.const 0x1.b2a2bddf3300dp-191)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.35c1d49f2a352p+965)) (f64.const 0x1.8e3d9f01a9716p+482)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.3fbdcfb2b2a15p-45)) (f64.const 0x1.949ba4feca42ap-23)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.c201b94757145p-492)) (f64.const 0x1.5369ee6bf2967p-246)) + +;; Computations that round differently when computed via f32. +(assert_return_canonical_nan (invoke "f64.sqrt" (f64.const -0x1.360e8d0032adp-963))) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.d9a6f5eef0503p+103)) (f64.const 0x1.ec73f56c166f6p+51)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.aa051a5c4ec27p-760)) (f64.const 0x1.4a3e771ff5149p-380)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.e5522a741babep-276)) (f64.const 0x1.607ae2b6feb7dp-138)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.4832badc0c061p+567)) (f64.const 0x1.99ec7934139b2p+283)) + +;; Test the least value with a sqrt that rounds to one. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p+0)) (f32.const 0x1p+0)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p+0)) (f32.const 0x1.000002p+0)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p+0)) (f64.const 0x1p+0)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p+0)) (f64.const 0x1.0000000000001p+0)) + +;; Test the greatest value less than one for which sqrt is not an identity. +(assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffcp-1)) (f32.const 0x1.fffffep-1)) +(assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffap-1)) (f32.const 0x1.fffffcp-1)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1)) +(assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1)) + +;; Test that the bitwise floating point operators are bitwise on NaN. + +(assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.abs" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f64.abs" (f64.const nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.abs" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) + +(assert_return (invoke "f32.neg" (f32.const nan:0x0f1e2)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f32.neg" (f32.const -nan:0x0f1e2)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f64.neg" (f64.const nan:0x0f1e27a6b)) (f64.const -nan:0x0f1e27a6b)) +(assert_return (invoke "f64.neg" (f64.const -nan:0x0f1e27a6b)) (f64.const nan:0x0f1e27a6b)) + +(assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const nan)) (f32.const nan:0x0f1e2)) +(assert_return (invoke "f32.copysign" (f32.const -nan:0x0f1e2) (f32.const -nan)) (f32.const -nan:0x0f1e2)) +(assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const nan)) (f64.const nan:0x0f1e27a6b)) +(assert_return (invoke "f64.copysign" (f64.const -nan:0x0f1e27a6b) (f64.const -nan)) (f64.const -nan:0x0f1e27a6b)) + +;; Test values close to 1.0. +(assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep-1)) (f32.const 1.0)) +(assert_return (invoke "f32.ceil" (f32.const 0x1.000002p+0)) (f32.const 2.0)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp-1)) (f64.const 1.0)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.0000000000001p+0)) (f64.const 2.0)) + +;; Test the maximum and minimum value for which ceil is not an identity operator. +(assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) +(assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) +(assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) + +;; Test that implementations don't do the x+0x1p52-0x1p52 trick outside the +;; range where it's safe. +(assert_return (invoke "f32.ceil" (f32.const 0x1.fffffep+23)) (f32.const 0x1.fffffep+23)) +(assert_return (invoke "f32.ceil" (f32.const -0x1.fffffep+23)) (f32.const -0x1.fffffep+23)) +(assert_return (invoke "f64.ceil" (f64.const 0x1.fffffffffffffp+52)) (f64.const 0x1.fffffffffffffp+52)) +(assert_return (invoke "f64.ceil" (f64.const -0x1.fffffffffffffp+52)) (f64.const -0x1.fffffffffffffp+52)) + +;; Test values close to -1.0. +(assert_return (invoke "f32.floor" (f32.const -0x1.fffffep-1)) (f32.const -1.0)) +(assert_return (invoke "f32.floor" (f32.const -0x1.000002p+0)) (f32.const -2.0)) +(assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp-1)) (f64.const -1.0)) +(assert_return (invoke "f64.floor" (f64.const -0x1.0000000000001p+0)) (f64.const -2.0)) + +;; Test the maximum and minimum value for which floor is not an identity operator. +(assert_return (invoke "f32.floor" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) +(assert_return (invoke "f32.floor" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) +(assert_return (invoke "f64.floor" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) +(assert_return (invoke "f64.floor" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) + +;; Test that floor isn't implemented as XMVectorFloor. +;; http://dss.stephanierct.com/DevBlog/?p=8#comment-4 +(assert_return (invoke "f32.floor" (f32.const 88607.0)) (f32.const 88607.0)) +(assert_return (invoke "f64.floor" (f64.const 88607.0)) (f64.const 88607.0)) + +;; Test the maximum and minimum value for which trunc is not an identity operator. +(assert_return (invoke "f32.trunc" (f32.const -0x1.fffffep+22)) (f32.const -0x1.fffffcp+22)) +(assert_return (invoke "f32.trunc" (f32.const 0x1.fffffep+22)) (f32.const 0x1.fffffcp+22)) +(assert_return (invoke "f64.trunc" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1.ffffffffffffep+51)) +(assert_return (invoke "f64.trunc" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1.ffffffffffffep+51)) + +;; Test that nearest isn't implemented naively. +;; http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1 +;; http://blog.frama-c.com/index.php?post/2013/05/04/nearbyintf3 +(assert_return (invoke "f32.nearest" (f32.const 0x1.000002p+23)) (f32.const 0x1.000002p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.000004p+23)) (f32.const 0x1.000004p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep-2)) (f32.const 0.0)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+47)) (f32.const 0x1.fffffep+47)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000001p+52)) (f64.const 0x1.0000000000001p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.0000000000002p+52)) (f64.const 0x1.0000000000002p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp-2)) (f64.const 0.0)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+105)) (f64.const 0x1.fffffffffffffp+105)) + +;; Nearest should not round halfway cases away from zero (as C's round(3) does) +;; or up (as JS's Math.round does). +(assert_return (invoke "f32.nearest" (f32.const 4.5)) (f32.const 4.0)) +(assert_return (invoke "f32.nearest" (f32.const -4.5)) (f32.const -4.0)) +(assert_return (invoke "f32.nearest" (f32.const -3.5)) (f32.const -4.0)) +(assert_return (invoke "f64.nearest" (f64.const 4.5)) (f64.const 4.0)) +(assert_return (invoke "f64.nearest" (f64.const -4.5)) (f64.const -4.0)) +(assert_return (invoke "f64.nearest" (f64.const -3.5)) (f64.const -4.0)) + +;; Test the maximum and minimum value for which nearest is not an identity operator. +(assert_return (invoke "f32.nearest" (f32.const -0x1.fffffep+22)) (f32.const -0x1p+23)) +(assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) +(assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) +(assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) diff --git a/libraries/wasm-jit/Test/spec/forward.wast b/libraries/wasm-jit/Test/spec/forward.wast new file mode 100644 index 000000000..7074ed743 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/forward.wast @@ -0,0 +1,20 @@ +(module + (func $even (export "even") (param $n i32) (result i32) + (if (result i32) (i32.eq (get_local $n) (i32.const 0)) + (then (i32.const 1)) + (else (call $odd (i32.sub (get_local $n) (i32.const 1)))) + ) + ) + + (func $odd (export "odd") (param $n i32) (result i32) + (if (result i32) (i32.eq (get_local $n) (i32.const 0)) + (then (i32.const 0)) + (else (call $even (i32.sub (get_local $n) (i32.const 1)))) + ) + ) +) + +(assert_return (invoke "even" (i32.const 13)) (i32.const 0)) +(assert_return (invoke "even" (i32.const 20)) (i32.const 1)) +(assert_return (invoke "odd" (i32.const 13)) (i32.const 1)) +(assert_return (invoke "odd" (i32.const 20)) (i32.const 0)) diff --git a/libraries/wasm-jit/Test/spec/func.wast b/libraries/wasm-jit/Test/spec/func.wast new file mode 100644 index 000000000..41c2e65ba --- /dev/null +++ b/libraries/wasm-jit/Test/spec/func.wast @@ -0,0 +1,517 @@ +;; Test `func` declarations, i.e. functions + +(module + ;; Auxiliary definition + (type $sig (func)) + (func $dummy) + + ;; Syntax + + (func) + (func (export "f")) + (func $f) + (func $h (export "g")) + + (func (local)) + (func (local) (local)) + (func (local i32)) + (func (local $x i32)) + (func (local i32 f64 i64)) + (func (local i32) (local f64)) + (func (local i32 f32) (local $x i64) (local) (local i32 f64)) + + (func (param)) + (func (param) (param)) + (func (param i32)) + (func (param $x i32)) + (func (param i32 f64 i64)) + (func (param i32) (param f64)) + (func (param i32 f32) (param $x i64) (param) (param i32 f64)) + + (func (result i32) (unreachable)) + + (func (type $sig)) + + (func $complex + (param i32 f32) (param $x i64) (param) (param i32) + (result i32) + (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) + (unreachable) (unreachable) + ) + (func $complex-sig + (type $sig) + (local f32) (local $y i32) (local i64 i32) (local) (local f64 i32) + (unreachable) (unreachable) + ) + + + ;; Typing of locals + + (func (export "local-first-i32") (result i32) (local i32 i32) (get_local 0)) + (func (export "local-first-i64") (result i64) (local i64 i64) (get_local 0)) + (func (export "local-first-f32") (result f32) (local f32 f32) (get_local 0)) + (func (export "local-first-f64") (result f64) (local f64 f64) (get_local 0)) + (func (export "local-second-i32") (result i32) (local i32 i32) (get_local 1)) + (func (export "local-second-i64") (result i64) (local i64 i64) (get_local 1)) + (func (export "local-second-f32") (result f32) (local f32 f32) (get_local 1)) + (func (export "local-second-f64") (result f64) (local f64 f64) (get_local 1)) + (func (export "local-mixed") (result f64) + (local f32) (local $x i32) (local i64 i32) (local) (local f64 i32) + (drop (f32.neg (get_local 0))) + (drop (i32.eqz (get_local 1))) + (drop (i64.eqz (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (f64.neg (get_local 4))) + (drop (i32.eqz (get_local 5))) + (get_local 4) + ) + + ;; Typing of parameters + + (func (export "param-first-i32") (param i32 i32) (result i32) (get_local 0)) + (func (export "param-first-i64") (param i64 i64) (result i64) (get_local 0)) + (func (export "param-first-f32") (param f32 f32) (result f32) (get_local 0)) + (func (export "param-first-f64") (param f64 f64) (result f64) (get_local 0)) + (func (export "param-second-i32") (param i32 i32) (result i32) (get_local 1)) + (func (export "param-second-i64") (param i64 i64) (result i64) (get_local 1)) + (func (export "param-second-f32") (param f32 f32) (result f32) (get_local 1)) + (func (export "param-second-f64") (param f64 f64) (result f64) (get_local 1)) + (func (export "param-mixed") (param f32 i32) (param) (param $x i64) (param i32 f64 i32) + (result f64) + (drop (f32.neg (get_local 0))) + (drop (i32.eqz (get_local 1))) + (drop (i64.eqz (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (f64.neg (get_local 4))) + (drop (i32.eqz (get_local 5))) + (get_local 4) + ) + + ;; Typing of result + + (func (export "empty")) + (func (export "value-void") (call $dummy)) + (func (export "value-i32") (result i32) (i32.const 77)) + (func (export "value-i64") (result i64) (i64.const 7777)) + (func (export "value-f32") (result f32) (f32.const 77.7)) + (func (export "value-f64") (result f64) (f64.const 77.77)) + (func (export "value-block-void") (block (call $dummy) (call $dummy))) + (func (export "value-block-i32") (result i32) + (block (result i32) (call $dummy) (i32.const 77)) + ) + + (func (export "return-empty") (return)) + (func (export "return-i32") (result i32) (return (i32.const 78))) + (func (export "return-i64") (result i64) (return (i64.const 7878))) + (func (export "return-f32") (result f32) (return (f32.const 78.7))) + (func (export "return-f64") (result f64) (return (f64.const 78.78))) + (func (export "return-block-i32") (result i32) + (return (block (result i32) (call $dummy) (i32.const 77))) + ) + + (func (export "break-empty") (br 0)) + (func (export "break-i32") (result i32) (br 0 (i32.const 79))) + (func (export "break-i64") (result i64) (br 0 (i64.const 7979))) + (func (export "break-f32") (result f32) (br 0 (f32.const 79.9))) + (func (export "break-f64") (result f64) (br 0 (f64.const 79.79))) + (func (export "break-block-i32") (result i32) + (br 0 (block (result i32) (call $dummy) (i32.const 77))) + ) + + (func (export "break-br_if-empty") (param i32) + (br_if 0 (get_local 0)) + ) + (func (export "break-br_if-num") (param i32) (result i32) + (drop (br_if 0 (i32.const 50) (get_local 0))) (i32.const 51) + ) + + (func (export "break-br_table-empty") (param i32) + (br_table 0 0 0 (get_local 0)) + ) + (func (export "break-br_table-num") (param i32) (result i32) + (br_table 0 0 (i32.const 50) (get_local 0)) (i32.const 51) + ) + (func (export "break-br_table-nested-empty") (param i32) + (block (br_table 0 1 0 (get_local 0))) + ) + (func (export "break-br_table-nested-num") (param i32) (result i32) + (i32.add + (block (result i32) + (br_table 0 1 0 (i32.const 50) (get_local 0)) (i32.const 51) + ) + (i32.const 2) + ) + ) + + ;; Default initialization of locals + + (func (export "init-local-i32") (result i32) (local i32) (get_local 0)) + (func (export "init-local-i64") (result i64) (local i64) (get_local 0)) + (func (export "init-local-f32") (result f32) (local f32) (get_local 0)) + (func (export "init-local-f64") (result f64) (local f64) (get_local 0)) + + + ;; Desugaring of implicit type signature + (func $empty-sig-1) ;; should be assigned type $sig + (func $complex-sig-1 (param f64 i64 f64 i64 f64 i64 f32 i32)) + (func $empty-sig-2) ;; should be assigned type $sig + (func $complex-sig-2 (param f64 i64 f64 i64 f64 i64 f32 i32)) + (func $complex-sig-3 (param f64 i64 f64 i64 f64 i64 f32 i32)) + + (type $empty-sig-duplicate (func)) + (type $complex-sig-duplicate (func (param f64 i64 f64 i64 f64 i64 f32 i32))) + (table anyfunc + (elem + $complex-sig-3 $empty-sig-2 $complex-sig-1 $complex-sig-3 $empty-sig-1 + ) + ) + + (func (export "signature-explicit-reused") + (call_indirect $sig (i32.const 1)) + (call_indirect $sig (i32.const 4)) + ) + + (func (export "signature-implicit-reused") + ;; The implicit index 16 in this test depends on the function and + ;; type definitions, and may need adapting if they change. + (call_indirect 16 + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 0) + ) + (call_indirect 16 + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 2) + ) + (call_indirect 16 + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 3) + ) + ) + + (func (export "signature-explicit-duplicate") + (call_indirect $empty-sig-duplicate (i32.const 1)) + ) + + (func (export "signature-implicit-duplicate") + (call_indirect $complex-sig-duplicate + (f64.const 0) (i64.const 0) (f64.const 0) (i64.const 0) + (f64.const 0) (i64.const 0) (f32.const 0) (i32.const 0) + (i32.const 0) + ) + ) +) + +(assert_return (invoke "local-first-i32") (i32.const 0)) +(assert_return (invoke "local-first-i64") (i64.const 0)) +(assert_return (invoke "local-first-f32") (f32.const 0)) +(assert_return (invoke "local-first-f64") (f64.const 0)) +(assert_return (invoke "local-second-i32") (i32.const 0)) +(assert_return (invoke "local-second-i64") (i64.const 0)) +(assert_return (invoke "local-second-f32") (f32.const 0)) +(assert_return (invoke "local-second-f64") (f64.const 0)) +(assert_return (invoke "local-mixed") (f64.const 0)) + +(assert_return + (invoke "param-first-i32" (i32.const 2) (i32.const 3)) (i32.const 2) +) +(assert_return + (invoke "param-first-i64" (i64.const 2) (i64.const 3)) (i64.const 2) +) +(assert_return + (invoke "param-first-f32" (f32.const 2) (f32.const 3)) (f32.const 2) +) +(assert_return + (invoke "param-first-f64" (f64.const 2) (f64.const 3)) (f64.const 2) +) +(assert_return + (invoke "param-second-i32" (i32.const 2) (i32.const 3)) (i32.const 3) +) +(assert_return + (invoke "param-second-i64" (i64.const 2) (i64.const 3)) (i64.const 3) +) +(assert_return + (invoke "param-second-f32" (f32.const 2) (f32.const 3)) (f32.const 3) +) +(assert_return + (invoke "param-second-f64" (f64.const 2) (f64.const 3)) (f64.const 3) +) + +(assert_return + (invoke "param-mixed" + (f32.const 1) (i32.const 2) (i64.const 3) + (i32.const 4) (f64.const 5.5) (i32.const 6) + ) + (f64.const 5.5) +) + +(assert_return (invoke "empty")) +(assert_return (invoke "value-void")) +(assert_return (invoke "value-i32") (i32.const 77)) +(assert_return (invoke "value-i64") (i64.const 7777)) +(assert_return (invoke "value-f32") (f32.const 77.7)) +(assert_return (invoke "value-f64") (f64.const 77.77)) +(assert_return (invoke "value-block-void")) +(assert_return (invoke "value-block-i32") (i32.const 77)) + +(assert_return (invoke "return-empty")) +(assert_return (invoke "return-i32") (i32.const 78)) +(assert_return (invoke "return-i64") (i64.const 7878)) +(assert_return (invoke "return-f32") (f32.const 78.7)) +(assert_return (invoke "return-f64") (f64.const 78.78)) +(assert_return (invoke "return-block-i32") (i32.const 77)) + +(assert_return (invoke "break-empty")) +(assert_return (invoke "break-i32") (i32.const 79)) +(assert_return (invoke "break-i64") (i64.const 7979)) +(assert_return (invoke "break-f32") (f32.const 79.9)) +(assert_return (invoke "break-f64") (f64.const 79.79)) +(assert_return (invoke "break-block-i32") (i32.const 77)) + +(assert_return (invoke "break-br_if-empty" (i32.const 0))) +(assert_return (invoke "break-br_if-empty" (i32.const 2))) +(assert_return (invoke "break-br_if-num" (i32.const 0)) (i32.const 51)) +(assert_return (invoke "break-br_if-num" (i32.const 1)) (i32.const 50)) + +(assert_return (invoke "break-br_table-empty" (i32.const 0))) +(assert_return (invoke "break-br_table-empty" (i32.const 1))) +(assert_return (invoke "break-br_table-empty" (i32.const 5))) +(assert_return (invoke "break-br_table-empty" (i32.const -1))) +(assert_return (invoke "break-br_table-num" (i32.const 0)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const 1)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const 10)) (i32.const 50)) +(assert_return (invoke "break-br_table-num" (i32.const -100)) (i32.const 50)) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 0))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 1))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const 3))) +(assert_return (invoke "break-br_table-nested-empty" (i32.const -2))) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 0)) (i32.const 52) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 1)) (i32.const 50) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const 2)) (i32.const 52) +) +(assert_return + (invoke "break-br_table-nested-num" (i32.const -3)) (i32.const 52) +) + +(assert_return (invoke "init-local-i32") (i32.const 0)) +(assert_return (invoke "init-local-i64") (i64.const 0)) +(assert_return (invoke "init-local-f32") (f32.const 0)) +(assert_return (invoke "init-local-f64") (f64.const 0)) + +(assert_return (invoke "signature-explicit-reused")) +(assert_return (invoke "signature-implicit-reused")) +(assert_return (invoke "signature-explicit-duplicate")) +(assert_return (invoke "signature-implicit-duplicate")) + + +;; Invalid typing of locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of result + +(assert_invalid + (module (func $type-multiple-result (result i32 i32) (unreachable))) + "invalid result arity" +) +(assert_invalid + (module + (type (func (result i32 i32))) + (func $type-multiple-result (type 0) (unreachable)) + ) + "invalid result arity" +) + + +(assert_invalid + (module (func $type-empty-i32 (result i32))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64))) + "type mismatch" +) + +(assert_invalid + (module (func $type-value-void-vs-num (result i32) + (nop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-void + (i32.const 0) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result i32) + (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-last-empty-vs-num (result i32) + (return) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-last-void-vs-num (result i32) + (return (nop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-last-num-vs-num (result i32) + (return (i64.const 0)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-empty-vs-num (result i32) + (return) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-void-vs-num (result i32) + (return (nop)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-num-vs-num (result i32) + (return (i64.const 1)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-first-num-vs-num (result i32) + (return (i64.const 1)) (return (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-last-void-vs-num (result i32) + (br 0) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-last-num-vs-num (result i32) + (br 0 (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-void-vs-num (result i32) + (br 0) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-num-vs-num (result i32) + (br 0 (i64.const 1)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-first-num-vs-num (result i32) + (br 0 (i64.const 1)) (br 0 (i32.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-break-nested-empty-vs-num (result i32) + (block (br 1)) (br 0 (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-void-vs-num (result i32) + (block (br 1 (nop))) (br 0 (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-break-nested-num-vs-num (result i32) + (block (br 1 (i64.const 1))) (br 0 (i32.const 1)) + )) + "type mismatch" +) + + +;; Syntax errors + +(assert_malformed + (module quote "(func (nop) (local i32))") + "unexpected token" +) +(assert_malformed + (module quote "(func (nop) (param i32))") + "unexpected token" +) +(assert_malformed + (module quote "(func (nop) (result i32))") + "unexpected token" +) +(assert_malformed + (module quote "(func (local i32) (param i32))") + "unexpected token" +) +(assert_malformed + (module quote "(func (local i32) (result i32) (get_local 0))") + "unexpected token" +) +(assert_malformed + (module quote "(func (result i32) (param i32) (get_local 0))") + "unexpected token" +) diff --git a/libraries/wasm-jit/Test/spec/func_ptrs.wast b/libraries/wasm-jit/Test/spec/func_ptrs.wast new file mode 100644 index 000000000..f7edd9f44 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/func_ptrs.wast @@ -0,0 +1,105 @@ +(module + (type (func)) ;; 0: void -> void + (type $S (func)) ;; 1: void -> void + (type (func (param))) ;; 2: void -> void + (type (func (result i32))) ;; 3: void -> i32 + (type (func (param) (result i32))) ;; 4: void -> i32 + (type $T (func (param i32) (result i32))) ;; 5: i32 -> i32 + (type $U (func (param i32))) ;; 6: i32 -> void + + (func $print (import "spectest" "print") (type 6)) + + (func (type 0)) + (func (type $S)) + + (func (export "one") (type 4) (i32.const 13)) + (func (export "two") (type $T) (i32.add (get_local 0) (i32.const 1))) + + ;; Both signature and parameters are allowed (and required to match) + ;; since this allows the naming of parameters. + (func (export "three") (type $T) (param $a i32) (result i32) + (i32.sub (get_local 0) (i32.const 2)) + ) + + (func (export "four") (type $U) (call $print (get_local 0))) +) +(assert_return (invoke "one") (i32.const 13)) +(assert_return (invoke "two" (i32.const 13)) (i32.const 14)) +(assert_return (invoke "three" (i32.const 13)) (i32.const 11)) +(invoke "four" (i32.const 83)) + +(assert_invalid (module (elem (i32.const 0))) "unknown table") +(assert_invalid (module (elem (i32.const 0) 0) (func)) "unknown table") + +(assert_invalid + (module (table 1 anyfunc) (elem (i64.const 0))) + "type mismatch" +) +(assert_invalid + (module (table 1 anyfunc) (elem (i32.ctz (i32.const 0)))) + "constant expression required" +) +(assert_invalid + (module (table 1 anyfunc) (elem (nop))) + "constant expression required" +) + +(assert_invalid (module (func (type 42))) "unknown type") +(assert_invalid (module (import "spectest" "print" (func (type 43)))) "unknown type") + +(module + (type $T (func (param) (result i32))) + (type $U (func (param) (result i32))) + (table anyfunc (elem $t1 $t2 $t3 $u1 $u2 $t1 $t3)) + + (func $t1 (type $T) (i32.const 1)) + (func $t2 (type $T) (i32.const 2)) + (func $t3 (type $T) (i32.const 3)) + (func $u1 (type $U) (i32.const 4)) + (func $u2 (type $U) (i32.const 5)) + + (func (export "callt") (param $i i32) (result i32) + (call_indirect $T (get_local $i)) + ) + + (func (export "callu") (param $i i32) (result i32) + (call_indirect $U (get_local $i)) + ) +) + +(assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) +(assert_return (invoke "callt" (i32.const 2)) (i32.const 3)) +(assert_return (invoke "callt" (i32.const 3)) (i32.const 4)) +(assert_return (invoke "callt" (i32.const 4)) (i32.const 5)) +(assert_return (invoke "callt" (i32.const 5)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 6)) (i32.const 3)) +(assert_trap (invoke "callt" (i32.const 7)) "undefined element") +(assert_trap (invoke "callt" (i32.const 100)) "undefined element") +(assert_trap (invoke "callt" (i32.const -1)) "undefined element") + +(assert_return (invoke "callu" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callu" (i32.const 1)) (i32.const 2)) +(assert_return (invoke "callu" (i32.const 2)) (i32.const 3)) +(assert_return (invoke "callu" (i32.const 3)) (i32.const 4)) +(assert_return (invoke "callu" (i32.const 4)) (i32.const 5)) +(assert_return (invoke "callu" (i32.const 5)) (i32.const 1)) +(assert_return (invoke "callu" (i32.const 6)) (i32.const 3)) +(assert_trap (invoke "callu" (i32.const 7)) "undefined element") +(assert_trap (invoke "callu" (i32.const 100)) "undefined element") +(assert_trap (invoke "callu" (i32.const -1)) "undefined element") + +(module + (type $T (func (result i32))) + (table anyfunc (elem 0 1)) + + (func $t1 (type $T) (i32.const 1)) + (func $t2 (type $T) (i32.const 2)) + + (func (export "callt") (param $i i32) (result i32) + (call_indirect $T (get_local $i)) + ) +) + +(assert_return (invoke "callt" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "callt" (i32.const 1)) (i32.const 2)) diff --git a/libraries/wasm-jit/Test/spec/get_local.wast b/libraries/wasm-jit/Test/spec/get_local.wast new file mode 100644 index 000000000..e1f9625b9 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/get_local.wast @@ -0,0 +1,148 @@ +;; Test `get_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (result i32) (local i32) (get_local 0)) + (func (export "type-local-i64") (result i64) (local i64) (get_local 0)) + (func (export "type-local-f32") (result f32) (local f32) (get_local 0)) + (func (export "type-local-f64") (result f64) (local f64) (get_local 0)) + + (func (export "type-param-i32") (param i32) (result i32) (get_local 0)) + (func (export "type-param-i64") (param i64) (result i64) (get_local 0)) + (func (export "type-param-f32") (param f32) (result f32) (get_local 0)) + (func (export "type-param-f64") (param f64) (result f64) (get_local 0)) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) + (local f32 i64 i64 f64) + (drop (i64.eqz (get_local 0))) + (drop (f32.neg (get_local 1))) + (drop (f64.neg (get_local 2))) + (drop (i32.eqz (get_local 3))) + (drop (i32.eqz (get_local 4))) + (drop (f32.neg (get_local 5))) + (drop (i64.eqz (get_local 6))) + (drop (i64.eqz (get_local 7))) + (drop (f64.neg (get_local 8))) + ) + + ;; Reading + + (func (export "read") (param i64 f32 f64 i32 i32) (result f64) + (local f32 i64 i64 f64) + (set_local 5 (f32.const 5.5)) + (set_local 6 (i64.const 6)) + (set_local 8 (f64.const 8)) + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32") (i32.const 0)) +(assert_return (invoke "type-local-i64") (i64.const 0)) +(assert_return (invoke "type-local-f32") (f32.const 0)) +(assert_return (invoke "type-local-f64") (f64.const 0)) + +(assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 2)) +(assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 3)) +(assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 4.4)) +(assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 5.5)) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "read" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (f64.const 34.8) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + diff --git a/libraries/wasm-jit/Test/spec/globals.wast b/libraries/wasm-jit/Test/spec/globals.wast new file mode 100644 index 000000000..b8f9c8f54 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/globals.wast @@ -0,0 +1,180 @@ +;; Test globals + +(module + (global $a i32 (i32.const -2)) + (global (;1;) f32 (f32.const -3)) + (global (;2;) f64 (f64.const -4)) + (global $b i64 (i64.const -5)) + + (global $x (mut i32) (i32.const -12)) + (global (;5;) (mut f32) (f32.const -13)) + (global (;6;) (mut f64) (f64.const -14)) + (global $y (mut i64) (i64.const -15)) + + (func (export "get-a") (result i32) (get_global $a)) + (func (export "get-b") (result i64) (get_global $b)) + (func (export "get-x") (result i32) (get_global $x)) + (func (export "get-y") (result i64) (get_global $y)) + (func (export "set-x") (param i32) (set_global $x (get_local 0))) + (func (export "set-y") (param i64) (set_global $y (get_local 0))) + + (func (export "get-1") (result f32) (get_global 1)) + (func (export "get-2") (result f64) (get_global 2)) + (func (export "get-5") (result f32) (get_global 5)) + (func (export "get-6") (result f64) (get_global 6)) + (func (export "set-5") (param f32) (set_global 5 (get_local 0))) + (func (export "set-6") (param f64) (set_global 6 (get_local 0))) +) + +(assert_return (invoke "get-a") (i32.const -2)) +(assert_return (invoke "get-b") (i64.const -5)) +(assert_return (invoke "get-x") (i32.const -12)) +(assert_return (invoke "get-y") (i64.const -15)) + +(assert_return (invoke "get-1") (f32.const -3)) +(assert_return (invoke "get-2") (f64.const -4)) +(assert_return (invoke "get-5") (f32.const -13)) +(assert_return (invoke "get-6") (f64.const -14)) + +(assert_return (invoke "set-x" (i32.const 6))) +(assert_return (invoke "set-y" (i64.const 7))) +(assert_return (invoke "set-5" (f32.const 8))) +(assert_return (invoke "set-6" (f64.const 9))) + +(assert_return (invoke "get-x") (i32.const 6)) +(assert_return (invoke "get-y") (i64.const 7)) +(assert_return (invoke "get-5") (f32.const 8)) +(assert_return (invoke "get-6") (f64.const 9)) + +(assert_invalid + (module (global f32 (f32.const 0)) (func (set_global 0 (i32.const 1)))) + "global is immutable" +) + +(assert_invalid + (module (import "m" "a" (global (mut i32)))) + "mutable globals cannot be imported" +) + +(assert_invalid + (module (global (import "m" "a") (mut i32))) + "mutable globals cannot be imported" +) + +(assert_invalid + (module (global (mut f32) (f32.const 0)) (export "a" (global 0))) + "mutable globals cannot be exported" +) + +(assert_invalid + (module (global (export "a") (mut f32) (f32.const 0))) + "mutable globals cannot be exported" +) + +(assert_invalid + (module (global f32 (f32.neg (f32.const 0)))) + "constant expression required" +) + +(assert_invalid + (module (global f32 (get_local 0))) + "constant expression required" +) + +(assert_invalid + (module (global f32 (f32.neg (f32.const 1)))) + "constant expression required" +) + +(assert_invalid + (module (global i32 (i32.const 0) (nop))) + "constant expression required" +) + +(assert_invalid + (module (global i32 (nop))) + "constant expression required" +) + +(assert_invalid + (module (global i32 (f32.const 0))) + "type mismatch" +) + +(assert_invalid + (module (global i32 (i32.const 0) (i32.const 0))) + "type mismatch" +) + +(assert_invalid + (module (global i32 (;empty instruction sequence;))) + "type mismatch" +) + +(assert_invalid + (module (global i32 (get_global 0))) + "unknown global" +) + +(assert_invalid + (module (global i32 (get_global 1)) (global i32 (i32.const 0))) + "unknown global" +) + +(module + (import "spectest" "global" (global i32)) +) +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\94\80\80\80\00" ;; import section + "\01" ;; length 1 + "\08\73\70\65\63\74\65\73\74" ;; "spectest" + "\06\67\6c\6f\62\61\6c" ;; "global" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\02" ;; invalid mutability + ) + "invalid mutability" +) +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\94\80\80\80\00" ;; import section + "\01" ;; length 1 + "\08\73\70\65\63\74\65\73\74" ;; "spectest" + "\06\67\6c\6f\62\61\6c" ;; "global" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\ff" ;; invalid mutability + ) + "invalid mutability" +) + +(module + (global i32 (i32.const 0)) +) +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\06\86\80\80\80\00" ;; global section + "\01" ;; length 1 + "\7f" ;; i32 + "\02" ;; invalid mutability + "\41\00" ;; i32.const 0 + "\0b" ;; end + ) + "invalid mutability" +) +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\06\86\80\80\80\00" ;; global section + "\01" ;; length 1 + "\7f" ;; i32 + "\ff" ;; invalid mutability + "\41\00" ;; i32.const 0 + "\0b" ;; end + ) + "invalid mutability" +) diff --git a/libraries/wasm-jit/Test/spec/i32.wast b/libraries/wasm-jit/Test/spec/i32.wast new file mode 100644 index 000000000..bd8722e61 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/i32.wast @@ -0,0 +1,421 @@ +;; i32 operations + +(module + (func (export "add") (param $x i32) (param $y i32) (result i32) (i32.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x i32) (param $y i32) (result i32) (i32.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x i32) (param $y i32) (result i32) (i32.mul (get_local $x) (get_local $y))) + (func (export "div_s") (param $x i32) (param $y i32) (result i32) (i32.div_s (get_local $x) (get_local $y))) + (func (export "div_u") (param $x i32) (param $y i32) (result i32) (i32.div_u (get_local $x) (get_local $y))) + (func (export "rem_s") (param $x i32) (param $y i32) (result i32) (i32.rem_s (get_local $x) (get_local $y))) + (func (export "rem_u") (param $x i32) (param $y i32) (result i32) (i32.rem_u (get_local $x) (get_local $y))) + (func (export "and") (param $x i32) (param $y i32) (result i32) (i32.and (get_local $x) (get_local $y))) + (func (export "or") (param $x i32) (param $y i32) (result i32) (i32.or (get_local $x) (get_local $y))) + (func (export "xor") (param $x i32) (param $y i32) (result i32) (i32.xor (get_local $x) (get_local $y))) + (func (export "shl") (param $x i32) (param $y i32) (result i32) (i32.shl (get_local $x) (get_local $y))) + (func (export "shr_s") (param $x i32) (param $y i32) (result i32) (i32.shr_s (get_local $x) (get_local $y))) + (func (export "shr_u") (param $x i32) (param $y i32) (result i32) (i32.shr_u (get_local $x) (get_local $y))) + (func (export "rotl") (param $x i32) (param $y i32) (result i32) (i32.rotl (get_local $x) (get_local $y))) + (func (export "rotr") (param $x i32) (param $y i32) (result i32) (i32.rotr (get_local $x) (get_local $y))) + (func (export "clz") (param $x i32) (result i32) (i32.clz (get_local $x))) + (func (export "ctz") (param $x i32) (result i32) (i32.ctz (get_local $x))) + (func (export "popcnt") (param $x i32) (result i32) (i32.popcnt (get_local $x))) + (func (export "eqz") (param $x i32) (result i32) (i32.eqz (get_local $x))) + (func (export "eq") (param $x i32) (param $y i32) (result i32) (i32.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x i32) (param $y i32) (result i32) (i32.ne (get_local $x) (get_local $y))) + (func (export "lt_s") (param $x i32) (param $y i32) (result i32) (i32.lt_s (get_local $x) (get_local $y))) + (func (export "lt_u") (param $x i32) (param $y i32) (result i32) (i32.lt_u (get_local $x) (get_local $y))) + (func (export "le_s") (param $x i32) (param $y i32) (result i32) (i32.le_s (get_local $x) (get_local $y))) + (func (export "le_u") (param $x i32) (param $y i32) (result i32) (i32.le_u (get_local $x) (get_local $y))) + (func (export "gt_s") (param $x i32) (param $y i32) (result i32) (i32.gt_s (get_local $x) (get_local $y))) + (func (export "gt_u") (param $x i32) (param $y i32) (result i32) (i32.gt_u (get_local $x) (get_local $y))) + (func (export "ge_s") (param $x i32) (param $y i32) (result i32) (i32.ge_s (get_local $x) (get_local $y))) + (func (export "ge_u") (param $x i32) (param $y i32) (result i32) (i32.ge_u (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "add" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "add" (i32.const -1) (i32.const -1)) (i32.const -2)) +(assert_return (invoke "add" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "add" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "add" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x7fffffff)) +(assert_return (invoke "add" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "add" (i32.const 0x3fffffff) (i32.const 1)) (i32.const 0x40000000)) + +(assert_return (invoke "sub" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "sub" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x7fffffff)) +(assert_return (invoke "sub" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "sub" (i32.const 0x3fffffff) (i32.const -1)) (i32.const 0x40000000)) + +(assert_return (invoke "mul" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "mul" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "mul" (i32.const 0x10000000) (i32.const 4096)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "mul" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x80000001)) +(assert_return (invoke "mul" (i32.const 0x01234567) (i32.const 0x76543210)) (i32.const 0x358e7470)) +(assert_return (invoke "mul" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) + +(assert_trap (invoke "div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i32.const 0x80000000) (i32.const -1)) "integer overflow") +(assert_return (invoke "div_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "div_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "div_s" (i32.const 0) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "div_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "div_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0xc0000000)) +(assert_return (invoke "div_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0xffdf3b65)) +(assert_return (invoke "div_s" (i32.const 5) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const -5) (i32.const 2)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const 5) (i32.const -2)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const -5) (i32.const -2)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 7) (i32.const 3)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const -7) (i32.const 3)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const 7) (i32.const -3)) (i32.const -2)) +(assert_return (invoke "div_s" (i32.const -7) (i32.const -3)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 11) (i32.const 5)) (i32.const 2)) +(assert_return (invoke "div_s" (i32.const 17) (i32.const 7)) (i32.const 2)) + +(assert_trap (invoke "div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "div_u" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "div_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "div_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0x40000000)) +(assert_return (invoke "div_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8fef)) +(assert_return (invoke "div_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 0x20c49b)) +(assert_return (invoke "div_u" (i32.const 5) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const -5) (i32.const 2)) (i32.const 0x7ffffffd)) +(assert_return (invoke "div_u" (i32.const 5) (i32.const -2)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const -5) (i32.const -2)) (i32.const 0)) +(assert_return (invoke "div_u" (i32.const 7) (i32.const 3)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const 11) (i32.const 5)) (i32.const 2)) +(assert_return (invoke "div_u" (i32.const 17) (i32.const 7)) (i32.const 2)) + +(assert_trap (invoke "rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_s" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "rem_s" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) +(assert_return (invoke "rem_s" (i32.const 0x80000001) (i32.const 1000)) (i32.const -647)) +(assert_return (invoke "rem_s" (i32.const 5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -5) (i32.const 2)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 5) (i32.const -2)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -5) (i32.const -2)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 7) (i32.const 3)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -7) (i32.const 3)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 7) (i32.const -3)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const -7) (i32.const -3)) (i32.const -1)) +(assert_return (invoke "rem_s" (i32.const 11) (i32.const 5)) (i32.const 1)) +(assert_return (invoke "rem_s" (i32.const 17) (i32.const 7)) (i32.const 3)) + +(assert_trap (invoke "rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_u" (i32.const 0) (i32.const 0)) "integer divide by zero") +(assert_return (invoke "rem_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "rem_u" (i32.const 0x80000000) (i32.const 2)) (i32.const 0)) +(assert_return (invoke "rem_u" (i32.const 0x8ff00ff0) (i32.const 0x10001)) (i32.const 0x8001)) +(assert_return (invoke "rem_u" (i32.const 0x80000001) (i32.const 1000)) (i32.const 649)) +(assert_return (invoke "rem_u" (i32.const 5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const -5) (i32.const 2)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 5) (i32.const -2)) (i32.const 5)) +(assert_return (invoke "rem_u" (i32.const -5) (i32.const -2)) (i32.const -5)) +(assert_return (invoke "rem_u" (i32.const 7) (i32.const 3)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 11) (i32.const 5)) (i32.const 1)) +(assert_return (invoke "rem_u" (i32.const 17) (i32.const 7)) (i32.const 3)) + +(assert_return (invoke "and" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "and" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "and" (i32.const 0x7fffffff) (i32.const -1)) (i32.const 0x7fffffff)) +(assert_return (invoke "and" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xf0f0f0f0)) +(assert_return (invoke "and" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) + +(assert_return (invoke "or" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "or" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "or" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) +(assert_return (invoke "or" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) +(assert_return (invoke "or" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0xffffffff)) +(assert_return (invoke "or" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0xffffffff)) + +(assert_return (invoke "xor" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "xor" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "xor" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "xor" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "xor" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const -1)) +(assert_return (invoke "xor" (i32.const 0x80000000) (i32.const 0)) (i32.const 0x80000000)) +(assert_return (invoke "xor" (i32.const -1) (i32.const 0x80000000)) (i32.const 0x7fffffff)) +(assert_return (invoke "xor" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) +(assert_return (invoke "xor" (i32.const 0xf0f0ffff) (i32.const 0xfffff0f0)) (i32.const 0x0f0f0f0f)) +(assert_return (invoke "xor" (i32.const 0xffffffff) (i32.const 0xffffffff)) (i32.const 0)) + +(assert_return (invoke "shl" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shl" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0xfffffffe)) +(assert_return (invoke "shl" (i32.const 0xffffffff) (i32.const 1)) (i32.const 0xfffffffe)) +(assert_return (invoke "shl" (i32.const 0x80000000) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shl" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 33)) (i32.const 2)) +(assert_return (invoke "shl" (i32.const 1) (i32.const -1)) (i32.const 0x80000000)) +(assert_return (invoke "shl" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0x80000000)) + +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 1)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) +(assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 1)) (i32.const 0xc0000000)) +(assert_return (invoke "shr_s" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 33)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "shr_s" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "shr_s" (i32.const 0x80000000) (i32.const 31)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 32)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 33)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const -1)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x7fffffff)) (i32.const -1)) +(assert_return (invoke "shr_s" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) + +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 1)) (i32.const 0x7fffffff)) +(assert_return (invoke "shr_u" (i32.const 0x7fffffff) (i32.const 1)) (i32.const 0x3fffffff)) +(assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 1)) (i32.const 0x40000000)) +(assert_return (invoke "shr_u" (i32.const 0x40000000) (i32.const 1)) (i32.const 0x20000000)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 33)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "shr_u" (i32.const 1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 32)) (i32.const -1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 33)) (i32.const 0x7fffffff)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "shr_u" (i32.const -1) (i32.const 0x80000000)) (i32.const -1)) + +(assert_return (invoke "rotl" (i32.const 1) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "rotl" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "rotl" (i32.const -1) (i32.const 1)) (i32.const -1)) +(assert_return (invoke "rotl" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed)) +(assert_return (invoke "rotl" (i32.const 0xfe00dc00) (i32.const 4)) (i32.const 0xe00dc00f)) +(assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x183a5c76)) +(assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000)) +(assert_return (invoke "rotl" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x183a5c76)) +(assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0x579beed3)) +(assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3)) +(assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000)) +(assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1)) + +(assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000)) +(assert_return (invoke "rotr" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "rotr" (i32.const -1) (i32.const 1)) (i32.const -1)) +(assert_return (invoke "rotr" (i32.const 1) (i32.const 32)) (i32.const 1)) +(assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600)) +(assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000)) +(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 5)) (i32.const 0x1d860e97)) +(assert_return (invoke "rotr" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00000400)) +(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97)) +(assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5)) +(assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0xe6fbb4d5)) +(assert_return (invoke "rotr" (i32.const 1) (i32.const 31)) (i32.const 2)) +(assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1)) + +(assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0)) +(assert_return (invoke "clz" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "clz" (i32.const 0x00008000)) (i32.const 16)) +(assert_return (invoke "clz" (i32.const 0xff)) (i32.const 24)) +(assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "clz" (i32.const 1)) (i32.const 31)) +(assert_return (invoke "clz" (i32.const 2)) (i32.const 30)) +(assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1)) + +(assert_return (invoke "ctz" (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ctz" (i32.const 0)) (i32.const 32)) +(assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15)) +(assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16)) +(assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31)) +(assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0)) + +(assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32)) +(assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1)) +(assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2)) +(assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31)) +(assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16)) +(assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16)) +(assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24)) + +(assert_return (invoke "eqz" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "eqz" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "eqz" (i32.const 0xffffffff)) (i32.const 0)) + +(assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "lt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "le_s" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "le_u" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 1) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "le_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "gt_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) + +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0)) +(assert_return (invoke "ge_s" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1)) + +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const -1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0) (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const -1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i32.const -1) (i32.const 0x80000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0)) diff --git a/libraries/wasm-jit/Test/spec/i64.wast b/libraries/wasm-jit/Test/spec/i64.wast new file mode 100644 index 000000000..6bb8a31e9 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/i64.wast @@ -0,0 +1,421 @@ +;; i64 operations + +(module + (func (export "add") (param $x i64) (param $y i64) (result i64) (i64.add (get_local $x) (get_local $y))) + (func (export "sub") (param $x i64) (param $y i64) (result i64) (i64.sub (get_local $x) (get_local $y))) + (func (export "mul") (param $x i64) (param $y i64) (result i64) (i64.mul (get_local $x) (get_local $y))) + (func (export "div_s") (param $x i64) (param $y i64) (result i64) (i64.div_s (get_local $x) (get_local $y))) + (func (export "div_u") (param $x i64) (param $y i64) (result i64) (i64.div_u (get_local $x) (get_local $y))) + (func (export "rem_s") (param $x i64) (param $y i64) (result i64) (i64.rem_s (get_local $x) (get_local $y))) + (func (export "rem_u") (param $x i64) (param $y i64) (result i64) (i64.rem_u (get_local $x) (get_local $y))) + (func (export "and") (param $x i64) (param $y i64) (result i64) (i64.and (get_local $x) (get_local $y))) + (func (export "or") (param $x i64) (param $y i64) (result i64) (i64.or (get_local $x) (get_local $y))) + (func (export "xor") (param $x i64) (param $y i64) (result i64) (i64.xor (get_local $x) (get_local $y))) + (func (export "shl") (param $x i64) (param $y i64) (result i64) (i64.shl (get_local $x) (get_local $y))) + (func (export "shr_s") (param $x i64) (param $y i64) (result i64) (i64.shr_s (get_local $x) (get_local $y))) + (func (export "shr_u") (param $x i64) (param $y i64) (result i64) (i64.shr_u (get_local $x) (get_local $y))) + (func (export "rotl") (param $x i64) (param $y i64) (result i64) (i64.rotl (get_local $x) (get_local $y))) + (func (export "rotr") (param $x i64) (param $y i64) (result i64) (i64.rotr (get_local $x) (get_local $y))) + (func (export "clz") (param $x i64) (result i64) (i64.clz (get_local $x))) + (func (export "ctz") (param $x i64) (result i64) (i64.ctz (get_local $x))) + (func (export "popcnt") (param $x i64) (result i64) (i64.popcnt (get_local $x))) + (func (export "eqz") (param $x i64) (result i32) (i64.eqz (get_local $x))) + (func (export "eq") (param $x i64) (param $y i64) (result i32) (i64.eq (get_local $x) (get_local $y))) + (func (export "ne") (param $x i64) (param $y i64) (result i32) (i64.ne (get_local $x) (get_local $y))) + (func (export "lt_s") (param $x i64) (param $y i64) (result i32) (i64.lt_s (get_local $x) (get_local $y))) + (func (export "lt_u") (param $x i64) (param $y i64) (result i32) (i64.lt_u (get_local $x) (get_local $y))) + (func (export "le_s") (param $x i64) (param $y i64) (result i32) (i64.le_s (get_local $x) (get_local $y))) + (func (export "le_u") (param $x i64) (param $y i64) (result i32) (i64.le_u (get_local $x) (get_local $y))) + (func (export "gt_s") (param $x i64) (param $y i64) (result i32) (i64.gt_s (get_local $x) (get_local $y))) + (func (export "gt_u") (param $x i64) (param $y i64) (result i32) (i64.gt_u (get_local $x) (get_local $y))) + (func (export "ge_s") (param $x i64) (param $y i64) (result i32) (i64.ge_s (get_local $x) (get_local $y))) + (func (export "ge_u") (param $x i64) (param $y i64) (result i32) (i64.ge_u (get_local $x) (get_local $y))) +) + +(assert_return (invoke "add" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "add" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "add" (i64.const -1) (i64.const -1)) (i64.const -2)) +(assert_return (invoke "add" (i64.const -1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "add" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "add" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "add" (i64.const 0x3fffffff) (i64.const 1)) (i64.const 0x40000000)) + +(assert_return (invoke "sub" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "sub" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "sub" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "sub" (i64.const 0x3fffffff) (i64.const -1)) (i64.const 0x40000000)) + +(assert_return (invoke "mul" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "mul" (i64.const 1) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "mul" (i64.const 0x1000000000000000) (i64.const 4096)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "mul" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x8000000000000001)) +(assert_return (invoke "mul" (i64.const 0x0123456789abcdef) (i64.const 0xfedcba9876543210)) (i64.const 0x2236d88fe5618cf0)) +(assert_return (invoke "mul" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i64.const 1)) + +(assert_trap (invoke "div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_s" (i64.const 0x8000000000000000) (i64.const -1)) "integer overflow") +(assert_return (invoke "div_s" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "div_s" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "div_s" (i64.const 0) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "div_s" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "div_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0xc000000000000000)) +(assert_return (invoke "div_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0xffdf3b645a1cac09)) +(assert_return (invoke "div_s" (i64.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const -5) (i64.const 2)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const 5) (i64.const -2)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const -5) (i64.const -2)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 7) (i64.const 3)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const -7) (i64.const 3)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const 7) (i64.const -3)) (i64.const -2)) +(assert_return (invoke "div_s" (i64.const -7) (i64.const -3)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 11) (i64.const 5)) (i64.const 2)) +(assert_return (invoke "div_s" (i64.const 17) (i64.const 7)) (i64.const 2)) + +(assert_trap (invoke "div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "div_u" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "div_u" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "div_u" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0x4000000000000000)) +(assert_return (invoke "div_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x8ff00fef)) +(assert_return (invoke "div_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 0x20c49ba5e353f7)) +(assert_return (invoke "div_u" (i64.const 5) (i64.const 2)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const -5) (i64.const 2)) (i64.const 0x7ffffffffffffffd)) +(assert_return (invoke "div_u" (i64.const 5) (i64.const -2)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const -5) (i64.const -2)) (i64.const 0)) +(assert_return (invoke "div_u" (i64.const 7) (i64.const 3)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const 11) (i64.const 5)) (i64.const 2)) +(assert_return (invoke "div_u" (i64.const 17) (i64.const 7)) (i64.const 2)) + +(assert_trap (invoke "rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_s" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "rem_s" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) +(assert_return (invoke "rem_s" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const -807)) +(assert_return (invoke "rem_s" (i64.const 5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -5) (i64.const 2)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 5) (i64.const -2)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -5) (i64.const -2)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 7) (i64.const 3)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -7) (i64.const 3)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 7) (i64.const -3)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const -7) (i64.const -3)) (i64.const -1)) +(assert_return (invoke "rem_s" (i64.const 11) (i64.const 5)) (i64.const 1)) +(assert_return (invoke "rem_s" (i64.const 17) (i64.const 7)) (i64.const 3)) + +(assert_trap (invoke "rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "rem_u" (i64.const 0) (i64.const 0)) "integer divide by zero") +(assert_return (invoke "rem_u" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const -1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000000) (i64.const 2)) (i64.const 0)) +(assert_return (invoke "rem_u" (i64.const 0x8ff00ff00ff00ff0) (i64.const 0x100000001)) (i64.const 0x80000001)) +(assert_return (invoke "rem_u" (i64.const 0x8000000000000001) (i64.const 1000)) (i64.const 809)) +(assert_return (invoke "rem_u" (i64.const 5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const -5) (i64.const 2)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 5) (i64.const -2)) (i64.const 5)) +(assert_return (invoke "rem_u" (i64.const -5) (i64.const -2)) (i64.const -5)) +(assert_return (invoke "rem_u" (i64.const 7) (i64.const 3)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 11) (i64.const 5)) (i64.const 1)) +(assert_return (invoke "rem_u" (i64.const 17) (i64.const 7)) (i64.const 3)) + +(assert_return (invoke "and" (i64.const 1) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "and" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "and" (i64.const 0x7fffffffffffffff) (i64.const -1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "and" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xf0f0f0f0)) +(assert_return (invoke "and" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) + +(assert_return (invoke "or" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 1) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "or" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "or" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) +(assert_return (invoke "or" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "or" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0xffffffff)) +(assert_return (invoke "or" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0xffffffffffffffff)) + +(assert_return (invoke "xor" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "xor" (i64.const 0) (i64.const 1)) (i64.const 1)) +(assert_return (invoke "xor" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "xor" (i64.const 0) (i64.const 0)) (i64.const 0)) +(assert_return (invoke "xor" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i64.const -1)) +(assert_return (invoke "xor" (i64.const 0x8000000000000000) (i64.const 0)) (i64.const 0x8000000000000000)) +(assert_return (invoke "xor" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "xor" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) +(assert_return (invoke "xor" (i64.const 0xf0f0ffff) (i64.const 0xfffff0f0)) (i64.const 0x0f0f0f0f)) +(assert_return (invoke "xor" (i64.const 0xffffffffffffffff) (i64.const 0xffffffffffffffff)) (i64.const 0)) + +(assert_return (invoke "shl" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shl" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) +(assert_return (invoke "shl" (i64.const 0xffffffffffffffff) (i64.const 1)) (i64.const 0xfffffffffffffffe)) +(assert_return (invoke "shl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shl" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 65)) (i64.const 2)) +(assert_return (invoke "shl" (i64.const 1) (i64.const -1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "shl" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0x8000000000000000)) + +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) +(assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0xc000000000000000)) +(assert_return (invoke "shr_s" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 65)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) +(assert_return (invoke "shr_s" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) +(assert_return (invoke "shr_s" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 64)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 65)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const -1)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const -1)) +(assert_return (invoke "shr_s" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) + +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 1)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 1)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const 0x7fffffffffffffff) (i64.const 1)) (i64.const 0x3fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 0x4000000000000000)) +(assert_return (invoke "shr_u" (i64.const 0x4000000000000000) (i64.const 1)) (i64.const 0x2000000000000000)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 65)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const -1)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x7fffffffffffffff)) (i64.const 0)) +(assert_return (invoke "shr_u" (i64.const 1) (i64.const 0x8000000000000000)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 64)) (i64.const -1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 65)) (i64.const 0x7fffffffffffffff)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const -1)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x7fffffffffffffff)) (i64.const 1)) +(assert_return (invoke "shr_u" (i64.const -1) (i64.const 0x8000000000000000)) (i64.const -1)) + +(assert_return (invoke "rotl" (i64.const 1) (i64.const 1)) (i64.const 2)) +(assert_return (invoke "rotl" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "rotl" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "rotl" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x579b30ec048d159d)) +(assert_return (invoke "rotl" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0xe000000dc000000f)) +(assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x013579a2469deacf)) +(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e)) +(assert_return (invoke "rotl" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x013579a2469deacf)) +(assert_return (invoke "rotl" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0xcf013579ae529dea)) +(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e)) +(assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1)) + +(assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000)) +(assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1)) +(assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1)) +(assert_return (invoke "rotr" (i64.const 1) (i64.const 64)) (i64.const 1)) +(assert_return (invoke "rotr" (i64.const 0xabcd987602468ace) (i64.const 1)) (i64.const 0x55e6cc3b01234567)) +(assert_return (invoke "rotr" (i64.const 0xfe000000dc000000) (i64.const 4)) (i64.const 0x0fe000000dc00000)) +(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e)) +(assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x57a2469deacf0139)) +(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e)) +(assert_return (invoke "rotr" (i64.const 0xabcd7294ef567809) (i64.const 0xffffffffffffffed)) (i64.const 0x94a77ab3c04d5e6b)) +(assert_return (invoke "rotr" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x57a2469deacf0139)) +(assert_return (invoke "rotr" (i64.const 1) (i64.const 63)) (i64.const 2)) +(assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1)) + +(assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0)) +(assert_return (invoke "clz" (i64.const 0)) (i64.const 64)) +(assert_return (invoke "clz" (i64.const 0x00008000)) (i64.const 48)) +(assert_return (invoke "clz" (i64.const 0xff)) (i64.const 56)) +(assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "clz" (i64.const 1)) (i64.const 63)) +(assert_return (invoke "clz" (i64.const 2)) (i64.const 62)) +(assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1)) + +(assert_return (invoke "ctz" (i64.const -1)) (i64.const 0)) +(assert_return (invoke "ctz" (i64.const 0)) (i64.const 64)) +(assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15)) +(assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16)) +(assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63)) +(assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0)) + +(assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64)) +(assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1)) +(assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4)) +(assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63)) +(assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32)) +(assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32)) +(assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48)) + +(assert_return (invoke "eqz" (i64.const 0)) (i32.const 1)) +(assert_return (invoke "eqz" (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "eqz" (i64.const 0xffffffffffffffff)) (i32.const 0)) + +(assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "lt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "lt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "lt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "le_s" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "le_u" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 1) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "le_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "le_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "gt_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "gt_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) + +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_s" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0)) +(assert_return (invoke "ge_s" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1)) + +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const 1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const -1)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 1) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0)) +(assert_return (invoke "ge_u" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1)) +(assert_return (invoke "ge_u" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0)) diff --git a/libraries/wasm-jit/Test/spec/if.wast b/libraries/wasm-jit/Test/spec/if.wast new file mode 100644 index 000000000..07a9ee248 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/if.wast @@ -0,0 +1,449 @@ +;; Test `if` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "empty") (param i32) + (if (get_local 0) (then)) + (if (get_local 0) (then) (else)) + (if $l (get_local 0) (then)) + (if $l (get_local 0) (then) (else)) + ) + + (func (export "singular") (param i32) (result i32) + (if (get_local 0) (then (nop))) + (if (get_local 0) (then (nop)) (else (nop))) + (if (result i32) (get_local 0) (then (i32.const 7)) (else (i32.const 8))) + ) + + (func (export "multi") (param i32) (result i32) + (if (get_local 0) (then (call $dummy) (call $dummy) (call $dummy))) + (if (get_local 0) (then) (else (call $dummy) (call $dummy) (call $dummy))) + (if (result i32) (get_local 0) + (then (call $dummy) (call $dummy) (i32.const 8)) + (else (call $dummy) (call $dummy) (i32.const 9)) + ) + ) + + (func (export "nested") (param i32 i32) (result i32) + (if (result i32) (get_local 0) + (then + (if (get_local 1) (then (call $dummy) (block) (nop))) + (if (get_local 1) (then) (else (call $dummy) (block) (nop))) + (if (result i32) (get_local 1) + (then (call $dummy) (i32.const 9)) + (else (call $dummy) (i32.const 10)) + ) + ) + (else + (if (get_local 1) (then (call $dummy) (block) (nop))) + (if (get_local 1) (then) (else (call $dummy) (block) (nop))) + (if (result i32) (get_local 1) + (then (call $dummy) (i32.const 10)) + (else (call $dummy) (i32.const 11)) + ) + ) + ) + ) + + (func (export "as-unary-operand") (param i32) (result i32) + (i32.ctz + (if (result i32) (get_local 0) + (then (call $dummy) (i32.const 13)) + (else (call $dummy) (i32.const -13)) + ) + ) + ) + (func (export "as-binary-operand") (param i32 i32) (result i32) + (i32.mul + (if (result i32) (get_local 0) + (then (call $dummy) (i32.const 3)) + (else (call $dummy) (i32.const -3)) + ) + (if (result i32) (get_local 1) + (then (call $dummy) (i32.const 4)) + (else (call $dummy) (i32.const -5)) + ) + ) + ) + (func (export "as-test-operand") (param i32) (result i32) + (i32.eqz + (if (result i32) (get_local 0) + (then (call $dummy) (i32.const 13)) + (else (call $dummy) (i32.const 0)) + ) + ) + ) + (func (export "as-compare-operand") (param i32 i32) (result i32) + (f32.gt + (if (result f32) (get_local 0) + (then (call $dummy) (f32.const 3)) + (else (call $dummy) (f32.const -3)) + ) + (if (result f32) (get_local 1) + (then (call $dummy) (f32.const 4)) + (else (call $dummy) (f32.const -4)) + ) + ) + ) + + (func (export "break-bare") (result i32) + (if (i32.const 1) (then (br 0) (unreachable))) + (if (i32.const 1) (then (br 0) (unreachable)) (else (unreachable))) + (if (i32.const 0) (then (unreachable)) (else (br 0) (unreachable))) + (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable))) + (if (i32.const 1) (then (br_if 0 (i32.const 1)) (unreachable)) (else (unreachable))) + (if (i32.const 0) (then (unreachable)) (else (br_if 0 (i32.const 1)) (unreachable))) + (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable))) + (if (i32.const 1) (then (br_table 0 (i32.const 0)) (unreachable)) (else (unreachable))) + (if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable))) + (i32.const 19) + ) + + (func (export "break-value") (param i32) (result i32) + (if (result i32) (get_local 0) + (then (br 0 (i32.const 18)) (i32.const 19)) + (else (br 0 (i32.const 21)) (i32.const 20)) + ) + ) + + (func (export "effects") (param i32) (result i32) + (local i32) + (if + (block (result i32) (set_local 1 (i32.const 1)) (get_local 0)) + (then + (set_local 1 (i32.mul (get_local 1) (i32.const 3))) + (set_local 1 (i32.sub (get_local 1) (i32.const 5))) + (set_local 1 (i32.mul (get_local 1) (i32.const 7))) + (br 0) + (set_local 1 (i32.mul (get_local 1) (i32.const 100))) + ) + (else + (set_local 1 (i32.mul (get_local 1) (i32.const 5))) + (set_local 1 (i32.sub (get_local 1) (i32.const 7))) + (set_local 1 (i32.mul (get_local 1) (i32.const 3))) + (br 0) + (set_local 1 (i32.mul (get_local 1) (i32.const 1000))) + ) + ) + (get_local 1) + ) +) + +(assert_return (invoke "empty" (i32.const 0))) +(assert_return (invoke "empty" (i32.const 1))) +(assert_return (invoke "empty" (i32.const 100))) +(assert_return (invoke "empty" (i32.const -2))) + +(assert_return (invoke "singular" (i32.const 0)) (i32.const 8)) +(assert_return (invoke "singular" (i32.const 1)) (i32.const 7)) +(assert_return (invoke "singular" (i32.const 10)) (i32.const 7)) +(assert_return (invoke "singular" (i32.const -10)) (i32.const 7)) + +(assert_return (invoke "multi" (i32.const 0)) (i32.const 9)) +(assert_return (invoke "multi" (i32.const 1)) (i32.const 8)) +(assert_return (invoke "multi" (i32.const 13)) (i32.const 8)) +(assert_return (invoke "multi" (i32.const -5)) (i32.const 8)) + +(assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11)) +(assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10)) +(assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10)) +(assert_return (invoke "nested" (i32.const 3) (i32.const 2)) (i32.const 9)) +(assert_return (invoke "nested" (i32.const 0) (i32.const -100)) (i32.const 10)) +(assert_return (invoke "nested" (i32.const 10) (i32.const 10)) (i32.const 9)) +(assert_return (invoke "nested" (i32.const 0) (i32.const -1)) (i32.const 10)) +(assert_return (invoke "nested" (i32.const -111) (i32.const -2)) (i32.const 9)) + +(assert_return (invoke "as-unary-operand" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "as-unary-operand" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "as-unary-operand" (i32.const -1)) (i32.const 0)) + +(assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 0)) (i32.const 15)) +(assert_return (invoke "as-binary-operand" (i32.const 0) (i32.const 1)) (i32.const -12)) +(assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 0)) (i32.const -15)) +(assert_return (invoke "as-binary-operand" (i32.const 1) (i32.const 1)) (i32.const 12)) + +(assert_return (invoke "as-test-operand" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "as-test-operand" (i32.const 1)) (i32.const 0)) + +(assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "as-compare-operand" (i32.const 0) (i32.const 1)) (i32.const 0)) +(assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "as-compare-operand" (i32.const 1) (i32.const 1)) (i32.const 0)) + +(assert_return (invoke "break-bare") (i32.const 19)) +(assert_return (invoke "break-value" (i32.const 1)) (i32.const 18)) +(assert_return (invoke "break-value" (i32.const 0)) (i32.const 21)) + +(assert_return (invoke "effects" (i32.const 1)) (i32.const -14)) +(assert_return (invoke "effects" (i32.const 0)) (i32.const -6)) + +(assert_invalid + (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-empty-i32 (result i32) (if (i32.const 0) (then) (else)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-i64 (result i64) (if (i32.const 0) (then) (else)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f32 (result f32) (if (i32.const 0) (then) (else)))) + "type mismatch" +) +(assert_invalid + (module (func $type-empty-f64 (result f64) (if (i32.const 0) (then) (else)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-value-num-vs-void + (if (i32.const 1) (then (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-value-num-vs-void + (if (i32.const 1) (then (i32.const 1)) (else)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-value-num-vs-void + (if (i32.const 1) (then) (else (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-both-value-num-vs-void + (if (i32.const 1) (then (i32.const 1)) (else (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-value-empty-vs-num (result i32) + (if (result i32) (i32.const 1) (then) (else (i32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-value-empty-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i32.const 0)) (else)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-both-value-empty-vs-num (result i32) + (if (result i32) (i32.const 1) (then) (else)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-no-else-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i32.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-value-void-vs-num (result i32) + (if (result i32) (i32.const 1) (then (nop)) (else (i32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-value-void-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i32.const 0)) (else (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-both-value-void-vs-num (result i32) + (if (result i32) (i32.const 1) (then (nop)) (else (nop))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-value-num-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-value-num-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i32.const 1)) (else (i64.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-both-value-num-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i64.const 1)) (else (i64.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-both-different-value-num-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i64.const 1)) (else (f64.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-value-unreached-select (result i32) + (if (result i64) + (i32.const 0) + (then (select (unreachable) (unreachable) (unreachable))) + (else (i64.const 0)) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-value-unreached-select (result i32) + (if (result i64) + (i32.const 1) + (then (i64.const 0)) + (else (select (unreachable) (unreachable) (unreachable))) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-value-unreached-select (result i32) + (if (result i64) + (i32.const 1) + (then (select (unreachable) (unreachable) (unreachable))) + (else (select (unreachable) (unreachable) (unreachable))) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-break-last-void-vs-num (result i32) + (if (result i32) (i32.const 1) (then (br 0)) (else (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-break-last-void-vs-num (result i32) + (if (result i32) (i32.const 1) (then (i32.const 1)) (else (br 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-break-empty-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (br 0) (i32.const 1)) + (else (i32.const 1)) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-break-empty-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (i32.const 1)) + (else (br 0) (i32.const 1)) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-then-break-void-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (br 0 (nop)) (i32.const 1)) + (else (i32.const 1)) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-break-void-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (i32.const 1)) + (else (br 0 (nop)) (i32.const 1)) + ) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-then-break-num-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (br 0 (i64.const 1)) (i32.const 1)) + (else (i32.const 1)) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-else-break-num-vs-num (result i32) + (if (result i32) (i32.const 1) + (then (i32.const 1)) + (else (br 0 (i64.const 1)) (i32.const 1)) + ) + )) + "type mismatch" +) + + +(assert_malformed + (module quote "(func if end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if $a end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if else $l end)") + "mismatching label" +) +(assert_malformed + (module quote "(func if $a else $l end)") + "mismatching label" +) +(assert_malformed + (module quote "(func if else end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if else $l end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if else $l1 end $l2)") + "mismatching label" +) +(assert_malformed + (module quote "(func if $a else end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if $a else $a end $l)") + "mismatching label" +) +(assert_malformed + (module quote "(func if $a else $l end $l)") + "mismatching label" +) diff --git a/libraries/wasm-jit/Test/spec/imports.wast b/libraries/wasm-jit/Test/spec/imports.wast new file mode 100644 index 000000000..69ccd0b5d --- /dev/null +++ b/libraries/wasm-jit/Test/spec/imports.wast @@ -0,0 +1,550 @@ +;; Auxiliary module to import from + +(module + (func (export "func")) + (func (export "func-i32") (param i32)) + (func (export "func-f32") (param f32)) + (func (export "func->i32") (result i32) (i32.const 22)) + (func (export "func->f32") (result f32) (f32.const 11)) + (func (export "func-i32->i32") (param i32) (result i32) (get_local 0)) + (func (export "func-i64->i64") (param i64) (result i64) (get_local 0)) + (global (export "global-i32") i32 (i32.const 55)) + (global (export "global-f32") f32 (f32.const 44)) + (table (export "table-10-inf") 10 anyfunc) + ;; (table (export "table-10-20") 10 20 anyfunc) + (memory (export "memory-2-inf") 2) + ;; (memory (export "memory-2-4") 2 4) +) + +(register "test") + + +;; Functions + +(module + (type $func_i32 (func (param i32))) + (type $func_i64 (func (param i64))) + (type $func_f32 (func (param f32))) + (type $func_f64 (func (param f64))) + + (import "spectest" "print" (func (param i32))) + ;; JavaScript can't handle i64 yet. + ;; (func (import "spectest" "print") (param i64)) + (import "spectest" "print" (func $print_i32 (param i32))) + ;; JavaScript can't handle i64 yet. + ;; (import "spectest" "print" (func $print_i64 (param i64))) + (import "spectest" "print" (func $print_f32 (param f32))) + (import "spectest" "print" (func $print_f64 (param f64))) + (import "spectest" "print" (func $print_i32_f32 (param i32 f32))) + (import "spectest" "print" (func $print_f64_f64 (param f64 f64))) + (func $print_i32-2 (import "spectest" "print") (param i32)) + (func $print_f64-2 (import "spectest" "print") (param f64)) + (import "test" "func-i64->i64" (func $i64->i64 (param i64) (result i64))) + + (func (export "p1") (import "spectest" "print") (param i32)) + (func $p (export "p2") (import "spectest" "print") (param i32)) + (func (export "p3") (export "p4") (import "spectest" "print") (param i32)) + (func (export "p5") (import "spectest" "print") (type 0)) + (func (export "p6") (import "spectest" "print") (type 0) (param i32) (result)) + + (table anyfunc (elem $print_i32 $print_f64)) + + (func (export "print32") (param $i i32) + (local $x f32) + (set_local $x (f32.convert_s/i32 (get_local $i))) + (call 0 (get_local $i)) + (call $print_i32_f32 + (i32.add (get_local $i) (i32.const 1)) + (f32.const 42) + ) + (call $print_i32 (get_local $i)) + (call $print_i32-2 (get_local $i)) + (call $print_f32 (get_local $x)) + (call_indirect $func_i32 (get_local $i) (i32.const 0)) + ) + + (func (export "print64") (param $i i64) + (local $x f64) + (set_local $x (f64.convert_s/i64 (call $i64->i64 (get_local $i)))) + ;; JavaScript can't handle i64 yet. + ;; (call 1 (get_local $i)) + (call $print_f64_f64 + (f64.add (get_local $x) (f64.const 1)) + (f64.const 53) + ) + ;; JavaScript can't handle i64 yet. + ;; (call $print_i64 (get_local $i)) + (call $print_f64 (get_local $x)) + (call $print_f64-2 (get_local $x)) + (call_indirect $func_f64 (get_local $x) (i32.const 1)) + ) +) + +(assert_return (invoke "print32" (i32.const 13))) +(assert_return (invoke "print64" (i64.const 24))) + +(module (import "test" "func" (func))) +(module (import "test" "func-i32" (func (param i32)))) +(module (import "test" "func-f32" (func (param f32)))) +(module (import "test" "func->i32" (func (result i32)))) +(module (import "test" "func->f32" (func (result f32)))) +(module (import "test" "func-i32->i32" (func (param i32) (result i32)))) +(module (import "test" "func-i64->i64" (func (param i64) (result i64)))) + +(assert_unlinkable + (module (import "test" "unknown" (func))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "unknown" (func))) + "unknown import" +) + +(assert_unlinkable + (module (import "test" "func" (func (param i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func" (func (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func" (func (param i32) (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32" (func (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32" (func (param f32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32" (func (param i64)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32" (func (param i32) (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func->i32" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func->i32" (func (param i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func->i32" (func (result f32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func->i32" (func (result i64)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func->i32" (func (param i32) (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32->i32" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32->i32" (func (param i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "func-i32->i32" (func (result i32)))) + "type mismatch" +) + +(assert_unlinkable + (module (import "test" "global-i32" (func (result i32)))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "table-10-inf" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "memory-2-inf" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "global" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "table" (func))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "memory" (func))) + "type mismatch" +) + + +;; Globals + +(module + (import "spectest" "global" (global i32)) + (global (import "spectest" "global") i32) + + (import "spectest" "global" (global $x i32)) + (global $y (import "spectest" "global") i32) + + ;; JavaScript can't handle i64 yet. + ;; (import "spectest" "global" (global i64)) + (import "spectest" "global" (global f32)) + (import "spectest" "global" (global f64)) + + (func (export "get-0") (result i32) (get_global 0)) + (func (export "get-1") (result i32) (get_global 1)) + (func (export "get-x") (result i32) (get_global $x)) + (func (export "get-y") (result i32) (get_global $y)) +) + +(assert_return (invoke "get-0") (i32.const 666)) +(assert_return (invoke "get-1") (i32.const 666)) +(assert_return (invoke "get-x") (i32.const 666)) +(assert_return (invoke "get-y") (i32.const 666)) + +(module (import "test" "global-i32" (global i32))) +(module (import "test" "global-f32" (global f32))) + +(assert_unlinkable + (module (import "test" "unknown" (global i32))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "unknown" (global i32))) + "unknown import" +) + +(assert_unlinkable + (module (import "test" "func" (global i32))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "table-10-inf" (global i32))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "memory-2-inf" (global i32))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "print" (global i32))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "table" (global i32))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "memory" (global i32))) + "type mismatch" +) + + +;; Tables + +(module + (type (func (result i32))) + (import "spectest" "table" (table 10 20 anyfunc)) + (elem 0 (i32.const 1) $f $g) + + (func (export "call") (param i32) (result i32) (call_indirect 0 (get_local 0))) + (func $f (result i32) (i32.const 11)) + (func $g (result i32) (i32.const 22)) +) + +(assert_trap (invoke "call" (i32.const 0)) "uninitialized element") +(assert_return (invoke "call" (i32.const 1)) (i32.const 11)) +(assert_return (invoke "call" (i32.const 2)) (i32.const 22)) +(assert_trap (invoke "call" (i32.const 3)) "uninitialized element") +(assert_trap (invoke "call" (i32.const 100)) "undefined element") + + +(module + (type (func (result i32))) + (table (import "spectest" "table") 10 20 anyfunc) + (elem 0 (i32.const 1) $f $g) + + (func (export "call") (param i32) (result i32) (call_indirect 0 (get_local 0))) + (func $f (result i32) (i32.const 11)) + (func $g (result i32) (i32.const 22)) +) + +(assert_trap (invoke "call" (i32.const 0)) "uninitialized element") +(assert_return (invoke "call" (i32.const 1)) (i32.const 11)) +(assert_return (invoke "call" (i32.const 2)) (i32.const 22)) +(assert_trap (invoke "call" (i32.const 3)) "uninitialized element") +(assert_trap (invoke "call" (i32.const 100)) "undefined element") + + +(assert_invalid + (module (import "" "" (table 10 anyfunc)) (import "" "" (table 10 anyfunc))) + "multiple tables" +) +(assert_invalid + (module (import "" "" (table 10 anyfunc)) (table 10 anyfunc)) + "multiple tables" +) +(assert_invalid + (module (table 10 anyfunc) (table 10 anyfunc)) + "multiple tables" +) + +(module (import "test" "table-10-inf" (table 10 anyfunc))) +(module (import "test" "table-10-inf" (table 5 anyfunc))) +(module (import "test" "table-10-inf" (table 0 anyfunc))) +(module (import "spectest" "table" (table 10 anyfunc))) +(module (import "spectest" "table" (table 5 anyfunc))) +(module (import "spectest" "table" (table 0 anyfunc))) +(module (import "spectest" "table" (table 10 20 anyfunc))) +(module (import "spectest" "table" (table 5 20 anyfunc))) +(module (import "spectest" "table" (table 0 20 anyfunc))) +(module (import "spectest" "table" (table 10 25 anyfunc))) +(module (import "spectest" "table" (table 5 25 anyfunc))) + +(assert_unlinkable + (module (import "test" "unknown" (table 10 anyfunc))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "unknown" (table 10 anyfunc))) + "unknown import" +) + +(assert_unlinkable + (module (import "test" "table-10-inf" (table 12 anyfunc))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "test" "table-10-inf" (table 10 20 anyfunc))) + "maximum size larger than declared" +) +(assert_unlinkable + (module (import "spectest" "table" (table 12 anyfunc))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "spectest" "table" (table 10 15 anyfunc))) + "maximum size larger than declared" +) + +(assert_unlinkable + (module (import "test" "func" (table 10 anyfunc))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "global-i32" (table 10 anyfunc))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "memory-2-inf" (table 10 anyfunc))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "print" (table 10 anyfunc))) + "type mismatch" +) + + + +;; Memories + +(module + (import "spectest" "memory" (memory 1 2)) + (data 0 (i32.const 10) "\10") + + (func (export "load") (param i32) (result i32) (i32.load (get_local 0))) +) + +(assert_return (invoke "load" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "load" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) +(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") + +(module + (memory (import "spectest" "memory") 1 2) + (data 0 (i32.const 10) "\10") + + (func (export "load") (param i32) (result i32) (i32.load (get_local 0))) +) +(assert_return (invoke "load" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "load" (i32.const 10)) (i32.const 16)) +(assert_return (invoke "load" (i32.const 8)) (i32.const 0x100000)) +(assert_trap (invoke "load" (i32.const 1000000)) "out of bounds memory access") + +(assert_invalid + (module (import "" "" (memory 1)) (import "" "" (memory 1))) + "multiple memories" +) +(assert_invalid + (module (import "" "" (memory 1)) (memory 0)) + "multiple memories" +) +(assert_invalid + (module (memory 0) (memory 0)) + "multiple memories" +) + +(module (import "test" "memory-2-inf" (memory 2))) +(module (import "test" "memory-2-inf" (memory 1))) +(module (import "test" "memory-2-inf" (memory 0))) +(module (import "spectest" "memory" (memory 1))) +(module (import "spectest" "memory" (memory 0))) +(module (import "spectest" "memory" (memory 1 2))) +(module (import "spectest" "memory" (memory 0 2))) +(module (import "spectest" "memory" (memory 1 3))) +(module (import "spectest" "memory" (memory 0 3))) + +(assert_unlinkable + (module (import "test" "unknown" (memory 1))) + "unknown import" +) +(assert_unlinkable + (module (import "spectest" "unknown" (memory 1))) + "unknown import" +) + +(assert_unlinkable + (module (import "test" "memory-2-inf" (memory 3))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "test" "memory-2-inf" (memory 2 3))) + "maximum size larger than declared" +) +(assert_unlinkable + (module (import "spectest" "memory" (memory 2))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "spectest" "memory" (memory 1 1))) + "maximum size larger than declared" +) + +(assert_unlinkable + (module (import "test" "func-i32" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "global-i32" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "test" "table-10-inf" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "print" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "global" (memory 1))) + "type mismatch" +) +(assert_unlinkable + (module (import "spectest" "table" (memory 1))) + "type mismatch" +) + +(assert_unlinkable + (module (import "spectest" "memory" (memory 2))) + "actual size smaller than declared" +) +(assert_unlinkable + (module (import "spectest" "memory" (memory 1 1))) + "maximum size larger than declared" +) + +(module + (import "spectest" "memory" (memory 0 3)) ;; actual has max size 2 + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 2)) + + +;; Syntax errors + +(assert_malformed + (module quote "(func) (import \"\" \"\" (func))") + "import after function" +) +(assert_malformed + (module quote "(func) (import \"\" \"\" (global i64))") + "import after function" +) +(assert_malformed + (module quote "(func) (import \"\" \"\" (table 0 anyfunc))") + "import after function" +) +(assert_malformed + (module quote "(func) (import \"\" \"\" (memory 0))") + "import after function" +) + +(assert_malformed + (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (func))") + "import after global" +) +(assert_malformed + (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (global f32))") + "import after global" +) +(assert_malformed + (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (table 0 anyfunc))") + "import after global" +) +(assert_malformed + (module quote "(global i64 (i64.const 0)) (import \"\" \"\" (memory 0))") + "import after global" +) + +(assert_malformed + (module quote "(table 0 anyfunc) (import \"\" \"\" (func))") + "import after table" +) +(assert_malformed + (module quote "(table 0 anyfunc) (import \"\" \"\" (global i32))") + "import after table" +) +(assert_malformed + (module quote "(table 0 anyfunc) (import \"\" \"\" (table 0 anyfunc))") + "import after table" +) +(assert_malformed + (module quote "(table 0 anyfunc) (import \"\" \"\" (memory 0))") + "import after table" +) + +(assert_malformed + (module quote "(memory 0) (import \"\" \"\" (func))") + "import after memory" +) +(assert_malformed + (module quote "(memory 0) (import \"\" \"\" (global i32))") + "import after memory" +) +(assert_malformed + (module quote "(memory 0) (import \"\" \"\" (table 1 3 anyfunc))") + "import after memory" +) +(assert_malformed + (module quote "(memory 0) (import \"\" \"\" (memory 1 2))") + "import after memory" +) diff --git a/libraries/wasm-jit/Test/spec/int_exprs.wast b/libraries/wasm-jit/Test/spec/int_exprs.wast new file mode 100644 index 000000000..de6a645cf --- /dev/null +++ b/libraries/wasm-jit/Test/spec/int_exprs.wast @@ -0,0 +1,350 @@ +;; Test interesting integer "expressions". These tests contain code +;; patterns which tempt common value-changing optimizations. + +;; Test that x+1>n is not folded to x. + +(module + (func (export "i32.no_fold_shl_shr_s") (param $x i32) (result i32) + (i32.shr_s (i32.shl (get_local $x) (i32.const 1)) (i32.const 1))) + (func (export "i32.no_fold_shl_shr_u") (param $x i32) (result i32) + (i32.shr_u (i32.shl (get_local $x) (i32.const 1)) (i32.const 1))) + + (func (export "i64.no_fold_shl_shr_s") (param $x i64) (result i64) + (i64.shr_s (i64.shl (get_local $x) (i64.const 1)) (i64.const 1))) + (func (export "i64.no_fold_shl_shr_u") (param $x i64) (result i64) + (i64.shr_u (i64.shl (get_local $x) (i64.const 1)) (i64.const 1))) +) + +(assert_return (invoke "i32.no_fold_shl_shr_s" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "i32.no_fold_shl_shr_u" (i32.const 0x80000000)) (i32.const 0)) +(assert_return (invoke "i64.no_fold_shl_shr_s" (i64.const 0x8000000000000000)) (i64.const 0)) +(assert_return (invoke "i64.no_fold_shl_shr_u" (i64.const 0x8000000000000000)) (i64.const 0)) + +;; Test that x>>n<?,./ ") (result i32) (i32.const 6)) + + ;; Test that we can use names that have special meaning in JS. + (func (export "NaN") (result i32) (i32.const 7)) + (func (export "Infinity") (result i32) (i32.const 8)) + (func (export "if") (result i32) (i32.const 9)) + + ;; Test that we can use common libc names without conflict. + (func (export "malloc") (result i32) (i32.const 10)) + + ;; Test that we can use some libc hidden names without conflict. + (func (export "_malloc") (result i32) (i32.const 11)) + (func (export "__malloc") (result i32) (i32.const 12)) + + ;; Test that names are case-sensitive. + (func (export "a") (result i32) (i32.const 13)) + (func (export "A") (result i32) (i32.const 14)) + + ;; Test that UTF-8 BOM code points can appear in identifiers. + (func (export "") (result i32) (i32.const 15)) + + ;; Test that Unicode normalization is not applied. These function names + ;; contain different codepoints which normalize to the same thing under + ;; NFC or NFD. + (func (export "Å") (result i32) (i32.const 16)) + (func (export "Å") (result i32) (i32.const 17)) + (func (export "Å") (result i32) (i32.const 18)) + + ;; Test that Unicode compatibility normalization is not applied. These + ;; function names contain different codepoints which normalize to the + ;; same thing under NFKC or NFKD. + (func (export "ffi") (result i32) (i32.const 19)) + (func (export "ffi") (result i32) (i32.const 20)) + (func (export "ffi") (result i32) (i32.const 21)) + + ;; Test the C0 control codes. + (func (export "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (result i32) (i32.const 22)) + (func (export "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (result i32) (i32.const 23)) + ;; Test miscellaneous control codes. + (func (export " \7f") (result i32) (i32.const 24)) + ;; Test the C1 control codes. + (func (export "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (result i32) (i32.const 25)) + (func (export "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (result i32) (i32.const 26)) + ;; Test the Unicode Specials. + (func (export "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (result i32) (i32.const 27)) + (func (export "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (result i32) (i32.const 28)) + + ;; Test that the control pictures are distinct from the control codes they + ;; depict. These correspond to the C0 and miscellaneous control code tests + ;; above. + (func (export "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (result i32) (i32.const 29)) + (func (export "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (result i32) (i32.const 30)) + (func (export "␠␡") (result i32) (i32.const 31)) + + ;; Test the Unicode Specials in non-escaped form (excluding U+FFFE and + ;; U+FFFF, so that generic tools don't detect this file as non-UTF-8). + (func (export "￰￱￲￳￴￵￶￷￸�") (result i32) (i32.const 32)) + + ;; Test a bare ZWJ code point. + (func (export "‍") (result i32) (i32.const 33)) + ;; Test a bare ZWNJ code point. + (func (export "‌") (result i32) (i32.const 34)) + + ;; Test various bare joiner code points. + (func (export "͏") (result i32) (i32.const 35)) + (func (export "⁠") (result i32) (i32.const 36)) + (func (export "⵿") (result i32) (i32.const 37)) + (func (export "𑁿") (result i32) (i32.const 38)) + (func (export "᠎") (result i32) (i32.const 39)) + + ;; Test various interesting code points: reverse BOM, zero-width space, + ;; no-break space, soft hyphen, word joiner, ogham space mark, + ;; right-to-left override, left-to-right override. + (func (export "￯​ ­⁠ ‮‭") (result i32) (i32.const 40)) + + ;; Test more interesting code points: left-to-right mark, right-to-left mark, + ;; non-breaking hyphen, line separator, paragraph separator, + ;; left-to-right embedding, right-to-left embedding, + ;; pop directional formatting, narrow no-break space, left-to-right isolate, + ;; right-to-left isolate, first strong isolate, pop directional isolate. + (func (export "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (result i32) (i32.const 41)) + + ;; Test some deprecated code points: inhibit symmetric swapping, + ;; activate symmetric swapping, inhibit arabic form shaping, + ;; activate arabic form shaping, national digit shapes, nominal digit shapes. + (func (export "") (result i32) (i32.const 42)) + + ;; Test "invisible" operator code points. + (func (export "⁡⁢⁣⁤") (result i32) (i32.const 43)) + + ;; Test that code points outside the BMP are supported. + (func (export "𐀀󟿿􏿿") (result i32) (i32.const 44)) + + ;; Test that WebAssembly implementations cope in the presence of Zalgo. + (func (export "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (result i32) (i32.const 45)) + + ;; Test Hangul filler code points. + (func (export "ᅟᅠㅤᅠ") (result i32) (i32.const 46)) + + ;; Test variation selectors (which are also ID_Continue code points). + (func (export "︀") (result i32) (i32.const 47)) + (func (export "︄") (result i32) (i32.const 48)) + (func (export "󠄀") (result i32) (i32.const 49)) + (func (export "󠇯") (result i32) (i32.const 50)) + + ;; Test an uncombined combining code point. + (func (export "̈") (result i32) (i32.const 51)) + + ;; Test that numerous different present and historical representations of the + ;; "newline" concept are distinct. Tests largely inspired by: + ;; https://en.wikipedia.org/wiki/Newline#Representations + ;; https://en.wikipedia.org/wiki/Newline#Unicode and + ;; https://en.wikipedia.org/wiki/Newline#Reverse_and_partial_line_feeds + (func (export "\0a") (result i32) (i32.const 52)) + (func (export "␤") (result i32) (i32.const 53)) + (func (export "
") (result i32) (i32.const 54)) + (func (export "\0d") (result i32) (i32.const 55)) + (func (export "\0d\0a") (result i32) (i32.const 56)) + (func (export "\0a\0d") (result i32) (i32.const 57)) + (func (export "\1e") (result i32) (i32.const 58)) + (func (export "\0b") (result i32) (i32.const 59)) + (func (export "\0c") (result i32) (i32.const 60)) + (func (export "\c2\85") (result i32) (i32.const 61)) + (func (export "
") (result i32) (i32.const 62)) + (func (export "…") (result i32) (i32.const 63)) + (func (export "⏎") (result i32) (i32.const 64)) + (func (export "\c2\8b") (result i32) (i32.const 65)) + (func (export "\c2\8c") (result i32) (i32.const 66)) + (func (export "\c2\8d") (result i32) (i32.const 67)) + (func (export "↵") (result i32) (i32.const 68)) + (func (export "↩") (result i32) (i32.const 69)) + (func (export "⌤") (result i32) (i32.const 70)) + (func (export "⤶") (result i32) (i32.const 71)) + (func (export "↲") (result i32) (i32.const 72)) + (func (export "⮨") (result i32) (i32.const 73)) + (func (export "⮰") (result i32) (i32.const 74)) + + ;; Test that non-characters are not replaced by the replacement character. + (func (export "�") (result i32) (i32.const 75)) + (func (export "\ef\b7\90") (result i32) (i32.const 76)) + (func (export "\ef\b7\91") (result i32) (i32.const 77)) + (func (export "\ef\b7\92") (result i32) (i32.const 78)) + (func (export "\ef\b7\93") (result i32) (i32.const 79)) + (func (export "\ef\b7\94") (result i32) (i32.const 80)) + (func (export "\ef\b7\95") (result i32) (i32.const 81)) + (func (export "\ef\b7\96") (result i32) (i32.const 82)) + (func (export "\ef\b7\97") (result i32) (i32.const 83)) + (func (export "\ef\b7\98") (result i32) (i32.const 84)) + (func (export "\ef\b7\99") (result i32) (i32.const 85)) + (func (export "\ef\b7\9a") (result i32) (i32.const 86)) + (func (export "\ef\b7\9b") (result i32) (i32.const 87)) + (func (export "\ef\b7\9c") (result i32) (i32.const 88)) + (func (export "\ef\b7\9d") (result i32) (i32.const 89)) + (func (export "\ef\b7\9e") (result i32) (i32.const 90)) + (func (export "\ef\b7\9f") (result i32) (i32.const 91)) + (func (export "\ef\b7\a0") (result i32) (i32.const 92)) + (func (export "\ef\b7\a1") (result i32) (i32.const 93)) + (func (export "\ef\b7\a2") (result i32) (i32.const 94)) + (func (export "\ef\b7\a3") (result i32) (i32.const 95)) + (func (export "\ef\b7\a4") (result i32) (i32.const 96)) + (func (export "\ef\b7\a5") (result i32) (i32.const 97)) + (func (export "\ef\b7\a6") (result i32) (i32.const 98)) + (func (export "\ef\b7\a7") (result i32) (i32.const 99)) + (func (export "\ef\b7\a8") (result i32) (i32.const 100)) + (func (export "\ef\b7\a9") (result i32) (i32.const 101)) + (func (export "\ef\b7\aa") (result i32) (i32.const 102)) + (func (export "\ef\b7\ab") (result i32) (i32.const 103)) + (func (export "\ef\b7\ac") (result i32) (i32.const 104)) + (func (export "\ef\b7\ad") (result i32) (i32.const 105)) + (func (export "\ef\b7\ae") (result i32) (i32.const 106)) + (func (export "\ef\b7\af") (result i32) (i32.const 107)) + (func (export "\ef\bf\be") (result i32) (i32.const 108)) + (func (export "\ef\bf\bf") (result i32) (i32.const 109)) + (func (export "\f0\9f\bf\be") (result i32) (i32.const 110)) + (func (export "\f0\9f\bf\bf") (result i32) (i32.const 111)) + (func (export "\f0\af\bf\be") (result i32) (i32.const 112)) + (func (export "\f0\af\bf\bf") (result i32) (i32.const 113)) + (func (export "\f0\bf\bf\be") (result i32) (i32.const 114)) + (func (export "\f0\bf\bf\bf") (result i32) (i32.const 115)) + (func (export "\f1\8f\bf\be") (result i32) (i32.const 116)) + (func (export "\f1\8f\bf\bf") (result i32) (i32.const 117)) + (func (export "\f1\9f\bf\be") (result i32) (i32.const 118)) + (func (export "\f1\9f\bf\bf") (result i32) (i32.const 119)) + (func (export "\f1\af\bf\be") (result i32) (i32.const 120)) + (func (export "\f1\af\bf\bf") (result i32) (i32.const 121)) + (func (export "\f1\bf\bf\be") (result i32) (i32.const 122)) + (func (export "\f1\bf\bf\bf") (result i32) (i32.const 123)) + (func (export "\f2\8f\bf\be") (result i32) (i32.const 124)) + (func (export "\f2\8f\bf\bf") (result i32) (i32.const 125)) + (func (export "\f2\9f\bf\be") (result i32) (i32.const 126)) + (func (export "\f2\9f\bf\bf") (result i32) (i32.const 127)) + (func (export "\f2\af\bf\be") (result i32) (i32.const 128)) + (func (export "\f2\af\bf\bf") (result i32) (i32.const 129)) + (func (export "\f2\bf\bf\be") (result i32) (i32.const 130)) + (func (export "\f2\bf\bf\bf") (result i32) (i32.const 131)) + (func (export "\f3\8f\bf\be") (result i32) (i32.const 132)) + (func (export "\f3\8f\bf\bf") (result i32) (i32.const 133)) + (func (export "\f3\9f\bf\be") (result i32) (i32.const 134)) + (func (export "\f3\9f\bf\bf") (result i32) (i32.const 135)) + (func (export "\f3\af\bf\be") (result i32) (i32.const 136)) + (func (export "\f3\af\bf\bf") (result i32) (i32.const 137)) + (func (export "\f3\bf\bf\be") (result i32) (i32.const 138)) + (func (export "\f3\bf\bf\bf") (result i32) (i32.const 139)) + (func (export "\f4\8f\bf\be") (result i32) (i32.const 140)) + (func (export "\f4\8f\bf\bf") (result i32) (i32.const 141)) + + ;; Test an interrobang with combining diacritical marks above. + ;; https://xkcd.com/1209/ + (func (export "̈‽̈̉") (result i32) (i32.const 142)) + + ;; Test that RLM/LRM don't change the logical byte order. + (func (export "abc") (result i32) (i32.const 143)) + (func (export "‭abc") (result i32) (i32.const 144)) + (func (export "‮cba") (result i32) (i32.const 145)) + (func (export "‭abc‮") (result i32) (i32.const 146)) + (func (export "‮cba‭") (result i32) (i32.const 147)) + + ;; Test that Unicode font variations are preserved. + (func (export "𝑨") (result i32) (i32.const 148)) + (func (export "𝐴") (result i32) (i32.const 149)) + (func (export "𝘈") (result i32) (i32.const 150)) + (func (export "𝘼") (result i32) (i32.const 151)) + (func (export "𝐀") (result i32) (i32.const 152)) + (func (export "𝓐") (result i32) (i32.const 153)) + (func (export "𝕬") (result i32) (i32.const 154)) + (func (export "𝗔") (result i32) (i32.const 155)) + (func (export "𝒜") (result i32) (i32.const 156)) + (func (export "𝔄") (result i32) (i32.const 157)) + (func (export "𝔸") (result i32) (i32.const 158)) + (func (export "𝖠") (result i32) (i32.const 159)) + (func (export "𝙰") (result i32) (i32.const 160)) + (func (export "ᴀ") (result i32) (i32.const 161)) + + ;; Test that various additional letter variations are preserved. + ;; (U+0040, U+0061, U+0041, U+00C5, U+0041 U+030A, U+212B, and the font + ;; variations are covered above.) + (func (export "ᴬ") (result i32) (i32.const 162)) + (func (export "Ⓐ") (result i32) (i32.const 163)) + (func (export "A") (result i32) (i32.const 164)) + (func (export "🄐") (result i32) (i32.const 165)) + (func (export "🄰") (result i32) (i32.const 166)) + (func (export "󠁁") (result i32) (i32.const 167)) + (func (export "U+0041") (result i32) (i32.const 168)) + (func (export "A​") (result i32) (i32.const 169)) + (func (export "А") (result i32) (i32.const 170)) + (func (export "Ꙗ") (result i32) (i32.const 171)) + (func (export "ⷼ") (result i32) (i32.const 172)) + (func (export "ⷶ") (result i32) (i32.const 173)) + (func (export "Ɐ") (result i32) (i32.const 174)) + (func (export "🅐") (result i32) (i32.const 175)) + (func (export "🅰") (result i32) (i32.const 176)) + (func (export "Ⱝ") (result i32) (i32.const 177)) + (func (export "𐐂") (result i32) (i32.const 178)) + (func (export "𐐈") (result i32) (i32.const 179)) + (func (export "𐒰") (result i32) (i32.const 180)) + (func (export "À") (result i32) (i32.const 181)) + (func (export "Á") (result i32) (i32.const 182)) + (func (export "Â") (result i32) (i32.const 183)) + (func (export "Ã") (result i32) (i32.const 184)) + (func (export "Ä") (result i32) (i32.const 185)) + (func (export "Ā") (result i32) (i32.const 186)) + (func (export "Ă") (result i32) (i32.const 187)) + (func (export "Ą") (result i32) (i32.const 188)) + (func (export "Ǎ") (result i32) (i32.const 189)) + (func (export "Ǟ") (result i32) (i32.const 190)) + (func (export "Ǡ") (result i32) (i32.const 191)) + (func (export "Ǻ") (result i32) (i32.const 192)) + (func (export "Ȁ") (result i32) (i32.const 193)) + (func (export "Ȃ") (result i32) (i32.const 194)) + (func (export "Ȧ") (result i32) (i32.const 195)) + (func (export "Ⱥ") (result i32) (i32.const 196)) + (func (export "Ӑ") (result i32) (i32.const 197)) + (func (export "Ӓ") (result i32) (i32.const 198)) + (func (export "ߊ") (result i32) (i32.const 199)) + (func (export "ࠡ") (result i32) (i32.const 200)) + (func (export "ࠢ") (result i32) (i32.const 201)) + (func (export "ࠣ") (result i32) (i32.const 202)) + (func (export "ࠤ") (result i32) (i32.const 203)) + (func (export "ࠥ") (result i32) (i32.const 204)) + (func (export "ऄ") (result i32) (i32.const 205)) + (func (export "अ") (result i32) (i32.const 206)) + (func (export "ॲ") (result i32) (i32.const 207)) + (func (export "অ") (result i32) (i32.const 208)) + (func (export "ਅ") (result i32) (i32.const 209)) + (func (export "અ") (result i32) (i32.const 210)) + (func (export "ଅ") (result i32) (i32.const 211)) + (func (export "அ") (result i32) (i32.const 212)) + (func (export "అ") (result i32) (i32.const 213)) + (func (export "ಅ") (result i32) (i32.const 214)) + (func (export "അ") (result i32) (i32.const 215)) + (func (export "ะ") (result i32) (i32.const 216)) + (func (export "ະ") (result i32) (i32.const 217)) + (func (export "༁") (result i32) (i32.const 218)) + (func (export "ཨ") (result i32) (i32.const 219)) + (func (export "ྸ") (result i32) (i32.const 220)) + (func (export "အ") (result i32) (i32.const 221)) + (func (export "ဢ") (result i32) (i32.const 222)) + (func (export "ႜ") (result i32) (i32.const 223)) + (func (export "ᅡ") (result i32) (i32.const 224)) + (func (export "አ") (result i32) (i32.const 225)) + (func (export "ዐ") (result i32) (i32.const 226)) + (func (export "Ꭰ") (result i32) (i32.const 227)) + (func (export "ᐊ") (result i32) (i32.const 228)) + (func (export "ᖳ") (result i32) (i32.const 229)) + (func (export "ᚨ") (result i32) (i32.const 230)) + (func (export "ᚪ") (result i32) (i32.const 231)) + (func (export "ᛆ") (result i32) (i32.const 232)) + (func (export "ᜀ") (result i32) (i32.const 233)) + (func (export "ᜠ") (result i32) (i32.const 234)) + (func (export "ᝀ") (result i32) (i32.const 235)) + (func (export "ᝠ") (result i32) (i32.const 236)) + (func (export "ᠠ") (result i32) (i32.const 237)) + (func (export "ᢇ") (result i32) (i32.const 238)) + (func (export "ᤠ") (result i32) (i32.const 239)) + (func (export "ᥣ") (result i32) (i32.const 240)) + (func (export "ᨕ") (result i32) (i32.const 241)) + (func (export "ᩋ") (result i32) (i32.const 242)) + (func (export "ᩡ") (result i32) (i32.const 243)) + (func (export "ᮃ") (result i32) (i32.const 244)) + (func (export "ᯀ") (result i32) (i32.const 245)) + (func (export "ᯁ") (result i32) (i32.const 246)) + (func (export "ᰣ") (result i32) (i32.const 247)) + (func (export "Ḁ") (result i32) (i32.const 248)) + (func (export "Ạ") (result i32) (i32.const 249)) + (func (export "Ả") (result i32) (i32.const 250)) + (func (export "Ấ") (result i32) (i32.const 251)) + (func (export "Ầ") (result i32) (i32.const 252)) + (func (export "Ẩ") (result i32) (i32.const 253)) + (func (export "Ẫ") (result i32) (i32.const 254)) + (func (export "Ậ") (result i32) (i32.const 255)) + (func (export "Ắ") (result i32) (i32.const 256)) + (func (export "Ằ") (result i32) (i32.const 257)) + (func (export "Ẳ") (result i32) (i32.const 258)) + (func (export "Ẵ") (result i32) (i32.const 259)) + (func (export "Ặ") (result i32) (i32.const 260)) + (func (export "あ") (result i32) (i32.const 261)) + (func (export "ア") (result i32) (i32.const 262)) + (func (export "ㄚ") (result i32) (i32.const 263)) + (func (export "ㅏ") (result i32) (i32.const 264)) + (func (export "㈎") (result i32) (i32.const 265)) + (func (export "㈏") (result i32) (i32.const 266)) + (func (export "㈐") (result i32) (i32.const 267)) + (func (export "㈑") (result i32) (i32.const 268)) + (func (export "㈒") (result i32) (i32.const 269)) + (func (export "㈓") (result i32) (i32.const 270)) + (func (export "㈔") (result i32) (i32.const 271)) + (func (export "㈕") (result i32) (i32.const 272)) + (func (export "㈖") (result i32) (i32.const 273)) + (func (export "㈗") (result i32) (i32.const 274)) + (func (export "㈘") (result i32) (i32.const 275)) + (func (export "㈙") (result i32) (i32.const 276)) + (func (export "㈚") (result i32) (i32.const 277)) + (func (export "㈛") (result i32) (i32.const 278)) + (func (export "㉮") (result i32) (i32.const 279)) + (func (export "㉯") (result i32) (i32.const 280)) + (func (export "㉰") (result i32) (i32.const 281)) + (func (export "㉱") (result i32) (i32.const 282)) + (func (export "㉲") (result i32) (i32.const 283)) + (func (export "㉳") (result i32) (i32.const 284)) + (func (export "㉴") (result i32) (i32.const 285)) + (func (export "㉵") (result i32) (i32.const 286)) + (func (export "㉶") (result i32) (i32.const 287)) + (func (export "㉷") (result i32) (i32.const 288)) + (func (export "㉸") (result i32) (i32.const 289)) + (func (export "㉹") (result i32) (i32.const 290)) + (func (export "㉺") (result i32) (i32.const 291)) + (func (export "㉻") (result i32) (i32.const 292)) + (func (export "㋐") (result i32) (i32.const 293)) + (func (export "ꀊ") (result i32) (i32.const 294)) + (func (export "ꓮ") (result i32) (i32.const 295)) + (func (export "ꕉ") (result i32) (i32.const 296)) + (func (export "ꚠ") (result i32) (i32.const 297)) + (func (export "ꠀ") (result i32) (i32.const 298)) + (func (export "ꠣ") (result i32) (i32.const 299)) + (func (export "ꡝ") (result i32) (i32.const 300)) + (func (export "ꢂ") (result i32) (i32.const 301)) + (func (export "꣪") (result i32) (i32.const 302)) + (func (export "ꤢ") (result i32) (i32.const 303)) + (func (export "ꥆ") (result i32) (i32.const 304)) + (func (export "ꦄ") (result i32) (i32.const 305)) + (func (export "ꨀ") (result i32) (i32.const 306)) + (func (export "ア") (result i32) (i32.const 307)) + (func (export "ᅡ") (result i32) (i32.const 308)) + (func (export "𐀀") (result i32) (i32.const 309)) + (func (export "𐊀") (result i32) (i32.const 310)) + (func (export "𐊠") (result i32) (i32.const 311)) + (func (export "𐌀") (result i32) (i32.const 312)) + (func (export "𐎠") (result i32) (i32.const 313)) + (func (export "𐒖") (result i32) (i32.const 314)) + (func (export "𐔀") (result i32) (i32.const 315)) + (func (export "𐝀") (result i32) (i32.const 316)) + (func (export "𐠀") (result i32) (i32.const 317)) + (func (export "𐤠") (result i32) (i32.const 318)) + (func (export "𐦀") (result i32) (i32.const 319)) + (func (export "𐦠") (result i32) (i32.const 320)) + (func (export "𐨀") (result i32) (i32.const 321)) + (func (export "𐬀") (result i32) (i32.const 322)) + (func (export "𐰀") (result i32) (i32.const 323)) + (func (export "𐰁") (result i32) (i32.const 324)) + (func (export "𐲀") (result i32) (i32.const 325)) + (func (export "𑀅") (result i32) (i32.const 326)) + (func (export "𑂃") (result i32) (i32.const 327)) + (func (export "𑄧") (result i32) (i32.const 328)) + (func (export "𑅐") (result i32) (i32.const 329)) + (func (export "𑆃") (result i32) (i32.const 330)) + (func (export "𑈀") (result i32) (i32.const 331)) + (func (export "𑊀") (result i32) (i32.const 332)) + (func (export "𑊰") (result i32) (i32.const 333)) + (func (export "𑌅") (result i32) (i32.const 334)) + (func (export "𑍰") (result i32) (i32.const 335)) + (func (export "𑐀") (result i32) (i32.const 336)) + (func (export "𑒁") (result i32) (i32.const 337)) + (func (export "𑖀") (result i32) (i32.const 338)) + (func (export "𑘀") (result i32) (i32.const 339)) + (func (export "𑚀") (result i32) (i32.const 340)) + (func (export "𑜒") (result i32) (i32.const 341)) + (func (export "𑜠") (result i32) (i32.const 342)) + (func (export "𑢡") (result i32) (i32.const 343)) + (func (export "𑫕") (result i32) (i32.const 344)) + (func (export "𑰀") (result i32) (i32.const 345)) + (func (export "𑲏") (result i32) (i32.const 346)) + (func (export "𑲯") (result i32) (i32.const 347)) + (func (export "𒀀") (result i32) (i32.const 348)) + (func (export "𖧕") (result i32) (i32.const 349)) + (func (export "𖩆") (result i32) (i32.const 350)) + (func (export "𖫧") (result i32) (i32.const 351)) + (func (export "𖽔") (result i32) (i32.const 352)) + (func (export "𛱁") (result i32) (i32.const 353)) + (func (export "𛱤") (result i32) (i32.const 354)) + (func (export "𞠣") (result i32) (i32.const 355)) + (func (export "🇦") (result i32) (i32.const 356)) + (func (export "Ɑ") (result i32) (i32.const 357)) + (func (export "Λ") (result i32) (i32.const 358)) + (func (export "Ɒ") (result i32) (i32.const 359)) + (func (export "ª") (result i32) (i32.const 360)) + (func (export "∀") (result i32) (i32.const 361)) + (func (export "₳") (result i32) (i32.const 362)) + (func (export "𐤀") (result i32) (i32.const 363)) + (func (export "Ⲁ") (result i32) (i32.const 364)) + (func (export "𐌰") (result i32) (i32.const 365)) + (func (export "Ά") (result i32) (i32.const 366)) + (func (export "Α") (result i32) (i32.const 367)) + (func (export "Ἀ") (result i32) (i32.const 368)) + (func (export "Ἁ") (result i32) (i32.const 369)) + (func (export "Ἂ") (result i32) (i32.const 370)) + (func (export "Ἃ") (result i32) (i32.const 371)) + (func (export "Ἄ") (result i32) (i32.const 372)) + (func (export "Ἅ") (result i32) (i32.const 373)) + (func (export "Ἆ") (result i32) (i32.const 374)) + (func (export "Ἇ") (result i32) (i32.const 375)) + (func (export "ᾈ") (result i32) (i32.const 376)) + (func (export "ᾉ") (result i32) (i32.const 377)) + (func (export "ᾊ") (result i32) (i32.const 378)) + (func (export "ᾋ") (result i32) (i32.const 379)) + (func (export "ᾌ") (result i32) (i32.const 380)) + (func (export "ᾍ") (result i32) (i32.const 381)) + (func (export "ᾎ") (result i32) (i32.const 382)) + (func (export "ᾏ") (result i32) (i32.const 383)) + (func (export "Ᾰ") (result i32) (i32.const 384)) + (func (export "Ᾱ") (result i32) (i32.const 385)) + (func (export "Ὰ") (result i32) (i32.const 386)) + (func (export "Ά") (result i32) (i32.const 387)) + (func (export "ᾼ") (result i32) (i32.const 388)) + (func (export "𝚨") (result i32) (i32.const 389)) + (func (export "𝛢") (result i32) (i32.const 390)) + (func (export "𝜜") (result i32) (i32.const 391)) + (func (export "𝝖") (result i32) (i32.const 392)) + (func (export "𝞐") (result i32) (i32.const 393)) + (func (export "⍶") (result i32) (i32.const 394)) + (func (export "⍺") (result i32) (i32.const 395)) + (func (export "⩜") (result i32) (i32.const 396)) + (func (export "ᗅ") (result i32) (i32.const 397)) + (func (export "Ꭺ") (result i32) (i32.const 398)) + + ;; Test unmatched "closing" and "opening" code points. + (func (export ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (result i32) (i32.const 399)) + (func (export "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (result i32) (i32.const 400)) + (func (export "𝪋𝪤") (result i32) (i32.const 401)) + (func (export "𝪋") (result i32) (i32.const 402)) + + ;; Test that Unicode fraction normalization is not applied. + (func (export "½") (result i32) (i32.const 403)) + (func (export "1⁄2") (result i32) (i32.const 404)) + (func (export "1/2") (result i32) (i32.const 405)) + (func (export "୳") (result i32) (i32.const 406)) + (func (export "൴") (result i32) (i32.const 407)) + (func (export "⳽") (result i32) (i32.const 408)) + (func (export "꠱") (result i32) (i32.const 409)) + (func (export "𐅁") (result i32) (i32.const 410)) + (func (export "𐅵") (result i32) (i32.const 411)) + (func (export "𐅶") (result i32) (i32.const 412)) + (func (export "𐦽") (result i32) (i32.const 413)) + (func (export "𐹻") (result i32) (i32.const 414)) + + ;; Test a full-width quote. + (func (export """) (result i32) (i32.const 415)) + + ;; Test that different present and historical representations of the "delete" + ;; concept are distinct. + (func (export "\7f") (result i32) (i32.const 416)) + (func (export "\08") (result i32) (i32.const 417)) + (func (export "⌫") (result i32) (i32.const 418)) + (func (export "⌦") (result i32) (i32.const 419)) + (func (export "␈") (result i32) (i32.const 420)) + (func (export "␡") (result i32) (i32.const 421)) + (func (export "᷻") (result i32) (i32.const 422)) + (func (export "\0f") (result i32) (i32.const 423)) + (func (export "←") (result i32) (i32.const 424)) + (func (export "⌧") (result i32) (i32.const 425)) + (func (export "⍒") (result i32) (i32.const 426)) + (func (export "⍔") (result i32) (i32.const 427)) + (func (export "⍢") (result i32) (i32.const 428)) + (func (export "⍫") (result i32) (i32.const 429)) + + ;; Test that different representations of the "substitute" concept are + ;; distinct. (U+FFFD is covered above.) + (func (export "\1a") (result i32) (i32.const 430)) + (func (export "␦") (result i32) (i32.const 431)) + (func (export "␚") (result i32) (i32.const 432)) + (func (export "") (result i32) (i32.const 433)) + (func (export "?") (result i32) (i32.const 434)) + (func (export "¿") (result i32) (i32.const 435)) + (func (export "᥅") (result i32) (i32.const 436)) + (func (export ";") (result i32) (i32.const 437)) + (func (export "՞") (result i32) (i32.const 438)) + (func (export "؟") (result i32) (i32.const 439)) + (func (export "፧") (result i32) (i32.const 440)) + (func (export "⁇") (result i32) (i32.const 441)) + (func (export "⍰") (result i32) (i32.const 442)) + (func (export "❓") (result i32) (i32.const 443)) + (func (export "❔") (result i32) (i32.const 444)) + (func (export "⳺") (result i32) (i32.const 445)) + (func (export "⳻") (result i32) (i32.const 446)) + (func (export "⸮") (result i32) (i32.const 447)) + (func (export "㉄") (result i32) (i32.const 448)) + (func (export "꘏") (result i32) (i32.const 449)) + (func (export "꛷") (result i32) (i32.const 450)) + (func (export "︖") (result i32) (i32.const 451)) + (func (export "﹖") (result i32) (i32.const 452)) + (func (export "?") (result i32) (i32.const 453)) + (func (export "𑅃") (result i32) (i32.const 454)) + (func (export "𞥟") (result i32) (i32.const 455)) + (func (export "󠀿") (result i32) (i32.const 456)) + (func (export "𖡄") (result i32) (i32.const 457)) + (func (export "⯑") (result i32) (i32.const 458)) + + ;; Test that different present and historical representations of the + ;; "paragraph" concept are distinct. (U+2029 is covered above). + (func (export "¶") (result i32) (i32.const 459)) + (func (export "⁋") (result i32) (i32.const 460)) + (func (export "܀") (result i32) (i32.const 461)) + (func (export "჻") (result i32) (i32.const 462)) + (func (export "፨") (result i32) (i32.const 463)) + (func (export "〷") (result i32) (i32.const 464)) + (func (export "❡") (result i32) (i32.const 465)) + (func (export "⸏") (result i32) (i32.const 466)) + (func (export "⸐") (result i32) (i32.const 467)) + (func (export "⸑") (result i32) (i32.const 468)) + (func (export "⸎") (result i32) (i32.const 469)) + (func (export "\14") (result i32) (i32.const 470)) ;; ¶ in CP437 + (func (export "☙") (result i32) (i32.const 471)) +) + +(assert_return (invoke "") (i32.const 0)) +(assert_return (invoke "0") (i32.const 1)) +(assert_return (invoke "-0") (i32.const 2)) +(assert_return (invoke "_") (i32.const 3)) +(assert_return (invoke "$") (i32.const 4)) +(assert_return (invoke "@") (i32.const 5)) +(assert_return (invoke "~!@#$%^&*()_+`-={}|[]\\:\";'<>?,./ ") (i32.const 6)) +(assert_return (invoke "NaN") (i32.const 7)) +(assert_return (invoke "Infinity") (i32.const 8)) +(assert_return (invoke "if") (i32.const 9)) +(assert_return (invoke "malloc") (i32.const 10)) +(assert_return (invoke "_malloc") (i32.const 11)) +(assert_return (invoke "__malloc") (i32.const 12)) +(assert_return (invoke "a") (i32.const 13)) +(assert_return (invoke "A") (i32.const 14)) +(assert_return (invoke "") (i32.const 15)) +(assert_return (invoke "Å") (i32.const 16)) +(assert_return (invoke "Å") (i32.const 17)) +(assert_return (invoke "Å") (i32.const 18)) +(assert_return (invoke "ffi") (i32.const 19)) +(assert_return (invoke "ffi") (i32.const 20)) +(assert_return (invoke "ffi") (i32.const 21)) +(assert_return (invoke "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f") (i32.const 22)) +(assert_return (invoke "\10\11\12\13\14\15\16\17\18\19\1a\1b\1c\1d\1e\1f") (i32.const 23)) +(assert_return (invoke " \7f") (i32.const 24)) +(assert_return (invoke "\c2\80\c2\81\c2\82\c2\83\c2\84\c2\85\c2\86\c2\87\c2\88\c2\89\c2\8a\c2\8b\c2\8c\c2\8d\c2\8e\c2\8f") (i32.const 25)) +(assert_return (invoke "\c2\90\c2\91\c2\92\c2\93\c2\94\c2\95\c2\96\c2\97\c2\98\c2\99\c2\9a\c2\9b\c2\9c\c2\9d\c2\9e\c2\9f") (i32.const 26)) +(assert_return (invoke "\ef\bf\b0\ef\bf\b1\ef\bf\b2\ef\bf\b3\ef\bf\b4\ef\bf\b5\ef\bf\b6\ef\bf\b7") (i32.const 27)) +(assert_return (invoke "\ef\bf\b8\ef\bf\b9\ef\bf\ba\ef\bf\bb\ef\bf\bc\ef\bf\bd\ef\bf\be\ef\bf\bf") (i32.const 28)) +(assert_return (invoke "␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏") (i32.const 29)) +(assert_return (invoke "␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟") (i32.const 30)) +(assert_return (invoke "␠␡") (i32.const 31)) +(assert_return (invoke "￰￱￲￳￴￵￶￷￸�") (i32.const 32)) +(assert_return (invoke "‍") (i32.const 33)) +(assert_return (invoke "‌") (i32.const 34)) +(assert_return (invoke "͏") (i32.const 35)) +(assert_return (invoke "⁠") (i32.const 36)) +(assert_return (invoke "⵿") (i32.const 37)) +(assert_return (invoke "𑁿") (i32.const 38)) +(assert_return (invoke "᠎") (i32.const 39)) +(assert_return (invoke "￯​ ­⁠ ‮‭") (i32.const 40)) +(assert_return (invoke "‎‏‑

‪‫‬ ⁦⁧⁨⁩") (i32.const 41)) +(assert_return (invoke "") (i32.const 42)) +(assert_return (invoke "⁡⁢⁣⁤") (i32.const 43)) +(assert_return (invoke "𐀀󟿿􏿿") (i32.const 44)) +(assert_return (invoke "Z̴͇̫̥̪͓͈͔͎̗̞̺̯̱̞̙̱̜̖̠̏͆̆͛͌͘͞ḁ̶̰̳̭͙̲̱̹̝͎̼͗ͨ̎̄̆͗̿̀́͟͡l̶̷͉̩̹̫̝͖̙̲̼͇͚͍̮͎̥̞̈́͊͗ͦ̈́ͫ̇́̚ͅͅg̶͕͔͚̩̓̐̅ͮ̔̐̎̂̏̾͊̍͋͊ͧ́̆ͦ͞o̡͋̔͐ͪͩ͏̢̧̫̙̤̮͖͙͓̺̜̩̼̘̠́") (i32.const 45)) +(assert_return (invoke "ᅟᅠㅤᅠ") (i32.const 46)) +(assert_return (invoke "︀") (i32.const 47)) +(assert_return (invoke "︄") (i32.const 48)) +(assert_return (invoke "󠄀") (i32.const 49)) +(assert_return (invoke "󠇯") (i32.const 50)) +(assert_return (invoke "̈") (i32.const 51)) +(assert_return (invoke "\0a") (i32.const 52)) +(assert_return (invoke "␤") (i32.const 53)) +(assert_return (invoke "
") (i32.const 54)) +(assert_return (invoke "\0d") (i32.const 55)) +(assert_return (invoke "\0d\0a") (i32.const 56)) +(assert_return (invoke "\0a\0d") (i32.const 57)) +(assert_return (invoke "\1e") (i32.const 58)) +(assert_return (invoke "\0b") (i32.const 59)) +(assert_return (invoke "\0c") (i32.const 60)) +(assert_return (invoke "\c2\85") (i32.const 61)) +(assert_return (invoke "
") (i32.const 62)) +(assert_return (invoke "…") (i32.const 63)) +(assert_return (invoke "⏎") (i32.const 64)) +(assert_return (invoke "\c2\8b") (i32.const 65)) +(assert_return (invoke "\c2\8c") (i32.const 66)) +(assert_return (invoke "\c2\8d") (i32.const 67)) +(assert_return (invoke "↵") (i32.const 68)) +(assert_return (invoke "↩") (i32.const 69)) +(assert_return (invoke "⌤") (i32.const 70)) +(assert_return (invoke "⤶") (i32.const 71)) +(assert_return (invoke "↲") (i32.const 72)) +(assert_return (invoke "⮨") (i32.const 73)) +(assert_return (invoke "⮰") (i32.const 74)) +(assert_return (invoke "�") (i32.const 75)) +(assert_return (invoke "\ef\b7\90") (i32.const 76)) +(assert_return (invoke "\ef\b7\91") (i32.const 77)) +(assert_return (invoke "\ef\b7\92") (i32.const 78)) +(assert_return (invoke "\ef\b7\93") (i32.const 79)) +(assert_return (invoke "\ef\b7\94") (i32.const 80)) +(assert_return (invoke "\ef\b7\95") (i32.const 81)) +(assert_return (invoke "\ef\b7\96") (i32.const 82)) +(assert_return (invoke "\ef\b7\97") (i32.const 83)) +(assert_return (invoke "\ef\b7\98") (i32.const 84)) +(assert_return (invoke "\ef\b7\99") (i32.const 85)) +(assert_return (invoke "\ef\b7\9a") (i32.const 86)) +(assert_return (invoke "\ef\b7\9b") (i32.const 87)) +(assert_return (invoke "\ef\b7\9c") (i32.const 88)) +(assert_return (invoke "\ef\b7\9d") (i32.const 89)) +(assert_return (invoke "\ef\b7\9e") (i32.const 90)) +(assert_return (invoke "\ef\b7\9f") (i32.const 91)) +(assert_return (invoke "\ef\b7\a0") (i32.const 92)) +(assert_return (invoke "\ef\b7\a1") (i32.const 93)) +(assert_return (invoke "\ef\b7\a2") (i32.const 94)) +(assert_return (invoke "\ef\b7\a3") (i32.const 95)) +(assert_return (invoke "\ef\b7\a4") (i32.const 96)) +(assert_return (invoke "\ef\b7\a5") (i32.const 97)) +(assert_return (invoke "\ef\b7\a6") (i32.const 98)) +(assert_return (invoke "\ef\b7\a7") (i32.const 99)) +(assert_return (invoke "\ef\b7\a8") (i32.const 100)) +(assert_return (invoke "\ef\b7\a9") (i32.const 101)) +(assert_return (invoke "\ef\b7\aa") (i32.const 102)) +(assert_return (invoke "\ef\b7\ab") (i32.const 103)) +(assert_return (invoke "\ef\b7\ac") (i32.const 104)) +(assert_return (invoke "\ef\b7\ad") (i32.const 105)) +(assert_return (invoke "\ef\b7\ae") (i32.const 106)) +(assert_return (invoke "\ef\b7\af") (i32.const 107)) +(assert_return (invoke "\ef\bf\be") (i32.const 108)) +(assert_return (invoke "\ef\bf\bf") (i32.const 109)) +(assert_return (invoke "\f0\9f\bf\be") (i32.const 110)) +(assert_return (invoke "\f0\9f\bf\bf") (i32.const 111)) +(assert_return (invoke "\f0\af\bf\be") (i32.const 112)) +(assert_return (invoke "\f0\af\bf\bf") (i32.const 113)) +(assert_return (invoke "\f0\bf\bf\be") (i32.const 114)) +(assert_return (invoke "\f0\bf\bf\bf") (i32.const 115)) +(assert_return (invoke "\f1\8f\bf\be") (i32.const 116)) +(assert_return (invoke "\f1\8f\bf\bf") (i32.const 117)) +(assert_return (invoke "\f1\9f\bf\be") (i32.const 118)) +(assert_return (invoke "\f1\9f\bf\bf") (i32.const 119)) +(assert_return (invoke "\f1\af\bf\be") (i32.const 120)) +(assert_return (invoke "\f1\af\bf\bf") (i32.const 121)) +(assert_return (invoke "\f1\bf\bf\be") (i32.const 122)) +(assert_return (invoke "\f1\bf\bf\bf") (i32.const 123)) +(assert_return (invoke "\f2\8f\bf\be") (i32.const 124)) +(assert_return (invoke "\f2\8f\bf\bf") (i32.const 125)) +(assert_return (invoke "\f2\9f\bf\be") (i32.const 126)) +(assert_return (invoke "\f2\9f\bf\bf") (i32.const 127)) +(assert_return (invoke "\f2\af\bf\be") (i32.const 128)) +(assert_return (invoke "\f2\af\bf\bf") (i32.const 129)) +(assert_return (invoke "\f2\bf\bf\be") (i32.const 130)) +(assert_return (invoke "\f2\bf\bf\bf") (i32.const 131)) +(assert_return (invoke "\f3\8f\bf\be") (i32.const 132)) +(assert_return (invoke "\f3\8f\bf\bf") (i32.const 133)) +(assert_return (invoke "\f3\9f\bf\be") (i32.const 134)) +(assert_return (invoke "\f3\9f\bf\bf") (i32.const 135)) +(assert_return (invoke "\f3\af\bf\be") (i32.const 136)) +(assert_return (invoke "\f3\af\bf\bf") (i32.const 137)) +(assert_return (invoke "\f3\bf\bf\be") (i32.const 138)) +(assert_return (invoke "\f3\bf\bf\bf") (i32.const 139)) +(assert_return (invoke "\f4\8f\bf\be") (i32.const 140)) +(assert_return (invoke "\f4\8f\bf\bf") (i32.const 141)) +(assert_return (invoke "̈‽̈̉") (i32.const 142)) +(assert_return (invoke "abc") (i32.const 143)) +(assert_return (invoke "‭abc") (i32.const 144)) +(assert_return (invoke "‮cba") (i32.const 145)) +(assert_return (invoke "‭abc‮") (i32.const 146)) +(assert_return (invoke "‮cba‭") (i32.const 147)) +(assert_return (invoke "𝑨") (i32.const 148)) +(assert_return (invoke "𝐴") (i32.const 149)) +(assert_return (invoke "𝘈") (i32.const 150)) +(assert_return (invoke "𝘼") (i32.const 151)) +(assert_return (invoke "𝐀") (i32.const 152)) +(assert_return (invoke "𝓐") (i32.const 153)) +(assert_return (invoke "𝕬") (i32.const 154)) +(assert_return (invoke "𝗔") (i32.const 155)) +(assert_return (invoke "𝒜") (i32.const 156)) +(assert_return (invoke "𝔄") (i32.const 157)) +(assert_return (invoke "𝔸") (i32.const 158)) +(assert_return (invoke "𝖠") (i32.const 159)) +(assert_return (invoke "𝙰") (i32.const 160)) +(assert_return (invoke "ᴀ") (i32.const 161)) +(assert_return (invoke "ᴬ") (i32.const 162)) +(assert_return (invoke "Ⓐ") (i32.const 163)) +(assert_return (invoke "A") (i32.const 164)) +(assert_return (invoke "🄐") (i32.const 165)) +(assert_return (invoke "🄰") (i32.const 166)) +(assert_return (invoke "󠁁") (i32.const 167)) +(assert_return (invoke "U+0041") (i32.const 168)) +(assert_return (invoke "A​") (i32.const 169)) +(assert_return (invoke "А") (i32.const 170)) +(assert_return (invoke "Ꙗ") (i32.const 171)) +(assert_return (invoke "ⷼ") (i32.const 172)) +(assert_return (invoke "ⷶ") (i32.const 173)) +(assert_return (invoke "Ɐ") (i32.const 174)) +(assert_return (invoke "🅐") (i32.const 175)) +(assert_return (invoke "🅰") (i32.const 176)) +(assert_return (invoke "Ⱝ") (i32.const 177)) +(assert_return (invoke "𐐂") (i32.const 178)) +(assert_return (invoke "𐐈") (i32.const 179)) +(assert_return (invoke "𐒰") (i32.const 180)) +(assert_return (invoke "À") (i32.const 181)) +(assert_return (invoke "Á") (i32.const 182)) +(assert_return (invoke "Â") (i32.const 183)) +(assert_return (invoke "Ã") (i32.const 184)) +(assert_return (invoke "Ä") (i32.const 185)) +(assert_return (invoke "Ā") (i32.const 186)) +(assert_return (invoke "Ă") (i32.const 187)) +(assert_return (invoke "Ą") (i32.const 188)) +(assert_return (invoke "Ǎ") (i32.const 189)) +(assert_return (invoke "Ǟ") (i32.const 190)) +(assert_return (invoke "Ǡ") (i32.const 191)) +(assert_return (invoke "Ǻ") (i32.const 192)) +(assert_return (invoke "Ȁ") (i32.const 193)) +(assert_return (invoke "Ȃ") (i32.const 194)) +(assert_return (invoke "Ȧ") (i32.const 195)) +(assert_return (invoke "Ⱥ") (i32.const 196)) +(assert_return (invoke "Ӑ") (i32.const 197)) +(assert_return (invoke "Ӓ") (i32.const 198)) +(assert_return (invoke "ߊ") (i32.const 199)) +(assert_return (invoke "ࠡ") (i32.const 200)) +(assert_return (invoke "ࠢ") (i32.const 201)) +(assert_return (invoke "ࠣ") (i32.const 202)) +(assert_return (invoke "ࠤ") (i32.const 203)) +(assert_return (invoke "ࠥ") (i32.const 204)) +(assert_return (invoke "ऄ") (i32.const 205)) +(assert_return (invoke "अ") (i32.const 206)) +(assert_return (invoke "ॲ") (i32.const 207)) +(assert_return (invoke "অ") (i32.const 208)) +(assert_return (invoke "ਅ") (i32.const 209)) +(assert_return (invoke "અ") (i32.const 210)) +(assert_return (invoke "ଅ") (i32.const 211)) +(assert_return (invoke "அ") (i32.const 212)) +(assert_return (invoke "అ") (i32.const 213)) +(assert_return (invoke "ಅ") (i32.const 214)) +(assert_return (invoke "അ") (i32.const 215)) +(assert_return (invoke "ะ") (i32.const 216)) +(assert_return (invoke "ະ") (i32.const 217)) +(assert_return (invoke "༁") (i32.const 218)) +(assert_return (invoke "ཨ") (i32.const 219)) +(assert_return (invoke "ྸ") (i32.const 220)) +(assert_return (invoke "အ") (i32.const 221)) +(assert_return (invoke "ဢ") (i32.const 222)) +(assert_return (invoke "ႜ") (i32.const 223)) +(assert_return (invoke "ᅡ") (i32.const 224)) +(assert_return (invoke "አ") (i32.const 225)) +(assert_return (invoke "ዐ") (i32.const 226)) +(assert_return (invoke "Ꭰ") (i32.const 227)) +(assert_return (invoke "ᐊ") (i32.const 228)) +(assert_return (invoke "ᖳ") (i32.const 229)) +(assert_return (invoke "ᚨ") (i32.const 230)) +(assert_return (invoke "ᚪ") (i32.const 231)) +(assert_return (invoke "ᛆ") (i32.const 232)) +(assert_return (invoke "ᜀ") (i32.const 233)) +(assert_return (invoke "ᜠ") (i32.const 234)) +(assert_return (invoke "ᝀ") (i32.const 235)) +(assert_return (invoke "ᝠ") (i32.const 236)) +(assert_return (invoke "ᠠ") (i32.const 237)) +(assert_return (invoke "ᢇ") (i32.const 238)) +(assert_return (invoke "ᤠ") (i32.const 239)) +(assert_return (invoke "ᥣ") (i32.const 240)) +(assert_return (invoke "ᨕ") (i32.const 241)) +(assert_return (invoke "ᩋ") (i32.const 242)) +(assert_return (invoke "ᩡ") (i32.const 243)) +(assert_return (invoke "ᮃ") (i32.const 244)) +(assert_return (invoke "ᯀ") (i32.const 245)) +(assert_return (invoke "ᯁ") (i32.const 246)) +(assert_return (invoke "ᰣ") (i32.const 247)) +(assert_return (invoke "Ḁ") (i32.const 248)) +(assert_return (invoke "Ạ") (i32.const 249)) +(assert_return (invoke "Ả") (i32.const 250)) +(assert_return (invoke "Ấ") (i32.const 251)) +(assert_return (invoke "Ầ") (i32.const 252)) +(assert_return (invoke "Ẩ") (i32.const 253)) +(assert_return (invoke "Ẫ") (i32.const 254)) +(assert_return (invoke "Ậ") (i32.const 255)) +(assert_return (invoke "Ắ") (i32.const 256)) +(assert_return (invoke "Ằ") (i32.const 257)) +(assert_return (invoke "Ẳ") (i32.const 258)) +(assert_return (invoke "Ẵ") (i32.const 259)) +(assert_return (invoke "Ặ") (i32.const 260)) +(assert_return (invoke "あ") (i32.const 261)) +(assert_return (invoke "ア") (i32.const 262)) +(assert_return (invoke "ㄚ") (i32.const 263)) +(assert_return (invoke "ㅏ") (i32.const 264)) +(assert_return (invoke "㈎") (i32.const 265)) +(assert_return (invoke "㈏") (i32.const 266)) +(assert_return (invoke "㈐") (i32.const 267)) +(assert_return (invoke "㈑") (i32.const 268)) +(assert_return (invoke "㈒") (i32.const 269)) +(assert_return (invoke "㈓") (i32.const 270)) +(assert_return (invoke "㈔") (i32.const 271)) +(assert_return (invoke "㈕") (i32.const 272)) +(assert_return (invoke "㈖") (i32.const 273)) +(assert_return (invoke "㈗") (i32.const 274)) +(assert_return (invoke "㈘") (i32.const 275)) +(assert_return (invoke "㈙") (i32.const 276)) +(assert_return (invoke "㈚") (i32.const 277)) +(assert_return (invoke "㈛") (i32.const 278)) +(assert_return (invoke "㉮") (i32.const 279)) +(assert_return (invoke "㉯") (i32.const 280)) +(assert_return (invoke "㉰") (i32.const 281)) +(assert_return (invoke "㉱") (i32.const 282)) +(assert_return (invoke "㉲") (i32.const 283)) +(assert_return (invoke "㉳") (i32.const 284)) +(assert_return (invoke "㉴") (i32.const 285)) +(assert_return (invoke "㉵") (i32.const 286)) +(assert_return (invoke "㉶") (i32.const 287)) +(assert_return (invoke "㉷") (i32.const 288)) +(assert_return (invoke "㉸") (i32.const 289)) +(assert_return (invoke "㉹") (i32.const 290)) +(assert_return (invoke "㉺") (i32.const 291)) +(assert_return (invoke "㉻") (i32.const 292)) +(assert_return (invoke "㋐") (i32.const 293)) +(assert_return (invoke "ꀊ") (i32.const 294)) +(assert_return (invoke "ꓮ") (i32.const 295)) +(assert_return (invoke "ꕉ") (i32.const 296)) +(assert_return (invoke "ꚠ") (i32.const 297)) +(assert_return (invoke "ꠀ") (i32.const 298)) +(assert_return (invoke "ꠣ") (i32.const 299)) +(assert_return (invoke "ꡝ") (i32.const 300)) +(assert_return (invoke "ꢂ") (i32.const 301)) +(assert_return (invoke "꣪") (i32.const 302)) +(assert_return (invoke "ꤢ") (i32.const 303)) +(assert_return (invoke "ꥆ") (i32.const 304)) +(assert_return (invoke "ꦄ") (i32.const 305)) +(assert_return (invoke "ꨀ") (i32.const 306)) +(assert_return (invoke "ア") (i32.const 307)) +(assert_return (invoke "ᅡ") (i32.const 308)) +(assert_return (invoke "𐀀") (i32.const 309)) +(assert_return (invoke "𐊀") (i32.const 310)) +(assert_return (invoke "𐊠") (i32.const 311)) +(assert_return (invoke "𐌀") (i32.const 312)) +(assert_return (invoke "𐎠") (i32.const 313)) +(assert_return (invoke "𐒖") (i32.const 314)) +(assert_return (invoke "𐔀") (i32.const 315)) +(assert_return (invoke "𐝀") (i32.const 316)) +(assert_return (invoke "𐠀") (i32.const 317)) +(assert_return (invoke "𐤠") (i32.const 318)) +(assert_return (invoke "𐦀") (i32.const 319)) +(assert_return (invoke "𐦠") (i32.const 320)) +(assert_return (invoke "𐨀") (i32.const 321)) +(assert_return (invoke "𐬀") (i32.const 322)) +(assert_return (invoke "𐰀") (i32.const 323)) +(assert_return (invoke "𐰁") (i32.const 324)) +(assert_return (invoke "𐲀") (i32.const 325)) +(assert_return (invoke "𑀅") (i32.const 326)) +(assert_return (invoke "𑂃") (i32.const 327)) +(assert_return (invoke "𑄧") (i32.const 328)) +(assert_return (invoke "𑅐") (i32.const 329)) +(assert_return (invoke "𑆃") (i32.const 330)) +(assert_return (invoke "𑈀") (i32.const 331)) +(assert_return (invoke "𑊀") (i32.const 332)) +(assert_return (invoke "𑊰") (i32.const 333)) +(assert_return (invoke "𑌅") (i32.const 334)) +(assert_return (invoke "𑍰") (i32.const 335)) +(assert_return (invoke "𑐀") (i32.const 336)) +(assert_return (invoke "𑒁") (i32.const 337)) +(assert_return (invoke "𑖀") (i32.const 338)) +(assert_return (invoke "𑘀") (i32.const 339)) +(assert_return (invoke "𑚀") (i32.const 340)) +(assert_return (invoke "𑜒") (i32.const 341)) +(assert_return (invoke "𑜠") (i32.const 342)) +(assert_return (invoke "𑢡") (i32.const 343)) +(assert_return (invoke "𑫕") (i32.const 344)) +(assert_return (invoke "𑰀") (i32.const 345)) +(assert_return (invoke "𑲏") (i32.const 346)) +(assert_return (invoke "𑲯") (i32.const 347)) +(assert_return (invoke "𒀀") (i32.const 348)) +(assert_return (invoke "𖧕") (i32.const 349)) +(assert_return (invoke "𖩆") (i32.const 350)) +(assert_return (invoke "𖫧") (i32.const 351)) +(assert_return (invoke "𖽔") (i32.const 352)) +(assert_return (invoke "𛱁") (i32.const 353)) +(assert_return (invoke "𛱤") (i32.const 354)) +(assert_return (invoke "𞠣") (i32.const 355)) +(assert_return (invoke "🇦") (i32.const 356)) +(assert_return (invoke "Ɑ") (i32.const 357)) +(assert_return (invoke "Λ") (i32.const 358)) +(assert_return (invoke "Ɒ") (i32.const 359)) +(assert_return (invoke "ª") (i32.const 360)) +(assert_return (invoke "∀") (i32.const 361)) +(assert_return (invoke "₳") (i32.const 362)) +(assert_return (invoke "𐤀") (i32.const 363)) +(assert_return (invoke "Ⲁ") (i32.const 364)) +(assert_return (invoke "𐌰") (i32.const 365)) +(assert_return (invoke "Ά") (i32.const 366)) +(assert_return (invoke "Α") (i32.const 367)) +(assert_return (invoke "Ἀ") (i32.const 368)) +(assert_return (invoke "Ἁ") (i32.const 369)) +(assert_return (invoke "Ἂ") (i32.const 370)) +(assert_return (invoke "Ἃ") (i32.const 371)) +(assert_return (invoke "Ἄ") (i32.const 372)) +(assert_return (invoke "Ἅ") (i32.const 373)) +(assert_return (invoke "Ἆ") (i32.const 374)) +(assert_return (invoke "Ἇ") (i32.const 375)) +(assert_return (invoke "ᾈ") (i32.const 376)) +(assert_return (invoke "ᾉ") (i32.const 377)) +(assert_return (invoke "ᾊ") (i32.const 378)) +(assert_return (invoke "ᾋ") (i32.const 379)) +(assert_return (invoke "ᾌ") (i32.const 380)) +(assert_return (invoke "ᾍ") (i32.const 381)) +(assert_return (invoke "ᾎ") (i32.const 382)) +(assert_return (invoke "ᾏ") (i32.const 383)) +(assert_return (invoke "Ᾰ") (i32.const 384)) +(assert_return (invoke "Ᾱ") (i32.const 385)) +(assert_return (invoke "Ὰ") (i32.const 386)) +(assert_return (invoke "Ά") (i32.const 387)) +(assert_return (invoke "ᾼ") (i32.const 388)) +(assert_return (invoke "𝚨") (i32.const 389)) +(assert_return (invoke "𝛢") (i32.const 390)) +(assert_return (invoke "𝜜") (i32.const 391)) +(assert_return (invoke "𝝖") (i32.const 392)) +(assert_return (invoke "𝞐") (i32.const 393)) +(assert_return (invoke "⍶") (i32.const 394)) +(assert_return (invoke "⍺") (i32.const 395)) +(assert_return (invoke "⩜") (i32.const 396)) +(assert_return (invoke "ᗅ") (i32.const 397)) +(assert_return (invoke "Ꭺ") (i32.const 398)) +(assert_return (invoke ")˺˼𔗏𝅴𝅶𝅸𝅺⁾₎❩❫⟯﴿︶﹚)⦆󠀩❳❵⟧⟩⟫⟭⦈⦊⦖⸣⸥︘︸︺︼︾﹀﹂﹄﹈﹜﹞]}」󠁝󠁽»’”›❯") (i32.const 399)) +(assert_return (invoke "(˹˻𔗎𝅳𝅵𝅷𝅹⁽₍❨❪⟮﴾︵﹙(⦅󠀨❲❴⟦⟨⟪⟬⦇⦉⦕⸢⸤︗︷︹︻︽︿﹁﹃﹇﹛﹝[{「󠁛󠁻«‘“‹❮") (i32.const 400)) +(assert_return (invoke "𝪋𝪤") (i32.const 401)) +(assert_return (invoke "𝪋") (i32.const 402)) +(assert_return (invoke "½") (i32.const 403)) +(assert_return (invoke "1⁄2") (i32.const 404)) +(assert_return (invoke "1/2") (i32.const 405)) +(assert_return (invoke "୳") (i32.const 406)) +(assert_return (invoke "൴") (i32.const 407)) +(assert_return (invoke "⳽") (i32.const 408)) +(assert_return (invoke "꠱") (i32.const 409)) +(assert_return (invoke "𐅁") (i32.const 410)) +(assert_return (invoke "𐅵") (i32.const 411)) +(assert_return (invoke "𐅶") (i32.const 412)) +(assert_return (invoke "𐦽") (i32.const 413)) +(assert_return (invoke "𐹻") (i32.const 414)) +(assert_return (invoke """) (i32.const 415)) +(assert_return (invoke "\7f") (i32.const 416)) +(assert_return (invoke "\08") (i32.const 417)) +(assert_return (invoke "⌫") (i32.const 418)) +(assert_return (invoke "⌦") (i32.const 419)) +(assert_return (invoke "␈") (i32.const 420)) +(assert_return (invoke "␡") (i32.const 421)) +(assert_return (invoke "᷻") (i32.const 422)) +(assert_return (invoke "\0f") (i32.const 423)) +(assert_return (invoke "←") (i32.const 424)) +(assert_return (invoke "⌧") (i32.const 425)) +(assert_return (invoke "⍒") (i32.const 426)) +(assert_return (invoke "⍔") (i32.const 427)) +(assert_return (invoke "⍢") (i32.const 428)) +(assert_return (invoke "⍫") (i32.const 429)) +(assert_return (invoke "\1a") (i32.const 430)) +(assert_return (invoke "␦") (i32.const 431)) +(assert_return (invoke "␚") (i32.const 432)) +(assert_return (invoke "") (i32.const 433)) +(assert_return (invoke "?") (i32.const 434)) +(assert_return (invoke "¿") (i32.const 435)) +(assert_return (invoke "᥅") (i32.const 436)) +(assert_return (invoke ";") (i32.const 437)) +(assert_return (invoke "՞") (i32.const 438)) +(assert_return (invoke "؟") (i32.const 439)) +(assert_return (invoke "፧") (i32.const 440)) +(assert_return (invoke "⁇") (i32.const 441)) +(assert_return (invoke "⍰") (i32.const 442)) +(assert_return (invoke "❓") (i32.const 443)) +(assert_return (invoke "❔") (i32.const 444)) +(assert_return (invoke "⳺") (i32.const 445)) +(assert_return (invoke "⳻") (i32.const 446)) +(assert_return (invoke "⸮") (i32.const 447)) +(assert_return (invoke "㉄") (i32.const 448)) +(assert_return (invoke "꘏") (i32.const 449)) +(assert_return (invoke "꛷") (i32.const 450)) +(assert_return (invoke "︖") (i32.const 451)) +(assert_return (invoke "﹖") (i32.const 452)) +(assert_return (invoke "?") (i32.const 453)) +(assert_return (invoke "𑅃") (i32.const 454)) +(assert_return (invoke "𞥟") (i32.const 455)) +(assert_return (invoke "󠀿") (i32.const 456)) +(assert_return (invoke "𖡄") (i32.const 457)) +(assert_return (invoke "⯑") (i32.const 458)) +(assert_return (invoke "¶") (i32.const 459)) +(assert_return (invoke "⁋") (i32.const 460)) +(assert_return (invoke "܀") (i32.const 461)) +(assert_return (invoke "჻") (i32.const 462)) +(assert_return (invoke "፨") (i32.const 463)) +(assert_return (invoke "〷") (i32.const 464)) +(assert_return (invoke "❡") (i32.const 465)) +(assert_return (invoke "⸏") (i32.const 466)) +(assert_return (invoke "⸐") (i32.const 467)) +(assert_return (invoke "⸑") (i32.const 468)) +(assert_return (invoke "⸎") (i32.const 469)) +(assert_return (invoke "\14") (i32.const 470)) +(assert_return (invoke "☙") (i32.const 471)) + +(module + ;; Test that we can use indices instead of names to reference imports, + ;; exports, functions and parameters. + (import "spectest" "print" (func (param i32))) + (func (import "spectest" "print") (param i32)) + (func (param i32) (param i32) + (call 0 (get_local 0)) + (call 1 (get_local 1)) + ) + (export "print32" (func 2)) +) + +(invoke "print32" (i32.const 42) (i32.const 123)) diff --git a/libraries/wasm-jit/Test/spec/nop.wast b/libraries/wasm-jit/Test/spec/nop.wast new file mode 100644 index 000000000..286231558 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/nop.wast @@ -0,0 +1,264 @@ +;; Test `nop` operator. + +(module + ;; Auxiliary definitions + (func $dummy) + (func $3-ary (param i32 i32 i32) (result i32) + get_local 0 get_local 1 get_local 2 i32.sub i32.add + ) + (memory 1) + + (func (export "as-func-first") (result i32) + (nop) (i32.const 1) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (nop) (i32.const 2) + ) + (func (export "as-func-last") (result i32) + (call $dummy) (i32.const 3) (nop) + ) + (func (export "as-func-everywhere") (result i32) + (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) + ) + + (func (export "as-drop-last") (param i32) + (get_local 0) (nop) (drop) + ) + (func (export "as-drop-everywhere") (param i32) + (nop) (nop) (get_local 0) (nop) (nop) (drop) + ) + + (func (export "as-select-mid1") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (get_local 0) (select) + ) + (func (export "as-select-mid2") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (get_local 0) (select) + ) + (func (export "as-select-last") (param i32) (result i32) + (get_local 0) (get_local 0) (get_local 0) (nop) (select) + ) + (func (export "as-select-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) + (nop) (nop) (get_local 0) (nop) (nop) (select) + ) + + (func (export "as-block-first") (result i32) + (block (result i32) (nop) (i32.const 2)) + ) + (func (export "as-block-mid") (result i32) + (block (result i32) (call $dummy) (nop) (i32.const 2)) + ) + (func (export "as-block-last") (result i32) + (block (result i32) (nop) (call $dummy) (i32.const 3) (nop)) + ) + (func (export "as-block-everywhere") (result i32) + (block (result i32) + (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) + ) + ) + + (func (export "as-loop-first") (result i32) + (loop (result i32) (nop) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop (result i32) (call $dummy) (nop) (i32.const 2)) + ) + (func (export "as-loop-last") (result i32) + (loop (result i32) (call $dummy) (i32.const 3) (nop)) + ) + (func (export "as-loop-everywhere") (result i32) + (loop (result i32) + (nop) (nop) (call $dummy) (nop) (i32.const 4) (nop) (nop) + ) + ) + + (func (export "as-if-condition") (param i32) + (get_local 0) (nop) (if (then (call $dummy))) + ) + (func (export "as-if-then") (param i32) + (if (get_local 0) (then (nop)) (else (call $dummy))) + ) + (func (export "as-if-else") (param i32) + (if (get_local 0) (then (call $dummy)) (else (nop))) + ) + + (func (export "as-br-last") (param i32) (result i32) + (block (result i32) (get_local 0) (nop) (br 0)) + ) + (func (export "as-br-everywhere") (param i32) (result i32) + (block (result i32) (nop) (nop) (get_local 0) (nop) (nop) (br 0)) + ) + + (func (export "as-br_if-mid") (param i32) (result i32) + (block (result i32) (get_local 0) (nop) (get_local 0) (br_if 0)) + ) + (func (export "as-br_if-last") (param i32) (result i32) + (block (result i32) (get_local 0) (get_local 0) (nop) (br_if 0)) + ) + (func (export "as-br_if-everywhere") (param i32) (result i32) + (block (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) + (br_if 0) + ) + ) + + (func (export "as-br_table-mid") (param i32) (result i32) + (block (result i32) (get_local 0) (nop) (get_local 0) (br_table 0 0)) + ) + (func (export "as-br_table-last") (param i32) (result i32) + (block (result i32) (get_local 0) (get_local 0) (nop) (br_table 0 0)) + ) + (func (export "as-br_table-everywhere") (param i32) (result i32) + (block (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) + (br_table 0 0) + ) + ) + + (func (export "as-return-last") (param i32) (result i32) + (get_local 0) (nop) (return) + ) + (func (export "as-return-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (return) + ) + + (func (export "as-call-mid1") (param i32 i32 i32) (result i32) + (get_local 0) (nop) (get_local 1) (get_local 2) (call $3-ary) + ) + (func (export "as-call-mid2") (param i32 i32 i32) (result i32) + (get_local 0) (get_local 1) (nop) (get_local 2) (call $3-ary) + ) + (func (export "as-call-last") (param i32 i32 i32) (result i32) + (get_local 0) (get_local 1) (get_local 2) (nop) (call $3-ary) + ) + (func (export "as-call-everywhere") (param i32 i32 i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (get_local 1) + (nop) (nop) (get_local 2) (nop) (nop) (call $3-ary) + ) + + ;; TODO(stack): call_indirect, *_local, load*, store* + + (func (export "as-unary-last") (param i32) (result i32) + (get_local 0) (nop) (i32.ctz) + ) + (func (export "as-unary-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (i32.ctz) + ) + + (func (export "as-binary-mid") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (i32.add) + ) + (func (export "as-binary-last") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (i32.add) + ) + (func (export "as-binary-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) (i32.add) + ) + + (func (export "as-test-last") (param i32) (result i32) + (get_local 0) (nop) (i32.eqz) + ) + (func (export "as-test-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) i32.eqz + ) + + (func (export "as-compare-mid") (param i32) (result i32) + (get_local 0) (nop) (get_local 0) (i32.ne) + ) + (func (export "as-compare-last") (param i32) (result i32) + (get_local 0) (get_local 0) (nop) (i32.lt_u) + ) + (func (export "as-compare-everywhere") (param i32) (result i32) + (nop) (get_local 0) (nop) (nop) (get_local 0) (nop) (nop) (i32.le_s) + ) + + (func (export "as-grow_memory-last") (param i32) (result i32) + (get_local 0) (nop) (grow_memory) + ) + (func (export "as-grow_memory-everywhere") (param i32) (result i32) + (nop) (nop) (get_local 0) (nop) (nop) (grow_memory) + ) +) + +(assert_return (invoke "as-func-first") (i32.const 1)) +(assert_return (invoke "as-func-mid") (i32.const 2)) +(assert_return (invoke "as-func-last") (i32.const 3)) +(assert_return (invoke "as-func-everywhere") (i32.const 4)) + +(assert_return (invoke "as-drop-last" (i32.const 0))) +(assert_return (invoke "as-drop-everywhere" (i32.const 0))) + +(assert_return (invoke "as-select-mid1" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-mid2" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-last" (i32.const 3)) (i32.const 3)) +(assert_return (invoke "as-select-everywhere" (i32.const 3)) (i32.const 3)) + +(assert_return (invoke "as-block-first") (i32.const 2)) +(assert_return (invoke "as-block-mid") (i32.const 2)) +(assert_return (invoke "as-block-last") (i32.const 3)) +(assert_return (invoke "as-block-everywhere") (i32.const 4)) + +(assert_return (invoke "as-loop-first") (i32.const 2)) +(assert_return (invoke "as-loop-mid") (i32.const 2)) +(assert_return (invoke "as-loop-last") (i32.const 3)) +(assert_return (invoke "as-loop-everywhere") (i32.const 4)) + +(assert_return (invoke "as-if-condition" (i32.const 0))) +(assert_return (invoke "as-if-condition" (i32.const -1))) +(assert_return (invoke "as-if-then" (i32.const 0))) +(assert_return (invoke "as-if-then" (i32.const 4))) +(assert_return (invoke "as-if-else" (i32.const 0))) +(assert_return (invoke "as-if-else" (i32.const 3))) + +(assert_return (invoke "as-br-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-br_if-mid" (i32.const 5)) (i32.const 5)) +(assert_return (invoke "as-br_if-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br_if-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-br_table-mid" (i32.const 5)) (i32.const 5)) +(assert_return (invoke "as-br_table-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-br_table-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-return-last" (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-return-everywhere" (i32.const 7)) (i32.const 7)) + +(assert_return (invoke "as-call-mid1" (i32.const 3) (i32.const 1) (i32.const 2)) (i32.const 2)) +(assert_return (invoke "as-call-mid2" (i32.const 0) (i32.const 3) (i32.const 1)) (i32.const 2)) +(assert_return (invoke "as-call-last" (i32.const 10) (i32.const 9) (i32.const -1)) (i32.const 20)) +(assert_return (invoke "as-call-everywhere" (i32.const 2) (i32.const 1) (i32.const 5)) (i32.const -2)) + +(assert_return (invoke "as-unary-last" (i32.const 30)) (i32.const 1)) +(assert_return (invoke "as-unary-everywhere" (i32.const 12)) (i32.const 2)) + +(assert_return (invoke "as-binary-mid" (i32.const 3)) (i32.const 6)) +(assert_return (invoke "as-binary-last" (i32.const 3)) (i32.const 6)) +(assert_return (invoke "as-binary-everywhere" (i32.const 3)) (i32.const 6)) + +(assert_return (invoke "as-test-last" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "as-test-everywhere" (i32.const 0)) (i32.const 1)) + +(assert_return (invoke "as-compare-mid" (i32.const 3)) (i32.const 0)) +(assert_return (invoke "as-compare-last" (i32.const 3)) (i32.const 0)) +(assert_return (invoke "as-compare-everywhere" (i32.const 3)) (i32.const 1)) + +(assert_return (invoke "as-grow_memory-last" (i32.const 2)) (i32.const 1)) +(assert_return (invoke "as-grow_memory-everywhere" (i32.const 12)) (i32.const 3)) + +(assert_invalid + (module (func $type-i32 (result i32) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-i64 (result i64) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-f32 (result f32) (nop))) + "type mismatch" +) +(assert_invalid + (module (func $type-f64 (result f64) (nop))) + "type mismatch" +) diff --git a/libraries/wasm-jit/Test/spec/resizing.wast b/libraries/wasm-jit/Test/spec/resizing.wast new file mode 100644 index 000000000..80d20b56a --- /dev/null +++ b/libraries/wasm-jit/Test/spec/resizing.wast @@ -0,0 +1,60 @@ +(module + (memory 0) + + (func (export "load_at_zero") (result i32) (i32.load (i32.const 0))) + (func (export "store_at_zero") (i32.store (i32.const 0) (i32.const 2))) + + (func (export "load_at_page_size") (result i32) (i32.load (i32.const 0x10000))) + (func (export "store_at_page_size") (i32.store (i32.const 0x10000) (i32.const 3))) + + (func (export "grow") (param $sz i32) (result i32) (grow_memory (get_local $sz))) + (func (export "size") (result i32) (current_memory)) +) + +(assert_return (invoke "size") (i32.const 0)) +(assert_trap (invoke "store_at_zero") "out of bounds memory access") +(assert_trap (invoke "load_at_zero") "out of bounds memory access") +(assert_trap (invoke "store_at_page_size") "out of bounds memory access") +(assert_trap (invoke "load_at_page_size") "out of bounds memory access") +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "size") (i32.const 1)) +(assert_return (invoke "load_at_zero") (i32.const 0)) +(assert_return (invoke "store_at_zero")) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_trap (invoke "store_at_page_size") "out of bounds memory access") +(assert_trap (invoke "load_at_page_size") "out of bounds memory access") +(assert_return (invoke "grow" (i32.const 4)) (i32.const 1)) +(assert_return (invoke "size") (i32.const 5)) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_return (invoke "store_at_zero")) +(assert_return (invoke "load_at_zero") (i32.const 2)) +(assert_return (invoke "load_at_page_size") (i32.const 0)) +(assert_return (invoke "store_at_page_size")) +(assert_return (invoke "load_at_page_size") (i32.const 3)) + + +(module + (memory 0) + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) + +(assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 2)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 800)) (i32.const 3)) +(assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) + +(module + (memory 0 10) + (func (export "grow") (param i32) (result i32) (grow_memory (get_local 0))) +) + +(assert_return (invoke "grow" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 0)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const 1)) +(assert_return (invoke "grow" (i32.const 2)) (i32.const 2)) +(assert_return (invoke "grow" (i32.const 6)) (i32.const 4)) +(assert_return (invoke "grow" (i32.const 0)) (i32.const 10)) +(assert_return (invoke "grow" (i32.const 1)) (i32.const -1)) +(assert_return (invoke "grow" (i32.const 0x10000)) (i32.const -1)) diff --git a/libraries/wasm-jit/Test/spec/return.wast b/libraries/wasm-jit/Test/spec/return.wast new file mode 100644 index 000000000..48964cffc --- /dev/null +++ b/libraries/wasm-jit/Test/spec/return.wast @@ -0,0 +1,287 @@ +;; Test `return` operator + +(module + ;; Auxiliary definition + (func $dummy) + + (func (export "type-i32") (drop (i32.ctz (return)))) + (func (export "type-i64") (drop (i64.ctz (return)))) + (func (export "type-f32") (drop (f32.neg (return)))) + (func (export "type-f64") (drop (f64.neg (return)))) + + (func (export "nullary") (return)) + (func (export "unary") (result f64) (return (f64.const 3))) + + (func (export "as-func-first") (result i32) + (return (i32.const 1)) (i32.const 2) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (return (i32.const 2)) (i32.const 3) + ) + (func (export "as-func-last") + (nop) (call $dummy) (return) + ) + (func (export "as-func-value") (result i32) + (nop) (call $dummy) (return (i32.const 3)) + ) + + (func (export "as-block-first") + (block (return) (call $dummy)) + ) + (func (export "as-block-mid") + (block (call $dummy) (return) (call $dummy)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (return)) + ) + (func (export "as-block-value") (result i32) + (block (result i32) (nop) (call $dummy) (return (i32.const 2))) + ) + + (func (export "as-loop-first") (result i32) + (loop (result i32) (return (i32.const 3)) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop (result i32) (call $dummy) (return (i32.const 4)) (i32.const 2)) + ) + (func (export "as-loop-last") (result i32) + (loop (result i32) (nop) (call $dummy) (return (i32.const 5))) + ) + + (func (export "as-br-value") (result i32) + (block (result i32) (br 0 (return (i32.const 9)))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (return))) + ) + (func (export "as-br_if-value") (result i32) + (block (result i32) + (drop (br_if 0 (return (i32.const 8)) (i32.const 1))) (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block (result i32) + (drop (br_if 0 (i32.const 6) (return (i32.const 9)))) (i32.const 7) + ) + ) + + (func (export "as-br_table-index") (result i64) + (block (br_table 0 0 0 (return (i64.const 9)))) (i64.const -1) + ) + (func (export "as-br_table-value") (result i32) + (block (result i32) + (br_table 0 0 0 (return (i32.const 10)) (i32.const 1)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block (result i32) + (br_table 0 0 (i32.const 6) (return (i32.const 11))) (i32.const 7) + ) + ) + + (func (export "as-return-value") (result i64) + (return (return (i64.const 7))) + ) + + (func (export "as-if-cond") (result i32) + (if (result i32) + (return (i32.const 2)) (then (i32.const 0)) (else (i32.const 1)) + ) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (if (result i32) + (get_local 0) (then (return (i32.const 3))) (else (get_local 1)) + ) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (if (result i32) + (get_local 0) (then (get_local 1)) (else (return (i32.const 4))) + ) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (select (return (i32.const 5)) (get_local 0) (get_local 1)) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (select (get_local 0) (return (i32.const 6)) (get_local 1)) + ) + (func (export "as-select-cond") (result i32) + (select (i32.const 0) (i32.const 1) (return (i32.const 7))) + ) + + (func $f (param i32 i32 i32) (result i32) (i32.const -1)) + (func (export "as-call-first") (result i32) + (call $f (return (i32.const 12)) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call-mid") (result i32) + (call $f (i32.const 1) (return (i32.const 13)) (i32.const 3)) + ) + (func (export "as-call-last") (result i32) + (call $f (i32.const 1) (i32.const 2) (return (i32.const 14))) + ) + + (type $sig (func (param i32 i32 i32) (result i32))) + (table anyfunc (elem $f)) + (func (export "as-call_indirect-func") (result i32) + (call_indirect $sig (return (i32.const 20)) (i32.const 1) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-first") (result i32) + (call_indirect $sig (i32.const 0) (return (i32.const 21)) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-mid") (result i32) + (call_indirect $sig (i32.const 0) (i32.const 1) (return (i32.const 22)) (i32.const 3)) + ) + (func (export "as-call_indirect-last") (result i32) + (call_indirect $sig (i32.const 0) (i32.const 1) (i32.const 2) (return (i32.const 23))) + ) + + (func (export "as-set_local-value") (result i32) (local f32) + (set_local 0 (return (i32.const 17))) (i32.const -1) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (f32.load (return (f32.const 1.7))) + ) + (func (export "as-loadN-address") (result i64) + (i64.load8_s (return (i64.const 30))) + ) + + (func (export "as-store-address") (result i32) + (f64.store (return (i32.const 30)) (f64.const 7)) (i32.const -1) + ) + (func (export "as-store-value") (result i32) + (i64.store (i32.const 2) (return (i32.const 31))) (i32.const -1) + ) + + (func (export "as-storeN-address") (result i32) + (i32.store8 (return (i32.const 32)) (i32.const 7)) (i32.const -1) + ) + (func (export "as-storeN-value") (result i32) + (i64.store16 (i32.const 2) (return (i32.const 33))) (i32.const -1) + ) + + (func (export "as-unary-operand") (result f32) + (f32.neg (return (f32.const 3.4))) + ) + + (func (export "as-binary-left") (result i32) + (i32.add (return (i32.const 3)) (i32.const 10)) + ) + (func (export "as-binary-right") (result i64) + (i64.sub (i64.const 10) (return (i64.const 45))) + ) + + (func (export "as-test-operand") (result i32) + (i32.eqz (return (i32.const 44))) + ) + + (func (export "as-compare-left") (result i32) + (f64.le (return (i32.const 43)) (f64.const 10)) + ) + (func (export "as-compare-right") (result i32) + (f32.ne (f32.const 10) (return (i32.const 42))) + ) + + (func (export "as-convert-operand") (result i32) + (i32.wrap/i64 (return (i32.const 41))) + ) + + (func (export "as-grow_memory-size") (result i32) + (grow_memory (return (i32.const 40))) + ) +) + +(assert_return (invoke "type-i32")) +(assert_return (invoke "type-i64")) +(assert_return (invoke "type-f32")) +(assert_return (invoke "type-f64")) + +(assert_return (invoke "nullary")) +(assert_return (invoke "unary") (f64.const 3)) + +(assert_return (invoke "as-func-first") (i32.const 1)) +(assert_return (invoke "as-func-mid") (i32.const 2)) +(assert_return (invoke "as-func-last")) +(assert_return (invoke "as-func-value") (i32.const 3)) + +(assert_return (invoke "as-block-first")) +(assert_return (invoke "as-block-mid")) +(assert_return (invoke "as-block-last")) +(assert_return (invoke "as-block-value") (i32.const 2)) + +(assert_return (invoke "as-loop-first") (i32.const 3)) +(assert_return (invoke "as-loop-mid") (i32.const 4)) +(assert_return (invoke "as-loop-last") (i32.const 5)) + +(assert_return (invoke "as-br-value") (i32.const 9)) + +(assert_return (invoke "as-br_if-cond")) +(assert_return (invoke "as-br_if-value") (i32.const 8)) +(assert_return (invoke "as-br_if-value-cond") (i32.const 9)) + +(assert_return (invoke "as-br_table-index") (i64.const 9)) +(assert_return (invoke "as-br_table-value") (i32.const 10)) +(assert_return (invoke "as-br_table-value-index") (i32.const 11)) + +(assert_return (invoke "as-return-value") (i64.const 7)) + +(assert_return (invoke "as-if-cond") (i32.const 2)) +(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3)) +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-if-else" (i32.const 0) (i32.const 6)) (i32.const 4)) +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_return (invoke "as-select-first" (i32.const 0) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-first" (i32.const 1) (i32.const 6)) (i32.const 5)) +(assert_return (invoke "as-select-second" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-second" (i32.const 1) (i32.const 6)) (i32.const 6)) +(assert_return (invoke "as-select-cond") (i32.const 7)) + +(assert_return (invoke "as-call-first") (i32.const 12)) +(assert_return (invoke "as-call-mid") (i32.const 13)) +(assert_return (invoke "as-call-last") (i32.const 14)) + +(assert_return (invoke "as-call_indirect-func") (i32.const 20)) +(assert_return (invoke "as-call_indirect-first") (i32.const 21)) +(assert_return (invoke "as-call_indirect-mid") (i32.const 22)) +(assert_return (invoke "as-call_indirect-last") (i32.const 23)) + +(assert_return (invoke "as-set_local-value") (i32.const 17)) + +(assert_return (invoke "as-load-address") (f32.const 1.7)) +(assert_return (invoke "as-loadN-address") (i64.const 30)) + +(assert_return (invoke "as-store-address") (i32.const 30)) +(assert_return (invoke "as-store-value") (i32.const 31)) +(assert_return (invoke "as-storeN-address") (i32.const 32)) +(assert_return (invoke "as-storeN-value") (i32.const 33)) + +(assert_return (invoke "as-unary-operand") (f32.const 3.4)) + +(assert_return (invoke "as-binary-left") (i32.const 3)) +(assert_return (invoke "as-binary-right") (i64.const 45)) + +(assert_return (invoke "as-test-operand") (i32.const 44)) + +(assert_return (invoke "as-compare-left") (i32.const 43)) +(assert_return (invoke "as-compare-right") (i32.const 42)) + +(assert_return (invoke "as-convert-operand") (i32.const 41)) + +(assert_return (invoke "as-grow_memory-size") (i32.const 40)) + +(assert_invalid + (module (func $type-value-empty-vs-num (result f64) (return))) + "type mismatch" +) +(assert_invalid + (module (func $type-value-void-vs-num (result f64) (return (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-value-num-vs-num (result f64) (return (i64.const 1)))) + "type mismatch" +) + diff --git a/libraries/wasm-jit/Test/spec/select.wast b/libraries/wasm-jit/Test/spec/select.wast new file mode 100644 index 000000000..4dfa45612 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/select.wast @@ -0,0 +1,67 @@ +(module + (func (export "select_i32") (param $lhs i32) (param $rhs i32) (param $cond i32) (result i32) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_i64") (param $lhs i64) (param $rhs i64) (param $cond i32) (result i64) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_f32") (param $lhs f32) (param $rhs f32) (param $cond i32) (result f32) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + (func (export "select_f64") (param $lhs f64) (param $rhs f64) (param $cond i32) (result f64) + (select (get_local $lhs) (get_local $rhs) (get_local $cond))) + + ;; Check that both sides of the select are evaluated + (func (export "select_trap_l") (param $cond i32) (result i32) + (select (unreachable) (i32.const 0) (get_local $cond)) + ) + (func (export "select_trap_r") (param $cond i32) (result i32) + (select (i32.const 0) (unreachable) (get_local $cond)) + ) + + (func (export "select_unreached") + (unreachable) (select) + (unreachable) (i32.const 0) (select) + (unreachable) (i32.const 0) (i32.const 0) (select) + (unreachable) (f32.const 0) (i32.const 0) (select) + (unreachable) + ) +) + +(assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 1)) (i32.const 1)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 1)) (i64.const 2)) +(assert_return (invoke "select_f32" (f32.const 1) (f32.const 2) (i32.const 1)) (f32.const 1)) +(assert_return (invoke "select_f64" (f64.const 1) (f64.const 2) (i32.const 1)) (f64.const 1)) + +(assert_return (invoke "select_i32" (i32.const 1) (i32.const 2) (i32.const 0)) (i32.const 2)) +(assert_return (invoke "select_i32" (i32.const 2) (i32.const 1) (i32.const 0)) (i32.const 1)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const -1)) (i64.const 2)) +(assert_return (invoke "select_i64" (i64.const 2) (i64.const 1) (i32.const 0xf0f0f0f0)) (i64.const 2)) + +(assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 1)) (f32.const nan)) +(assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 1)) (f32.const nan:0x20304)) +(assert_return (invoke "select_f32" (f32.const nan) (f32.const 1) (i32.const 0)) (f32.const 1)) +(assert_return (invoke "select_f32" (f32.const nan:0x20304) (f32.const 1) (i32.const 0)) (f32.const 1)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 1)) (f32.const 2)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 1)) (f32.const 2)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan) (i32.const 0)) (f32.const nan)) +(assert_return (invoke "select_f32" (f32.const 2) (f32.const nan:0x20304) (i32.const 0)) (f32.const nan:0x20304)) + +(assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 1)) (f64.const nan)) +(assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 1)) (f64.const nan:0x20304)) +(assert_return (invoke "select_f64" (f64.const nan) (f64.const 1) (i32.const 0)) (f64.const 1)) +(assert_return (invoke "select_f64" (f64.const nan:0x20304) (f64.const 1) (i32.const 0)) (f64.const 1)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 1)) (f64.const 2)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 1)) (f64.const 2)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan) (i32.const 0)) (f64.const nan)) +(assert_return (invoke "select_f64" (f64.const 2) (f64.const nan:0x20304) (i32.const 0)) (f64.const nan:0x20304)) + +(assert_trap (invoke "select_trap_l" (i32.const 1)) "unreachable executed") +(assert_trap (invoke "select_trap_l" (i32.const 0)) "unreachable executed") +(assert_trap (invoke "select_trap_r" (i32.const 1)) "unreachable executed") +(assert_trap (invoke "select_trap_r" (i32.const 0)) "unreachable executed") + +(assert_invalid + (module (func $arity-0 (select (nop) (nop) (i32.const 1)))) + "type mismatch" +) diff --git a/libraries/wasm-jit/Test/spec/set_local.wast b/libraries/wasm-jit/Test/spec/set_local.wast new file mode 100644 index 000000000..5a006e114 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/set_local.wast @@ -0,0 +1,205 @@ +;; Test `set_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (local i32) (set_local 0 (i32.const 0))) + (func (export "type-local-i64") (local i64) (set_local 0 (i64.const 0))) + (func (export "type-local-f32") (local f32) (set_local 0 (f32.const 0))) + (func (export "type-local-f64") (local f64) (set_local 0 (f64.const 0))) + + (func (export "type-param-i32") (param i32) (set_local 0 (i32.const 10))) + (func (export "type-param-i64") (param i64) (set_local 0 (i64.const 11))) + (func (export "type-param-f32") (param f32) (set_local 0 (f32.const 11.1))) + (func (export "type-param-f64") (param f64) (set_local 0 (f64.const 12.2))) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) + (set_local 0 (i64.const 0)) + (set_local 1 (f32.const 0)) + (set_local 2 (f64.const 0)) + (set_local 3 (i32.const 0)) + (set_local 4 (i32.const 0)) + (set_local 5 (f32.const 0)) + (set_local 6 (i64.const 0)) + (set_local 7 (i64.const 0)) + (set_local 8 (f64.const 0)) + ) + + ;; Writing + + (func (export "write") (param i64 f32 f64 i32 i32) (result i64) + (local f32 i64 i64 f64) + (set_local 1 (f32.const -0.3)) + (set_local 3 (i32.const 40)) + (set_local 4 (i32.const -7)) + (set_local 5 (f32.const 5.5)) + (set_local 6 (i64.const 6)) + (set_local 8 (f64.const 8)) + (i64.trunc_s/f64 + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32")) +(assert_return (invoke "type-local-i64")) +(assert_return (invoke "type-local-f32")) +(assert_return (invoke "type-local-f64")) + +(assert_return (invoke "type-param-i32" (i32.const 2))) +(assert_return (invoke "type-param-i64" (i64.const 3))) +(assert_return (invoke "type-param-f32" (f32.const 4.4))) +(assert_return (invoke "type-param-f64" (f64.const 5.5))) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "write" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (i64.const 56) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) + (set_local 0 (i32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) + (i32.eqz (set_local 0 (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) + (f64.neg (set_local 1 (i64.const 0))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-local-arg-void-vs-num (local i32) (set_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local i32) (set_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f32) (set_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f64 i64) (set_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-param-arg-void-vs-num (param i32) (set_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param i32) (set_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f32) (set_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f64 i64) (set_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (set_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (set_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (set_local 1 (i64.const 0)))) + "type mismatch" +) + diff --git a/libraries/wasm-jit/Test/spec/skip-stack-guard-page.wast b/libraries/wasm-jit/Test/spec/skip-stack-guard-page.wast new file mode 100644 index 000000000..f2449dc85 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/skip-stack-guard-page.wast @@ -0,0 +1,2284 @@ +;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. +(module + (memory 1) + (export "test-guard-page-skip" (func $test-guard-page-skip)) + + (func $test-guard-page-skip + (param $depth i32) + (if (i32.eq (get_local $depth) (i32.const 0)) + (then (call $function-with-many-locals)) + (else (call $test-guard-page-skip (i32.sub (get_local $depth) (i32.const 1)))) + ) + ) + + (func $function-with-many-locals + + ;; 1056 i64 = 8448 bytes of locals + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x007 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x008-0x00f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x010-0x017 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x018-0x01f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x027 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x028-0x02f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x030-0x037 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x038-0x03f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x047 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x048-0x04f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x050-0x057 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x058-0x05f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x067 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x068-0x06f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x070-0x077 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x078-0x07f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x087 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x088-0x08f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x090-0x097 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x098-0x09f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0a7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a8-0x0af + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b0-0x0b7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0b8-0x0bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0c7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c8-0x0cf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d0-0x0d7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0d8-0x0df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0e7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e8-0x0ef + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f0-0x0f7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0f8-0x0ff + + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x107 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x108-0x10f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x110-0x117 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x118-0x11f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x127 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x128-0x12f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x130-0x137 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x138-0x13f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x147 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x148-0x14f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x150-0x157 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x158-0x15f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x167 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x168-0x16f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x170-0x177 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x178-0x17f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x187 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x188-0x18f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x190-0x197 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x198-0x19f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1a7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a8-0x1af + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b0-0x1b7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1b8-0x1bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1c7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c8-0x1cf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d0-0x1d7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1d8-0x1df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1e7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e8-0x1ef + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f0-0x1f7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1f8-0x1ff + + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x207 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x208-0x20f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x210-0x217 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x218-0x21f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x227 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x228-0x22f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x230-0x237 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x238-0x23f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x247 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x248-0x24f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x250-0x257 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x258-0x25f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x267 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x268-0x26f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x270-0x277 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x278-0x27f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x287 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x288-0x28f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x290-0x297 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x298-0x29f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2a7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a8-0x2af + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b0-0x2b7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2b8-0x2bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2c7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c8-0x2cf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d0-0x2d7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2d8-0x2df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2e7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e8-0x2ef + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f0-0x2f7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2f8-0x2ff + + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x307 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x308-0x30f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x310-0x317 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x318-0x31f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x327 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x328-0x32f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x330-0x337 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x338-0x33f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x347 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x348-0x34f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x350-0x357 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x358-0x35f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x367 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x368-0x36f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x370-0x377 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x378-0x37f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x387 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x388-0x38f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x390-0x397 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x398-0x39f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3a7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a8-0x3af + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b0-0x3b7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3b8-0x3bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3c7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c8-0x3cf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d0-0x3d7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3d8-0x3df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3e7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e8-0x3ef + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f0-0x3f7 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3f8-0x3ff + + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x407 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x408-0x40f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x410-0x417 + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x418-0x41f + + ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. + (call $function-with-many-locals) + + ;; load from memory into the locals + (set_local 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) + (set_local 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) + (set_local 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) + (set_local 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) + (set_local 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) + (set_local 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) + (set_local 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) + (set_local 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) + (set_local 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) + (set_local 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) + (set_local 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) + (set_local 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) + (set_local 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) + (set_local 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) + (set_local 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) + (set_local 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) + (set_local 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) + (set_local 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) + (set_local 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) + (set_local 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) + (set_local 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) + (set_local 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) + (set_local 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) + (set_local 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) + (set_local 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) + (set_local 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) + (set_local 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) + (set_local 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) + (set_local 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) + (set_local 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) + (set_local 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) + (set_local 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) + (set_local 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) + (set_local 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) + (set_local 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) + (set_local 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) + (set_local 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) + (set_local 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) + (set_local 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) + (set_local 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) + (set_local 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) + (set_local 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) + (set_local 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) + (set_local 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) + (set_local 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) + (set_local 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) + (set_local 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) + (set_local 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) + (set_local 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) + (set_local 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) + (set_local 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) + (set_local 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) + (set_local 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) + (set_local 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) + (set_local 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) + (set_local 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) + (set_local 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) + (set_local 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) + (set_local 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) + (set_local 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) + (set_local 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) + (set_local 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) + (set_local 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) + (set_local 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) + (set_local 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) + (set_local 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) + (set_local 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) + (set_local 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) + (set_local 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) + (set_local 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) + (set_local 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) + (set_local 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) + (set_local 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) + (set_local 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) + (set_local 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) + (set_local 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) + (set_local 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) + (set_local 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) + (set_local 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) + (set_local 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) + (set_local 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) + (set_local 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) + (set_local 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) + (set_local 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) + (set_local 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) + (set_local 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) + (set_local 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) + (set_local 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) + (set_local 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) + (set_local 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) + (set_local 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) + (set_local 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) + (set_local 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) + (set_local 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) + (set_local 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) + (set_local 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) + (set_local 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) + (set_local 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) + (set_local 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) + (set_local 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) + (set_local 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) + (set_local 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) + (set_local 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) + (set_local 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) + (set_local 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) + (set_local 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) + (set_local 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) + (set_local 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) + (set_local 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) + (set_local 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) + (set_local 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) + (set_local 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) + (set_local 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) + (set_local 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) + (set_local 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) + (set_local 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) + (set_local 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) + (set_local 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) + (set_local 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) + (set_local 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) + (set_local 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) + (set_local 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) + (set_local 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) + (set_local 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) + (set_local 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) + (set_local 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) + (set_local 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) + (set_local 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) + (set_local 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) + (set_local 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) + (set_local 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) + (set_local 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) + (set_local 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) + (set_local 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) + (set_local 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) + (set_local 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) + (set_local 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) + (set_local 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) + (set_local 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) + (set_local 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) + (set_local 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) + (set_local 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) + (set_local 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) + (set_local 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) + (set_local 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) + (set_local 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) + (set_local 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) + (set_local 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) + (set_local 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) + (set_local 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) + (set_local 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) + (set_local 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) + (set_local 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) + (set_local 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) + (set_local 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) + (set_local 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) + (set_local 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) + (set_local 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) + (set_local 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) + (set_local 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) + (set_local 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) + (set_local 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) + (set_local 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) + (set_local 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) + (set_local 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) + (set_local 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) + (set_local 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) + (set_local 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) + (set_local 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) + (set_local 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) + (set_local 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) + (set_local 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) + (set_local 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) + (set_local 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) + (set_local 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) + (set_local 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) + (set_local 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) + (set_local 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) + (set_local 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) + (set_local 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) + (set_local 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) + (set_local 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) + (set_local 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) + (set_local 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) + (set_local 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) + (set_local 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) + (set_local 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) + (set_local 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) + (set_local 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) + (set_local 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) + (set_local 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) + (set_local 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) + (set_local 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) + (set_local 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) + (set_local 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) + (set_local 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) + (set_local 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) + (set_local 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) + (set_local 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) + (set_local 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) + (set_local 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) + (set_local 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) + (set_local 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) + (set_local 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) + (set_local 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) + (set_local 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) + (set_local 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) + (set_local 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) + (set_local 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) + (set_local 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) + (set_local 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) + (set_local 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) + (set_local 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) + (set_local 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) + (set_local 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) + (set_local 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) + (set_local 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) + (set_local 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) + (set_local 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) + (set_local 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) + (set_local 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) + (set_local 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) + (set_local 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) + (set_local 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) + (set_local 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) + (set_local 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) + (set_local 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) + (set_local 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) + (set_local 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) + (set_local 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) + (set_local 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) + (set_local 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) + (set_local 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) + (set_local 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) + (set_local 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) + (set_local 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) + (set_local 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) + (set_local 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) + (set_local 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) + (set_local 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) + (set_local 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) + (set_local 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) + (set_local 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) + (set_local 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) + (set_local 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) + (set_local 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) + (set_local 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) + (set_local 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) + (set_local 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) + (set_local 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) + (set_local 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) + (set_local 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) + (set_local 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) + (set_local 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) + (set_local 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) + (set_local 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) + (set_local 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) + (set_local 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) + (set_local 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) + (set_local 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) + (set_local 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) + (set_local 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) + (set_local 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) + (set_local 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) + (set_local 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) + (set_local 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) + (set_local 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) + (set_local 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) + (set_local 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) + (set_local 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) + (set_local 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) + (set_local 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) + (set_local 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) + (set_local 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) + (set_local 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) + (set_local 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) + (set_local 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) + (set_local 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) + (set_local 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) + (set_local 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) + (set_local 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) + (set_local 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) + (set_local 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) + (set_local 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) + (set_local 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) + (set_local 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) + (set_local 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) + (set_local 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) + (set_local 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) + (set_local 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) + (set_local 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) + (set_local 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) + (set_local 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) + (set_local 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) + (set_local 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) + (set_local 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) + (set_local 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) + (set_local 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) + (set_local 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) + (set_local 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) + (set_local 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) + (set_local 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) + (set_local 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) + (set_local 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) + (set_local 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) + (set_local 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) + (set_local 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) + (set_local 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) + (set_local 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) + (set_local 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) + (set_local 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) + (set_local 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) + (set_local 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) + (set_local 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) + (set_local 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) + (set_local 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) + (set_local 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) + (set_local 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) + (set_local 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) + (set_local 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) + (set_local 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) + (set_local 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) + (set_local 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) + (set_local 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) + (set_local 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) + (set_local 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) + (set_local 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) + (set_local 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) + (set_local 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) + (set_local 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) + (set_local 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) + (set_local 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) + (set_local 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) + (set_local 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) + (set_local 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) + (set_local 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) + (set_local 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) + (set_local 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) + (set_local 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) + (set_local 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) + (set_local 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) + (set_local 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) + (set_local 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) + (set_local 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) + (set_local 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) + (set_local 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) + (set_local 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) + (set_local 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) + (set_local 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) + (set_local 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) + (set_local 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) + (set_local 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) + (set_local 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) + (set_local 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) + (set_local 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) + (set_local 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) + (set_local 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) + (set_local 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) + (set_local 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) + (set_local 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) + (set_local 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) + (set_local 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) + (set_local 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) + (set_local 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) + (set_local 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) + (set_local 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) + (set_local 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) + (set_local 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) + (set_local 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) + (set_local 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) + (set_local 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) + (set_local 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) + (set_local 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) + (set_local 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) + (set_local 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) + (set_local 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) + (set_local 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) + (set_local 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) + (set_local 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) + (set_local 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) + (set_local 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) + (set_local 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) + (set_local 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) + (set_local 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) + (set_local 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) + (set_local 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) + (set_local 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) + (set_local 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) + (set_local 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) + (set_local 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) + (set_local 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) + (set_local 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) + (set_local 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) + (set_local 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) + (set_local 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) + (set_local 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) + (set_local 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) + (set_local 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) + (set_local 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) + (set_local 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) + (set_local 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) + (set_local 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) + (set_local 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) + (set_local 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) + (set_local 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) + (set_local 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) + (set_local 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) + (set_local 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) + (set_local 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) + (set_local 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) + (set_local 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) + (set_local 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) + (set_local 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) + (set_local 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) + (set_local 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) + (set_local 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) + (set_local 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) + (set_local 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) + (set_local 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) + (set_local 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) + (set_local 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) + (set_local 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) + (set_local 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) + (set_local 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) + (set_local 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) + (set_local 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) + (set_local 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) + (set_local 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) + (set_local 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) + (set_local 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) + (set_local 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) + (set_local 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) + (set_local 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) + (set_local 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) + (set_local 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) + (set_local 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) + (set_local 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) + (set_local 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) + (set_local 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) + (set_local 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) + (set_local 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) + (set_local 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) + (set_local 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) + (set_local 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) + (set_local 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) + (set_local 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) + (set_local 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) + (set_local 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) + (set_local 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) + (set_local 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) + (set_local 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) + (set_local 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) + (set_local 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) + (set_local 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) + (set_local 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) + (set_local 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) + (set_local 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) + (set_local 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) + (set_local 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) + (set_local 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) + (set_local 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) + (set_local 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) + (set_local 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) + (set_local 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) + (set_local 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) + (set_local 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) + (set_local 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) + (set_local 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) + (set_local 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) + (set_local 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) + (set_local 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) + (set_local 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) + (set_local 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) + (set_local 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) + (set_local 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) + (set_local 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) + (set_local 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) + (set_local 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) + (set_local 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) + (set_local 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) + (set_local 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) + (set_local 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) + (set_local 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) + (set_local 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) + (set_local 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) + (set_local 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) + (set_local 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) + (set_local 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) + (set_local 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) + (set_local 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) + (set_local 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) + (set_local 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) + (set_local 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) + (set_local 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) + (set_local 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) + (set_local 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) + (set_local 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) + (set_local 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) + (set_local 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) + (set_local 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) + (set_local 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) + (set_local 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) + (set_local 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) + (set_local 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) + (set_local 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) + (set_local 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) + (set_local 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) + (set_local 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) + (set_local 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) + (set_local 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) + (set_local 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) + (set_local 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) + (set_local 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) + (set_local 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) + (set_local 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) + (set_local 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) + (set_local 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) + (set_local 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) + (set_local 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) + (set_local 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) + (set_local 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) + (set_local 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) + (set_local 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) + (set_local 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) + (set_local 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) + (set_local 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) + (set_local 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) + (set_local 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) + (set_local 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) + (set_local 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) + (set_local 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) + (set_local 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) + (set_local 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) + (set_local 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) + (set_local 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) + (set_local 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) + (set_local 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) + (set_local 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) + (set_local 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) + (set_local 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) + (set_local 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) + (set_local 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) + (set_local 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) + (set_local 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) + (set_local 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) + (set_local 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) + (set_local 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) + (set_local 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) + (set_local 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) + (set_local 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) + (set_local 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) + (set_local 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) + (set_local 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) + (set_local 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) + (set_local 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) + (set_local 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) + (set_local 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) + (set_local 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) + (set_local 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) + (set_local 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) + (set_local 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) + (set_local 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) + (set_local 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) + (set_local 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) + (set_local 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) + (set_local 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) + (set_local 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) + (set_local 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) + (set_local 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) + (set_local 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) + (set_local 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) + (set_local 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) + (set_local 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) + (set_local 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) + (set_local 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) + (set_local 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) + (set_local 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) + (set_local 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) + (set_local 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) + (set_local 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) + (set_local 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) + (set_local 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) + (set_local 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) + (set_local 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) + (set_local 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) + (set_local 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) + (set_local 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) + (set_local 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) + (set_local 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) + (set_local 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) + (set_local 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) + (set_local 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) + (set_local 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) + (set_local 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) + (set_local 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) + (set_local 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) + (set_local 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) + (set_local 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) + (set_local 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) + (set_local 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) + (set_local 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) + (set_local 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) + (set_local 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) + (set_local 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) + (set_local 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) + (set_local 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) + (set_local 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) + (set_local 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) + (set_local 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) + (set_local 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) + (set_local 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) + (set_local 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) + (set_local 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) + (set_local 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) + (set_local 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) + (set_local 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) + (set_local 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) + (set_local 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) + (set_local 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) + (set_local 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) + (set_local 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) + (set_local 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) + (set_local 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) + (set_local 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) + (set_local 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) + (set_local 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) + (set_local 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) + (set_local 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) + (set_local 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) + (set_local 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) + (set_local 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) + (set_local 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) + (set_local 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) + (set_local 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) + (set_local 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) + (set_local 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) + (set_local 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) + (set_local 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) + (set_local 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) + (set_local 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) + (set_local 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) + (set_local 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) + (set_local 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) + (set_local 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) + (set_local 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) + (set_local 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) + (set_local 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) + (set_local 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) + (set_local 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) + (set_local 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) + (set_local 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) + (set_local 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) + (set_local 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) + (set_local 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) + (set_local 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) + (set_local 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) + (set_local 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) + (set_local 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) + (set_local 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) + (set_local 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) + (set_local 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) + (set_local 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) + (set_local 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) + (set_local 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) + (set_local 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) + (set_local 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) + (set_local 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) + (set_local 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) + (set_local 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) + (set_local 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) + (set_local 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) + (set_local 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) + (set_local 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) + (set_local 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) + (set_local 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) + (set_local 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) + (set_local 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) + (set_local 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) + (set_local 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) + (set_local 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) + (set_local 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) + (set_local 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) + (set_local 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) + (set_local 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) + (set_local 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) + (set_local 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) + (set_local 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) + (set_local 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) + (set_local 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) + (set_local 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) + (set_local 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) + (set_local 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) + (set_local 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) + (set_local 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) + (set_local 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) + (set_local 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) + (set_local 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) + (set_local 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) + (set_local 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) + (set_local 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) + (set_local 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) + (set_local 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) + (set_local 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) + (set_local 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) + (set_local 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) + (set_local 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) + (set_local 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) + (set_local 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) + (set_local 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) + (set_local 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) + (set_local 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) + (set_local 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) + (set_local 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) + (set_local 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) + (set_local 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) + (set_local 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) + (set_local 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) + (set_local 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) + (set_local 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) + (set_local 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) + (set_local 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) + (set_local 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) + (set_local 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) + (set_local 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) + (set_local 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) + (set_local 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) + (set_local 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) + (set_local 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) + (set_local 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) + (set_local 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) + (set_local 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) + (set_local 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) + (set_local 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) + (set_local 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) + (set_local 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) + (set_local 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) + (set_local 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) + (set_local 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) + (set_local 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) + (set_local 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) + (set_local 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) + (set_local 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) + (set_local 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) + (set_local 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) + (set_local 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) + (set_local 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) + (set_local 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) + (set_local 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) + (set_local 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) + (set_local 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) + (set_local 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) + (set_local 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) + (set_local 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) + (set_local 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) + (set_local 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) + (set_local 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) + (set_local 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) + (set_local 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) + (set_local 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) + (set_local 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) + (set_local 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) + (set_local 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) + (set_local 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) + (set_local 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) + (set_local 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) + (set_local 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) + (set_local 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) + (set_local 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) + (set_local 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) + (set_local 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) + (set_local 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) + (set_local 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) + (set_local 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) + (set_local 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) + (set_local 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) + (set_local 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) + (set_local 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) + (set_local 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) + (set_local 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) + (set_local 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) + (set_local 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) + (set_local 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) + (set_local 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) + (set_local 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) + (set_local 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) + (set_local 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) + (set_local 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) + (set_local 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) + (set_local 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) + (set_local 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) + (set_local 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) + (set_local 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) + (set_local 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) + (set_local 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) + (set_local 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) + (set_local 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) + (set_local 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) + (set_local 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) + (set_local 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) + (set_local 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) + (set_local 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) + (set_local 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) + (set_local 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) + (set_local 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) + (set_local 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) + (set_local 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) + (set_local 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) + (set_local 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) + (set_local 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) + (set_local 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) + (set_local 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) + (set_local 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) + (set_local 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) + (set_local 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) + (set_local 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) + (set_local 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) + (set_local 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) + (set_local 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) + (set_local 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) + (set_local 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) + (set_local 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) + (set_local 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) + (set_local 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) + (set_local 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) + (set_local 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) + (set_local 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) + (set_local 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) + (set_local 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) + (set_local 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) + (set_local 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) + (set_local 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) + (set_local 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) + (set_local 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) + (set_local 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) + (set_local 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) + (set_local 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) + (set_local 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) + (set_local 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) + (set_local 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) + (set_local 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) + (set_local 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) + (set_local 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) + (set_local 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) + (set_local 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) + (set_local 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) + (set_local 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) + (set_local 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) + (set_local 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) + (set_local 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) + (set_local 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) + (set_local 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) + (set_local 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) + (set_local 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) + (set_local 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) + (set_local 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) + (set_local 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) + (set_local 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) + (set_local 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) + (set_local 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) + (set_local 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) + (set_local 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) + (set_local 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) + (set_local 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) + (set_local 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) + (set_local 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) + (set_local 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) + (set_local 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) + (set_local 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) + (set_local 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) + (set_local 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) + (set_local 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) + (set_local 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) + (set_local 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) + (set_local 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) + (set_local 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) + (set_local 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) + (set_local 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) + (set_local 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) + (set_local 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) + (set_local 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) + (set_local 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) + (set_local 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) + (set_local 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) + (set_local 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) + (set_local 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) + (set_local 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) + (set_local 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) + (set_local 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) + (set_local 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) + (set_local 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) + (set_local 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) + (set_local 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) + (set_local 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) + (set_local 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) + (set_local 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) + (set_local 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) + (set_local 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) + (set_local 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) + (set_local 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) + (set_local 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) + (set_local 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) + (set_local 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) + (set_local 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) + (set_local 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) + (set_local 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) + (set_local 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) + (set_local 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) + (set_local 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) + (set_local 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) + (set_local 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) + (set_local 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) + (set_local 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) + (set_local 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) + (set_local 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) + (set_local 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) + (set_local 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) + (set_local 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) + (set_local 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) + (set_local 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) + (set_local 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) + (set_local 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) + (set_local 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) + (set_local 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) + (set_local 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) + (set_local 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) + (set_local 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) + (set_local 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) + (set_local 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) + (set_local 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) + (set_local 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) + (set_local 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) + (set_local 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) + (set_local 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) + (set_local 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) + (set_local 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) + (set_local 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) + (set_local 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) + (set_local 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) + (set_local 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) + (set_local 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) + (set_local 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) + (set_local 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) + (set_local 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) + (set_local 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) + (set_local 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) + (set_local 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) + (set_local 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) + (set_local 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) + (set_local 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) + (set_local 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) + (set_local 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) + (set_local 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) + (set_local 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) + (set_local 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) + (set_local 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) + (set_local 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) + (set_local 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) + (set_local 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) + (set_local 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) + (set_local 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) + (set_local 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) + (set_local 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) + (set_local 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) + (set_local 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) + (set_local 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) + (set_local 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) + (set_local 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) + (set_local 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) + (set_local 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) + (set_local 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) + (set_local 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) + (set_local 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) + (set_local 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) + (set_local 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) + (set_local 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) + (set_local 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) + (set_local 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) + (set_local 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) + (set_local 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) + (set_local 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) + (set_local 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) + (set_local 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) + (set_local 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) + (set_local 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) + (set_local 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) + (set_local 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) + (set_local 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) + (set_local 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) + (set_local 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) + (set_local 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) + (set_local 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) + (set_local 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) + (set_local 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) + (set_local 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) + (set_local 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) + (set_local 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) + (set_local 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) + (set_local 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) + (set_local 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) + (set_local 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) + (set_local 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) + (set_local 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) + (set_local 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) + (set_local 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) + (set_local 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) + (set_local 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) + (set_local 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) + (set_local 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) + (set_local 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) + (set_local 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) + (set_local 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) + (set_local 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) + (set_local 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) + (set_local 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) + (set_local 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) + (set_local 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) + (set_local 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) + (set_local 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) + (set_local 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) + (set_local 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) + (set_local 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) + (set_local 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) + (set_local 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) + (set_local 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) + (set_local 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) + (set_local 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) + (set_local 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) + (set_local 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) + (set_local 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) + (set_local 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) + (set_local 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) + (set_local 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) + (set_local 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) + (set_local 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) + (set_local 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) + (set_local 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) + (set_local 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) + (set_local 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) + (set_local 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) + (set_local 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) + (set_local 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) + (set_local 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) + (set_local 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) + (set_local 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) + (set_local 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) + (set_local 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) + (set_local 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) + (set_local 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) + (set_local 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) + (set_local 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) + (set_local 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) + (set_local 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) + (set_local 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) + (set_local 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) + (set_local 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) + (set_local 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) + + ;; store the locals back to memory + (i64.store offset=0x000 align=1 (i32.const 0) (get_local 0x000)) + (i64.store offset=0x001 align=1 (i32.const 0) (get_local 0x001)) + (i64.store offset=0x002 align=1 (i32.const 0) (get_local 0x002)) + (i64.store offset=0x003 align=1 (i32.const 0) (get_local 0x003)) + (i64.store offset=0x004 align=1 (i32.const 0) (get_local 0x004)) + (i64.store offset=0x005 align=1 (i32.const 0) (get_local 0x005)) + (i64.store offset=0x006 align=1 (i32.const 0) (get_local 0x006)) + (i64.store offset=0x007 align=1 (i32.const 0) (get_local 0x007)) + (i64.store offset=0x008 align=1 (i32.const 0) (get_local 0x008)) + (i64.store offset=0x009 align=1 (i32.const 0) (get_local 0x009)) + (i64.store offset=0x00a align=1 (i32.const 0) (get_local 0x00a)) + (i64.store offset=0x00b align=1 (i32.const 0) (get_local 0x00b)) + (i64.store offset=0x00c align=1 (i32.const 0) (get_local 0x00c)) + (i64.store offset=0x00d align=1 (i32.const 0) (get_local 0x00d)) + (i64.store offset=0x00e align=1 (i32.const 0) (get_local 0x00e)) + (i64.store offset=0x00f align=1 (i32.const 0) (get_local 0x00f)) + (i64.store offset=0x010 align=1 (i32.const 0) (get_local 0x010)) + (i64.store offset=0x011 align=1 (i32.const 0) (get_local 0x011)) + (i64.store offset=0x012 align=1 (i32.const 0) (get_local 0x012)) + (i64.store offset=0x013 align=1 (i32.const 0) (get_local 0x013)) + (i64.store offset=0x014 align=1 (i32.const 0) (get_local 0x014)) + (i64.store offset=0x015 align=1 (i32.const 0) (get_local 0x015)) + (i64.store offset=0x016 align=1 (i32.const 0) (get_local 0x016)) + (i64.store offset=0x017 align=1 (i32.const 0) (get_local 0x017)) + (i64.store offset=0x018 align=1 (i32.const 0) (get_local 0x018)) + (i64.store offset=0x019 align=1 (i32.const 0) (get_local 0x019)) + (i64.store offset=0x01a align=1 (i32.const 0) (get_local 0x01a)) + (i64.store offset=0x01b align=1 (i32.const 0) (get_local 0x01b)) + (i64.store offset=0x01c align=1 (i32.const 0) (get_local 0x01c)) + (i64.store offset=0x01d align=1 (i32.const 0) (get_local 0x01d)) + (i64.store offset=0x01e align=1 (i32.const 0) (get_local 0x01e)) + (i64.store offset=0x01f align=1 (i32.const 0) (get_local 0x01f)) + (i64.store offset=0x020 align=1 (i32.const 0) (get_local 0x020)) + (i64.store offset=0x021 align=1 (i32.const 0) (get_local 0x021)) + (i64.store offset=0x022 align=1 (i32.const 0) (get_local 0x022)) + (i64.store offset=0x023 align=1 (i32.const 0) (get_local 0x023)) + (i64.store offset=0x024 align=1 (i32.const 0) (get_local 0x024)) + (i64.store offset=0x025 align=1 (i32.const 0) (get_local 0x025)) + (i64.store offset=0x026 align=1 (i32.const 0) (get_local 0x026)) + (i64.store offset=0x027 align=1 (i32.const 0) (get_local 0x027)) + (i64.store offset=0x028 align=1 (i32.const 0) (get_local 0x028)) + (i64.store offset=0x029 align=1 (i32.const 0) (get_local 0x029)) + (i64.store offset=0x02a align=1 (i32.const 0) (get_local 0x02a)) + (i64.store offset=0x02b align=1 (i32.const 0) (get_local 0x02b)) + (i64.store offset=0x02c align=1 (i32.const 0) (get_local 0x02c)) + (i64.store offset=0x02d align=1 (i32.const 0) (get_local 0x02d)) + (i64.store offset=0x02e align=1 (i32.const 0) (get_local 0x02e)) + (i64.store offset=0x02f align=1 (i32.const 0) (get_local 0x02f)) + (i64.store offset=0x030 align=1 (i32.const 0) (get_local 0x030)) + (i64.store offset=0x031 align=1 (i32.const 0) (get_local 0x031)) + (i64.store offset=0x032 align=1 (i32.const 0) (get_local 0x032)) + (i64.store offset=0x033 align=1 (i32.const 0) (get_local 0x033)) + (i64.store offset=0x034 align=1 (i32.const 0) (get_local 0x034)) + (i64.store offset=0x035 align=1 (i32.const 0) (get_local 0x035)) + (i64.store offset=0x036 align=1 (i32.const 0) (get_local 0x036)) + (i64.store offset=0x037 align=1 (i32.const 0) (get_local 0x037)) + (i64.store offset=0x038 align=1 (i32.const 0) (get_local 0x038)) + (i64.store offset=0x039 align=1 (i32.const 0) (get_local 0x039)) + (i64.store offset=0x03a align=1 (i32.const 0) (get_local 0x03a)) + (i64.store offset=0x03b align=1 (i32.const 0) (get_local 0x03b)) + (i64.store offset=0x03c align=1 (i32.const 0) (get_local 0x03c)) + (i64.store offset=0x03d align=1 (i32.const 0) (get_local 0x03d)) + (i64.store offset=0x03e align=1 (i32.const 0) (get_local 0x03e)) + (i64.store offset=0x03f align=1 (i32.const 0) (get_local 0x03f)) + (i64.store offset=0x040 align=1 (i32.const 0) (get_local 0x040)) + (i64.store offset=0x041 align=1 (i32.const 0) (get_local 0x041)) + (i64.store offset=0x042 align=1 (i32.const 0) (get_local 0x042)) + (i64.store offset=0x043 align=1 (i32.const 0) (get_local 0x043)) + (i64.store offset=0x044 align=1 (i32.const 0) (get_local 0x044)) + (i64.store offset=0x045 align=1 (i32.const 0) (get_local 0x045)) + (i64.store offset=0x046 align=1 (i32.const 0) (get_local 0x046)) + (i64.store offset=0x047 align=1 (i32.const 0) (get_local 0x047)) + (i64.store offset=0x048 align=1 (i32.const 0) (get_local 0x048)) + (i64.store offset=0x049 align=1 (i32.const 0) (get_local 0x049)) + (i64.store offset=0x04a align=1 (i32.const 0) (get_local 0x04a)) + (i64.store offset=0x04b align=1 (i32.const 0) (get_local 0x04b)) + (i64.store offset=0x04c align=1 (i32.const 0) (get_local 0x04c)) + (i64.store offset=0x04d align=1 (i32.const 0) (get_local 0x04d)) + (i64.store offset=0x04e align=1 (i32.const 0) (get_local 0x04e)) + (i64.store offset=0x04f align=1 (i32.const 0) (get_local 0x04f)) + (i64.store offset=0x050 align=1 (i32.const 0) (get_local 0x050)) + (i64.store offset=0x051 align=1 (i32.const 0) (get_local 0x051)) + (i64.store offset=0x052 align=1 (i32.const 0) (get_local 0x052)) + (i64.store offset=0x053 align=1 (i32.const 0) (get_local 0x053)) + (i64.store offset=0x054 align=1 (i32.const 0) (get_local 0x054)) + (i64.store offset=0x055 align=1 (i32.const 0) (get_local 0x055)) + (i64.store offset=0x056 align=1 (i32.const 0) (get_local 0x056)) + (i64.store offset=0x057 align=1 (i32.const 0) (get_local 0x057)) + (i64.store offset=0x058 align=1 (i32.const 0) (get_local 0x058)) + (i64.store offset=0x059 align=1 (i32.const 0) (get_local 0x059)) + (i64.store offset=0x05a align=1 (i32.const 0) (get_local 0x05a)) + (i64.store offset=0x05b align=1 (i32.const 0) (get_local 0x05b)) + (i64.store offset=0x05c align=1 (i32.const 0) (get_local 0x05c)) + (i64.store offset=0x05d align=1 (i32.const 0) (get_local 0x05d)) + (i64.store offset=0x05e align=1 (i32.const 0) (get_local 0x05e)) + (i64.store offset=0x05f align=1 (i32.const 0) (get_local 0x05f)) + (i64.store offset=0x060 align=1 (i32.const 0) (get_local 0x060)) + (i64.store offset=0x061 align=1 (i32.const 0) (get_local 0x061)) + (i64.store offset=0x062 align=1 (i32.const 0) (get_local 0x062)) + (i64.store offset=0x063 align=1 (i32.const 0) (get_local 0x063)) + (i64.store offset=0x064 align=1 (i32.const 0) (get_local 0x064)) + (i64.store offset=0x065 align=1 (i32.const 0) (get_local 0x065)) + (i64.store offset=0x066 align=1 (i32.const 0) (get_local 0x066)) + (i64.store offset=0x067 align=1 (i32.const 0) (get_local 0x067)) + (i64.store offset=0x068 align=1 (i32.const 0) (get_local 0x068)) + (i64.store offset=0x069 align=1 (i32.const 0) (get_local 0x069)) + (i64.store offset=0x06a align=1 (i32.const 0) (get_local 0x06a)) + (i64.store offset=0x06b align=1 (i32.const 0) (get_local 0x06b)) + (i64.store offset=0x06c align=1 (i32.const 0) (get_local 0x06c)) + (i64.store offset=0x06d align=1 (i32.const 0) (get_local 0x06d)) + (i64.store offset=0x06e align=1 (i32.const 0) (get_local 0x06e)) + (i64.store offset=0x06f align=1 (i32.const 0) (get_local 0x06f)) + (i64.store offset=0x070 align=1 (i32.const 0) (get_local 0x070)) + (i64.store offset=0x071 align=1 (i32.const 0) (get_local 0x071)) + (i64.store offset=0x072 align=1 (i32.const 0) (get_local 0x072)) + (i64.store offset=0x073 align=1 (i32.const 0) (get_local 0x073)) + (i64.store offset=0x074 align=1 (i32.const 0) (get_local 0x074)) + (i64.store offset=0x075 align=1 (i32.const 0) (get_local 0x075)) + (i64.store offset=0x076 align=1 (i32.const 0) (get_local 0x076)) + (i64.store offset=0x077 align=1 (i32.const 0) (get_local 0x077)) + (i64.store offset=0x078 align=1 (i32.const 0) (get_local 0x078)) + (i64.store offset=0x079 align=1 (i32.const 0) (get_local 0x079)) + (i64.store offset=0x07a align=1 (i32.const 0) (get_local 0x07a)) + (i64.store offset=0x07b align=1 (i32.const 0) (get_local 0x07b)) + (i64.store offset=0x07c align=1 (i32.const 0) (get_local 0x07c)) + (i64.store offset=0x07d align=1 (i32.const 0) (get_local 0x07d)) + (i64.store offset=0x07e align=1 (i32.const 0) (get_local 0x07e)) + (i64.store offset=0x07f align=1 (i32.const 0) (get_local 0x07f)) + (i64.store offset=0x080 align=1 (i32.const 0) (get_local 0x080)) + (i64.store offset=0x081 align=1 (i32.const 0) (get_local 0x081)) + (i64.store offset=0x082 align=1 (i32.const 0) (get_local 0x082)) + (i64.store offset=0x083 align=1 (i32.const 0) (get_local 0x083)) + (i64.store offset=0x084 align=1 (i32.const 0) (get_local 0x084)) + (i64.store offset=0x085 align=1 (i32.const 0) (get_local 0x085)) + (i64.store offset=0x086 align=1 (i32.const 0) (get_local 0x086)) + (i64.store offset=0x087 align=1 (i32.const 0) (get_local 0x087)) + (i64.store offset=0x088 align=1 (i32.const 0) (get_local 0x088)) + (i64.store offset=0x089 align=1 (i32.const 0) (get_local 0x089)) + (i64.store offset=0x08a align=1 (i32.const 0) (get_local 0x08a)) + (i64.store offset=0x08b align=1 (i32.const 0) (get_local 0x08b)) + (i64.store offset=0x08c align=1 (i32.const 0) (get_local 0x08c)) + (i64.store offset=0x08d align=1 (i32.const 0) (get_local 0x08d)) + (i64.store offset=0x08e align=1 (i32.const 0) (get_local 0x08e)) + (i64.store offset=0x08f align=1 (i32.const 0) (get_local 0x08f)) + (i64.store offset=0x090 align=1 (i32.const 0) (get_local 0x090)) + (i64.store offset=0x091 align=1 (i32.const 0) (get_local 0x091)) + (i64.store offset=0x092 align=1 (i32.const 0) (get_local 0x092)) + (i64.store offset=0x093 align=1 (i32.const 0) (get_local 0x093)) + (i64.store offset=0x094 align=1 (i32.const 0) (get_local 0x094)) + (i64.store offset=0x095 align=1 (i32.const 0) (get_local 0x095)) + (i64.store offset=0x096 align=1 (i32.const 0) (get_local 0x096)) + (i64.store offset=0x097 align=1 (i32.const 0) (get_local 0x097)) + (i64.store offset=0x098 align=1 (i32.const 0) (get_local 0x098)) + (i64.store offset=0x099 align=1 (i32.const 0) (get_local 0x099)) + (i64.store offset=0x09a align=1 (i32.const 0) (get_local 0x09a)) + (i64.store offset=0x09b align=1 (i32.const 0) (get_local 0x09b)) + (i64.store offset=0x09c align=1 (i32.const 0) (get_local 0x09c)) + (i64.store offset=0x09d align=1 (i32.const 0) (get_local 0x09d)) + (i64.store offset=0x09e align=1 (i32.const 0) (get_local 0x09e)) + (i64.store offset=0x09f align=1 (i32.const 0) (get_local 0x09f)) + (i64.store offset=0x0a0 align=1 (i32.const 0) (get_local 0x0a0)) + (i64.store offset=0x0a1 align=1 (i32.const 0) (get_local 0x0a1)) + (i64.store offset=0x0a2 align=1 (i32.const 0) (get_local 0x0a2)) + (i64.store offset=0x0a3 align=1 (i32.const 0) (get_local 0x0a3)) + (i64.store offset=0x0a4 align=1 (i32.const 0) (get_local 0x0a4)) + (i64.store offset=0x0a5 align=1 (i32.const 0) (get_local 0x0a5)) + (i64.store offset=0x0a6 align=1 (i32.const 0) (get_local 0x0a6)) + (i64.store offset=0x0a7 align=1 (i32.const 0) (get_local 0x0a7)) + (i64.store offset=0x0a8 align=1 (i32.const 0) (get_local 0x0a8)) + (i64.store offset=0x0a9 align=1 (i32.const 0) (get_local 0x0a9)) + (i64.store offset=0x0aa align=1 (i32.const 0) (get_local 0x0aa)) + (i64.store offset=0x0ab align=1 (i32.const 0) (get_local 0x0ab)) + (i64.store offset=0x0ac align=1 (i32.const 0) (get_local 0x0ac)) + (i64.store offset=0x0ad align=1 (i32.const 0) (get_local 0x0ad)) + (i64.store offset=0x0ae align=1 (i32.const 0) (get_local 0x0ae)) + (i64.store offset=0x0af align=1 (i32.const 0) (get_local 0x0af)) + (i64.store offset=0x0b0 align=1 (i32.const 0) (get_local 0x0b0)) + (i64.store offset=0x0b1 align=1 (i32.const 0) (get_local 0x0b1)) + (i64.store offset=0x0b2 align=1 (i32.const 0) (get_local 0x0b2)) + (i64.store offset=0x0b3 align=1 (i32.const 0) (get_local 0x0b3)) + (i64.store offset=0x0b4 align=1 (i32.const 0) (get_local 0x0b4)) + (i64.store offset=0x0b5 align=1 (i32.const 0) (get_local 0x0b5)) + (i64.store offset=0x0b6 align=1 (i32.const 0) (get_local 0x0b6)) + (i64.store offset=0x0b7 align=1 (i32.const 0) (get_local 0x0b7)) + (i64.store offset=0x0b8 align=1 (i32.const 0) (get_local 0x0b8)) + (i64.store offset=0x0b9 align=1 (i32.const 0) (get_local 0x0b9)) + (i64.store offset=0x0ba align=1 (i32.const 0) (get_local 0x0ba)) + (i64.store offset=0x0bb align=1 (i32.const 0) (get_local 0x0bb)) + (i64.store offset=0x0bc align=1 (i32.const 0) (get_local 0x0bc)) + (i64.store offset=0x0bd align=1 (i32.const 0) (get_local 0x0bd)) + (i64.store offset=0x0be align=1 (i32.const 0) (get_local 0x0be)) + (i64.store offset=0x0bf align=1 (i32.const 0) (get_local 0x0bf)) + (i64.store offset=0x0c0 align=1 (i32.const 0) (get_local 0x0c0)) + (i64.store offset=0x0c1 align=1 (i32.const 0) (get_local 0x0c1)) + (i64.store offset=0x0c2 align=1 (i32.const 0) (get_local 0x0c2)) + (i64.store offset=0x0c3 align=1 (i32.const 0) (get_local 0x0c3)) + (i64.store offset=0x0c4 align=1 (i32.const 0) (get_local 0x0c4)) + (i64.store offset=0x0c5 align=1 (i32.const 0) (get_local 0x0c5)) + (i64.store offset=0x0c6 align=1 (i32.const 0) (get_local 0x0c6)) + (i64.store offset=0x0c7 align=1 (i32.const 0) (get_local 0x0c7)) + (i64.store offset=0x0c8 align=1 (i32.const 0) (get_local 0x0c8)) + (i64.store offset=0x0c9 align=1 (i32.const 0) (get_local 0x0c9)) + (i64.store offset=0x0ca align=1 (i32.const 0) (get_local 0x0ca)) + (i64.store offset=0x0cb align=1 (i32.const 0) (get_local 0x0cb)) + (i64.store offset=0x0cc align=1 (i32.const 0) (get_local 0x0cc)) + (i64.store offset=0x0cd align=1 (i32.const 0) (get_local 0x0cd)) + (i64.store offset=0x0ce align=1 (i32.const 0) (get_local 0x0ce)) + (i64.store offset=0x0cf align=1 (i32.const 0) (get_local 0x0cf)) + (i64.store offset=0x0d0 align=1 (i32.const 0) (get_local 0x0d0)) + (i64.store offset=0x0d1 align=1 (i32.const 0) (get_local 0x0d1)) + (i64.store offset=0x0d2 align=1 (i32.const 0) (get_local 0x0d2)) + (i64.store offset=0x0d3 align=1 (i32.const 0) (get_local 0x0d3)) + (i64.store offset=0x0d4 align=1 (i32.const 0) (get_local 0x0d4)) + (i64.store offset=0x0d5 align=1 (i32.const 0) (get_local 0x0d5)) + (i64.store offset=0x0d6 align=1 (i32.const 0) (get_local 0x0d6)) + (i64.store offset=0x0d7 align=1 (i32.const 0) (get_local 0x0d7)) + (i64.store offset=0x0d8 align=1 (i32.const 0) (get_local 0x0d8)) + (i64.store offset=0x0d9 align=1 (i32.const 0) (get_local 0x0d9)) + (i64.store offset=0x0da align=1 (i32.const 0) (get_local 0x0da)) + (i64.store offset=0x0db align=1 (i32.const 0) (get_local 0x0db)) + (i64.store offset=0x0dc align=1 (i32.const 0) (get_local 0x0dc)) + (i64.store offset=0x0dd align=1 (i32.const 0) (get_local 0x0dd)) + (i64.store offset=0x0de align=1 (i32.const 0) (get_local 0x0de)) + (i64.store offset=0x0df align=1 (i32.const 0) (get_local 0x0df)) + (i64.store offset=0x0e0 align=1 (i32.const 0) (get_local 0x0e0)) + (i64.store offset=0x0e1 align=1 (i32.const 0) (get_local 0x0e1)) + (i64.store offset=0x0e2 align=1 (i32.const 0) (get_local 0x0e2)) + (i64.store offset=0x0e3 align=1 (i32.const 0) (get_local 0x0e3)) + (i64.store offset=0x0e4 align=1 (i32.const 0) (get_local 0x0e4)) + (i64.store offset=0x0e5 align=1 (i32.const 0) (get_local 0x0e5)) + (i64.store offset=0x0e6 align=1 (i32.const 0) (get_local 0x0e6)) + (i64.store offset=0x0e7 align=1 (i32.const 0) (get_local 0x0e7)) + (i64.store offset=0x0e8 align=1 (i32.const 0) (get_local 0x0e8)) + (i64.store offset=0x0e9 align=1 (i32.const 0) (get_local 0x0e9)) + (i64.store offset=0x0ea align=1 (i32.const 0) (get_local 0x0ea)) + (i64.store offset=0x0eb align=1 (i32.const 0) (get_local 0x0eb)) + (i64.store offset=0x0ec align=1 (i32.const 0) (get_local 0x0ec)) + (i64.store offset=0x0ed align=1 (i32.const 0) (get_local 0x0ed)) + (i64.store offset=0x0ee align=1 (i32.const 0) (get_local 0x0ee)) + (i64.store offset=0x0ef align=1 (i32.const 0) (get_local 0x0ef)) + (i64.store offset=0x0f0 align=1 (i32.const 0) (get_local 0x0f0)) + (i64.store offset=0x0f1 align=1 (i32.const 0) (get_local 0x0f1)) + (i64.store offset=0x0f2 align=1 (i32.const 0) (get_local 0x0f2)) + (i64.store offset=0x0f3 align=1 (i32.const 0) (get_local 0x0f3)) + (i64.store offset=0x0f4 align=1 (i32.const 0) (get_local 0x0f4)) + (i64.store offset=0x0f5 align=1 (i32.const 0) (get_local 0x0f5)) + (i64.store offset=0x0f6 align=1 (i32.const 0) (get_local 0x0f6)) + (i64.store offset=0x0f7 align=1 (i32.const 0) (get_local 0x0f7)) + (i64.store offset=0x0f8 align=1 (i32.const 0) (get_local 0x0f8)) + (i64.store offset=0x0f9 align=1 (i32.const 0) (get_local 0x0f9)) + (i64.store offset=0x0fa align=1 (i32.const 0) (get_local 0x0fa)) + (i64.store offset=0x0fb align=1 (i32.const 0) (get_local 0x0fb)) + (i64.store offset=0x0fc align=1 (i32.const 0) (get_local 0x0fc)) + (i64.store offset=0x0fd align=1 (i32.const 0) (get_local 0x0fd)) + (i64.store offset=0x0fe align=1 (i32.const 0) (get_local 0x0fe)) + (i64.store offset=0x0ff align=1 (i32.const 0) (get_local 0x0ff)) + (i64.store offset=0x100 align=1 (i32.const 0) (get_local 0x100)) + (i64.store offset=0x101 align=1 (i32.const 0) (get_local 0x101)) + (i64.store offset=0x102 align=1 (i32.const 0) (get_local 0x102)) + (i64.store offset=0x103 align=1 (i32.const 0) (get_local 0x103)) + (i64.store offset=0x104 align=1 (i32.const 0) (get_local 0x104)) + (i64.store offset=0x105 align=1 (i32.const 0) (get_local 0x105)) + (i64.store offset=0x106 align=1 (i32.const 0) (get_local 0x106)) + (i64.store offset=0x107 align=1 (i32.const 0) (get_local 0x107)) + (i64.store offset=0x108 align=1 (i32.const 0) (get_local 0x108)) + (i64.store offset=0x109 align=1 (i32.const 0) (get_local 0x109)) + (i64.store offset=0x10a align=1 (i32.const 0) (get_local 0x10a)) + (i64.store offset=0x10b align=1 (i32.const 0) (get_local 0x10b)) + (i64.store offset=0x10c align=1 (i32.const 0) (get_local 0x10c)) + (i64.store offset=0x10d align=1 (i32.const 0) (get_local 0x10d)) + (i64.store offset=0x10e align=1 (i32.const 0) (get_local 0x10e)) + (i64.store offset=0x10f align=1 (i32.const 0) (get_local 0x10f)) + (i64.store offset=0x110 align=1 (i32.const 0) (get_local 0x110)) + (i64.store offset=0x111 align=1 (i32.const 0) (get_local 0x111)) + (i64.store offset=0x112 align=1 (i32.const 0) (get_local 0x112)) + (i64.store offset=0x113 align=1 (i32.const 0) (get_local 0x113)) + (i64.store offset=0x114 align=1 (i32.const 0) (get_local 0x114)) + (i64.store offset=0x115 align=1 (i32.const 0) (get_local 0x115)) + (i64.store offset=0x116 align=1 (i32.const 0) (get_local 0x116)) + (i64.store offset=0x117 align=1 (i32.const 0) (get_local 0x117)) + (i64.store offset=0x118 align=1 (i32.const 0) (get_local 0x118)) + (i64.store offset=0x119 align=1 (i32.const 0) (get_local 0x119)) + (i64.store offset=0x11a align=1 (i32.const 0) (get_local 0x11a)) + (i64.store offset=0x11b align=1 (i32.const 0) (get_local 0x11b)) + (i64.store offset=0x11c align=1 (i32.const 0) (get_local 0x11c)) + (i64.store offset=0x11d align=1 (i32.const 0) (get_local 0x11d)) + (i64.store offset=0x11e align=1 (i32.const 0) (get_local 0x11e)) + (i64.store offset=0x11f align=1 (i32.const 0) (get_local 0x11f)) + (i64.store offset=0x120 align=1 (i32.const 0) (get_local 0x120)) + (i64.store offset=0x121 align=1 (i32.const 0) (get_local 0x121)) + (i64.store offset=0x122 align=1 (i32.const 0) (get_local 0x122)) + (i64.store offset=0x123 align=1 (i32.const 0) (get_local 0x123)) + (i64.store offset=0x124 align=1 (i32.const 0) (get_local 0x124)) + (i64.store offset=0x125 align=1 (i32.const 0) (get_local 0x125)) + (i64.store offset=0x126 align=1 (i32.const 0) (get_local 0x126)) + (i64.store offset=0x127 align=1 (i32.const 0) (get_local 0x127)) + (i64.store offset=0x128 align=1 (i32.const 0) (get_local 0x128)) + (i64.store offset=0x129 align=1 (i32.const 0) (get_local 0x129)) + (i64.store offset=0x12a align=1 (i32.const 0) (get_local 0x12a)) + (i64.store offset=0x12b align=1 (i32.const 0) (get_local 0x12b)) + (i64.store offset=0x12c align=1 (i32.const 0) (get_local 0x12c)) + (i64.store offset=0x12d align=1 (i32.const 0) (get_local 0x12d)) + (i64.store offset=0x12e align=1 (i32.const 0) (get_local 0x12e)) + (i64.store offset=0x12f align=1 (i32.const 0) (get_local 0x12f)) + (i64.store offset=0x130 align=1 (i32.const 0) (get_local 0x130)) + (i64.store offset=0x131 align=1 (i32.const 0) (get_local 0x131)) + (i64.store offset=0x132 align=1 (i32.const 0) (get_local 0x132)) + (i64.store offset=0x133 align=1 (i32.const 0) (get_local 0x133)) + (i64.store offset=0x134 align=1 (i32.const 0) (get_local 0x134)) + (i64.store offset=0x135 align=1 (i32.const 0) (get_local 0x135)) + (i64.store offset=0x136 align=1 (i32.const 0) (get_local 0x136)) + (i64.store offset=0x137 align=1 (i32.const 0) (get_local 0x137)) + (i64.store offset=0x138 align=1 (i32.const 0) (get_local 0x138)) + (i64.store offset=0x139 align=1 (i32.const 0) (get_local 0x139)) + (i64.store offset=0x13a align=1 (i32.const 0) (get_local 0x13a)) + (i64.store offset=0x13b align=1 (i32.const 0) (get_local 0x13b)) + (i64.store offset=0x13c align=1 (i32.const 0) (get_local 0x13c)) + (i64.store offset=0x13d align=1 (i32.const 0) (get_local 0x13d)) + (i64.store offset=0x13e align=1 (i32.const 0) (get_local 0x13e)) + (i64.store offset=0x13f align=1 (i32.const 0) (get_local 0x13f)) + (i64.store offset=0x140 align=1 (i32.const 0) (get_local 0x140)) + (i64.store offset=0x141 align=1 (i32.const 0) (get_local 0x141)) + (i64.store offset=0x142 align=1 (i32.const 0) (get_local 0x142)) + (i64.store offset=0x143 align=1 (i32.const 0) (get_local 0x143)) + (i64.store offset=0x144 align=1 (i32.const 0) (get_local 0x144)) + (i64.store offset=0x145 align=1 (i32.const 0) (get_local 0x145)) + (i64.store offset=0x146 align=1 (i32.const 0) (get_local 0x146)) + (i64.store offset=0x147 align=1 (i32.const 0) (get_local 0x147)) + (i64.store offset=0x148 align=1 (i32.const 0) (get_local 0x148)) + (i64.store offset=0x149 align=1 (i32.const 0) (get_local 0x149)) + (i64.store offset=0x14a align=1 (i32.const 0) (get_local 0x14a)) + (i64.store offset=0x14b align=1 (i32.const 0) (get_local 0x14b)) + (i64.store offset=0x14c align=1 (i32.const 0) (get_local 0x14c)) + (i64.store offset=0x14d align=1 (i32.const 0) (get_local 0x14d)) + (i64.store offset=0x14e align=1 (i32.const 0) (get_local 0x14e)) + (i64.store offset=0x14f align=1 (i32.const 0) (get_local 0x14f)) + (i64.store offset=0x150 align=1 (i32.const 0) (get_local 0x150)) + (i64.store offset=0x151 align=1 (i32.const 0) (get_local 0x151)) + (i64.store offset=0x152 align=1 (i32.const 0) (get_local 0x152)) + (i64.store offset=0x153 align=1 (i32.const 0) (get_local 0x153)) + (i64.store offset=0x154 align=1 (i32.const 0) (get_local 0x154)) + (i64.store offset=0x155 align=1 (i32.const 0) (get_local 0x155)) + (i64.store offset=0x156 align=1 (i32.const 0) (get_local 0x156)) + (i64.store offset=0x157 align=1 (i32.const 0) (get_local 0x157)) + (i64.store offset=0x158 align=1 (i32.const 0) (get_local 0x158)) + (i64.store offset=0x159 align=1 (i32.const 0) (get_local 0x159)) + (i64.store offset=0x15a align=1 (i32.const 0) (get_local 0x15a)) + (i64.store offset=0x15b align=1 (i32.const 0) (get_local 0x15b)) + (i64.store offset=0x15c align=1 (i32.const 0) (get_local 0x15c)) + (i64.store offset=0x15d align=1 (i32.const 0) (get_local 0x15d)) + (i64.store offset=0x15e align=1 (i32.const 0) (get_local 0x15e)) + (i64.store offset=0x15f align=1 (i32.const 0) (get_local 0x15f)) + (i64.store offset=0x160 align=1 (i32.const 0) (get_local 0x160)) + (i64.store offset=0x161 align=1 (i32.const 0) (get_local 0x161)) + (i64.store offset=0x162 align=1 (i32.const 0) (get_local 0x162)) + (i64.store offset=0x163 align=1 (i32.const 0) (get_local 0x163)) + (i64.store offset=0x164 align=1 (i32.const 0) (get_local 0x164)) + (i64.store offset=0x165 align=1 (i32.const 0) (get_local 0x165)) + (i64.store offset=0x166 align=1 (i32.const 0) (get_local 0x166)) + (i64.store offset=0x167 align=1 (i32.const 0) (get_local 0x167)) + (i64.store offset=0x168 align=1 (i32.const 0) (get_local 0x168)) + (i64.store offset=0x169 align=1 (i32.const 0) (get_local 0x169)) + (i64.store offset=0x16a align=1 (i32.const 0) (get_local 0x16a)) + (i64.store offset=0x16b align=1 (i32.const 0) (get_local 0x16b)) + (i64.store offset=0x16c align=1 (i32.const 0) (get_local 0x16c)) + (i64.store offset=0x16d align=1 (i32.const 0) (get_local 0x16d)) + (i64.store offset=0x16e align=1 (i32.const 0) (get_local 0x16e)) + (i64.store offset=0x16f align=1 (i32.const 0) (get_local 0x16f)) + (i64.store offset=0x170 align=1 (i32.const 0) (get_local 0x170)) + (i64.store offset=0x171 align=1 (i32.const 0) (get_local 0x171)) + (i64.store offset=0x172 align=1 (i32.const 0) (get_local 0x172)) + (i64.store offset=0x173 align=1 (i32.const 0) (get_local 0x173)) + (i64.store offset=0x174 align=1 (i32.const 0) (get_local 0x174)) + (i64.store offset=0x175 align=1 (i32.const 0) (get_local 0x175)) + (i64.store offset=0x176 align=1 (i32.const 0) (get_local 0x176)) + (i64.store offset=0x177 align=1 (i32.const 0) (get_local 0x177)) + (i64.store offset=0x178 align=1 (i32.const 0) (get_local 0x178)) + (i64.store offset=0x179 align=1 (i32.const 0) (get_local 0x179)) + (i64.store offset=0x17a align=1 (i32.const 0) (get_local 0x17a)) + (i64.store offset=0x17b align=1 (i32.const 0) (get_local 0x17b)) + (i64.store offset=0x17c align=1 (i32.const 0) (get_local 0x17c)) + (i64.store offset=0x17d align=1 (i32.const 0) (get_local 0x17d)) + (i64.store offset=0x17e align=1 (i32.const 0) (get_local 0x17e)) + (i64.store offset=0x17f align=1 (i32.const 0) (get_local 0x17f)) + (i64.store offset=0x180 align=1 (i32.const 0) (get_local 0x180)) + (i64.store offset=0x181 align=1 (i32.const 0) (get_local 0x181)) + (i64.store offset=0x182 align=1 (i32.const 0) (get_local 0x182)) + (i64.store offset=0x183 align=1 (i32.const 0) (get_local 0x183)) + (i64.store offset=0x184 align=1 (i32.const 0) (get_local 0x184)) + (i64.store offset=0x185 align=1 (i32.const 0) (get_local 0x185)) + (i64.store offset=0x186 align=1 (i32.const 0) (get_local 0x186)) + (i64.store offset=0x187 align=1 (i32.const 0) (get_local 0x187)) + (i64.store offset=0x188 align=1 (i32.const 0) (get_local 0x188)) + (i64.store offset=0x189 align=1 (i32.const 0) (get_local 0x189)) + (i64.store offset=0x18a align=1 (i32.const 0) (get_local 0x18a)) + (i64.store offset=0x18b align=1 (i32.const 0) (get_local 0x18b)) + (i64.store offset=0x18c align=1 (i32.const 0) (get_local 0x18c)) + (i64.store offset=0x18d align=1 (i32.const 0) (get_local 0x18d)) + (i64.store offset=0x18e align=1 (i32.const 0) (get_local 0x18e)) + (i64.store offset=0x18f align=1 (i32.const 0) (get_local 0x18f)) + (i64.store offset=0x190 align=1 (i32.const 0) (get_local 0x190)) + (i64.store offset=0x191 align=1 (i32.const 0) (get_local 0x191)) + (i64.store offset=0x192 align=1 (i32.const 0) (get_local 0x192)) + (i64.store offset=0x193 align=1 (i32.const 0) (get_local 0x193)) + (i64.store offset=0x194 align=1 (i32.const 0) (get_local 0x194)) + (i64.store offset=0x195 align=1 (i32.const 0) (get_local 0x195)) + (i64.store offset=0x196 align=1 (i32.const 0) (get_local 0x196)) + (i64.store offset=0x197 align=1 (i32.const 0) (get_local 0x197)) + (i64.store offset=0x198 align=1 (i32.const 0) (get_local 0x198)) + (i64.store offset=0x199 align=1 (i32.const 0) (get_local 0x199)) + (i64.store offset=0x19a align=1 (i32.const 0) (get_local 0x19a)) + (i64.store offset=0x19b align=1 (i32.const 0) (get_local 0x19b)) + (i64.store offset=0x19c align=1 (i32.const 0) (get_local 0x19c)) + (i64.store offset=0x19d align=1 (i32.const 0) (get_local 0x19d)) + (i64.store offset=0x19e align=1 (i32.const 0) (get_local 0x19e)) + (i64.store offset=0x19f align=1 (i32.const 0) (get_local 0x19f)) + (i64.store offset=0x1a0 align=1 (i32.const 0) (get_local 0x1a0)) + (i64.store offset=0x1a1 align=1 (i32.const 0) (get_local 0x1a1)) + (i64.store offset=0x1a2 align=1 (i32.const 0) (get_local 0x1a2)) + (i64.store offset=0x1a3 align=1 (i32.const 0) (get_local 0x1a3)) + (i64.store offset=0x1a4 align=1 (i32.const 0) (get_local 0x1a4)) + (i64.store offset=0x1a5 align=1 (i32.const 0) (get_local 0x1a5)) + (i64.store offset=0x1a6 align=1 (i32.const 0) (get_local 0x1a6)) + (i64.store offset=0x1a7 align=1 (i32.const 0) (get_local 0x1a7)) + (i64.store offset=0x1a8 align=1 (i32.const 0) (get_local 0x1a8)) + (i64.store offset=0x1a9 align=1 (i32.const 0) (get_local 0x1a9)) + (i64.store offset=0x1aa align=1 (i32.const 0) (get_local 0x1aa)) + (i64.store offset=0x1ab align=1 (i32.const 0) (get_local 0x1ab)) + (i64.store offset=0x1ac align=1 (i32.const 0) (get_local 0x1ac)) + (i64.store offset=0x1ad align=1 (i32.const 0) (get_local 0x1ad)) + (i64.store offset=0x1ae align=1 (i32.const 0) (get_local 0x1ae)) + (i64.store offset=0x1af align=1 (i32.const 0) (get_local 0x1af)) + (i64.store offset=0x1b0 align=1 (i32.const 0) (get_local 0x1b0)) + (i64.store offset=0x1b1 align=1 (i32.const 0) (get_local 0x1b1)) + (i64.store offset=0x1b2 align=1 (i32.const 0) (get_local 0x1b2)) + (i64.store offset=0x1b3 align=1 (i32.const 0) (get_local 0x1b3)) + (i64.store offset=0x1b4 align=1 (i32.const 0) (get_local 0x1b4)) + (i64.store offset=0x1b5 align=1 (i32.const 0) (get_local 0x1b5)) + (i64.store offset=0x1b6 align=1 (i32.const 0) (get_local 0x1b6)) + (i64.store offset=0x1b7 align=1 (i32.const 0) (get_local 0x1b7)) + (i64.store offset=0x1b8 align=1 (i32.const 0) (get_local 0x1b8)) + (i64.store offset=0x1b9 align=1 (i32.const 0) (get_local 0x1b9)) + (i64.store offset=0x1ba align=1 (i32.const 0) (get_local 0x1ba)) + (i64.store offset=0x1bb align=1 (i32.const 0) (get_local 0x1bb)) + (i64.store offset=0x1bc align=1 (i32.const 0) (get_local 0x1bc)) + (i64.store offset=0x1bd align=1 (i32.const 0) (get_local 0x1bd)) + (i64.store offset=0x1be align=1 (i32.const 0) (get_local 0x1be)) + (i64.store offset=0x1bf align=1 (i32.const 0) (get_local 0x1bf)) + (i64.store offset=0x1c0 align=1 (i32.const 0) (get_local 0x1c0)) + (i64.store offset=0x1c1 align=1 (i32.const 0) (get_local 0x1c1)) + (i64.store offset=0x1c2 align=1 (i32.const 0) (get_local 0x1c2)) + (i64.store offset=0x1c3 align=1 (i32.const 0) (get_local 0x1c3)) + (i64.store offset=0x1c4 align=1 (i32.const 0) (get_local 0x1c4)) + (i64.store offset=0x1c5 align=1 (i32.const 0) (get_local 0x1c5)) + (i64.store offset=0x1c6 align=1 (i32.const 0) (get_local 0x1c6)) + (i64.store offset=0x1c7 align=1 (i32.const 0) (get_local 0x1c7)) + (i64.store offset=0x1c8 align=1 (i32.const 0) (get_local 0x1c8)) + (i64.store offset=0x1c9 align=1 (i32.const 0) (get_local 0x1c9)) + (i64.store offset=0x1ca align=1 (i32.const 0) (get_local 0x1ca)) + (i64.store offset=0x1cb align=1 (i32.const 0) (get_local 0x1cb)) + (i64.store offset=0x1cc align=1 (i32.const 0) (get_local 0x1cc)) + (i64.store offset=0x1cd align=1 (i32.const 0) (get_local 0x1cd)) + (i64.store offset=0x1ce align=1 (i32.const 0) (get_local 0x1ce)) + (i64.store offset=0x1cf align=1 (i32.const 0) (get_local 0x1cf)) + (i64.store offset=0x1d0 align=1 (i32.const 0) (get_local 0x1d0)) + (i64.store offset=0x1d1 align=1 (i32.const 0) (get_local 0x1d1)) + (i64.store offset=0x1d2 align=1 (i32.const 0) (get_local 0x1d2)) + (i64.store offset=0x1d3 align=1 (i32.const 0) (get_local 0x1d3)) + (i64.store offset=0x1d4 align=1 (i32.const 0) (get_local 0x1d4)) + (i64.store offset=0x1d5 align=1 (i32.const 0) (get_local 0x1d5)) + (i64.store offset=0x1d6 align=1 (i32.const 0) (get_local 0x1d6)) + (i64.store offset=0x1d7 align=1 (i32.const 0) (get_local 0x1d7)) + (i64.store offset=0x1d8 align=1 (i32.const 0) (get_local 0x1d8)) + (i64.store offset=0x1d9 align=1 (i32.const 0) (get_local 0x1d9)) + (i64.store offset=0x1da align=1 (i32.const 0) (get_local 0x1da)) + (i64.store offset=0x1db align=1 (i32.const 0) (get_local 0x1db)) + (i64.store offset=0x1dc align=1 (i32.const 0) (get_local 0x1dc)) + (i64.store offset=0x1dd align=1 (i32.const 0) (get_local 0x1dd)) + (i64.store offset=0x1de align=1 (i32.const 0) (get_local 0x1de)) + (i64.store offset=0x1df align=1 (i32.const 0) (get_local 0x1df)) + (i64.store offset=0x1e0 align=1 (i32.const 0) (get_local 0x1e0)) + (i64.store offset=0x1e1 align=1 (i32.const 0) (get_local 0x1e1)) + (i64.store offset=0x1e2 align=1 (i32.const 0) (get_local 0x1e2)) + (i64.store offset=0x1e3 align=1 (i32.const 0) (get_local 0x1e3)) + (i64.store offset=0x1e4 align=1 (i32.const 0) (get_local 0x1e4)) + (i64.store offset=0x1e5 align=1 (i32.const 0) (get_local 0x1e5)) + (i64.store offset=0x1e6 align=1 (i32.const 0) (get_local 0x1e6)) + (i64.store offset=0x1e7 align=1 (i32.const 0) (get_local 0x1e7)) + (i64.store offset=0x1e8 align=1 (i32.const 0) (get_local 0x1e8)) + (i64.store offset=0x1e9 align=1 (i32.const 0) (get_local 0x1e9)) + (i64.store offset=0x1ea align=1 (i32.const 0) (get_local 0x1ea)) + (i64.store offset=0x1eb align=1 (i32.const 0) (get_local 0x1eb)) + (i64.store offset=0x1ec align=1 (i32.const 0) (get_local 0x1ec)) + (i64.store offset=0x1ed align=1 (i32.const 0) (get_local 0x1ed)) + (i64.store offset=0x1ee align=1 (i32.const 0) (get_local 0x1ee)) + (i64.store offset=0x1ef align=1 (i32.const 0) (get_local 0x1ef)) + (i64.store offset=0x1f0 align=1 (i32.const 0) (get_local 0x1f0)) + (i64.store offset=0x1f1 align=1 (i32.const 0) (get_local 0x1f1)) + (i64.store offset=0x1f2 align=1 (i32.const 0) (get_local 0x1f2)) + (i64.store offset=0x1f3 align=1 (i32.const 0) (get_local 0x1f3)) + (i64.store offset=0x1f4 align=1 (i32.const 0) (get_local 0x1f4)) + (i64.store offset=0x1f5 align=1 (i32.const 0) (get_local 0x1f5)) + (i64.store offset=0x1f6 align=1 (i32.const 0) (get_local 0x1f6)) + (i64.store offset=0x1f7 align=1 (i32.const 0) (get_local 0x1f7)) + (i64.store offset=0x1f8 align=1 (i32.const 0) (get_local 0x1f8)) + (i64.store offset=0x1f9 align=1 (i32.const 0) (get_local 0x1f9)) + (i64.store offset=0x1fa align=1 (i32.const 0) (get_local 0x1fa)) + (i64.store offset=0x1fb align=1 (i32.const 0) (get_local 0x1fb)) + (i64.store offset=0x1fc align=1 (i32.const 0) (get_local 0x1fc)) + (i64.store offset=0x1fd align=1 (i32.const 0) (get_local 0x1fd)) + (i64.store offset=0x1fe align=1 (i32.const 0) (get_local 0x1fe)) + (i64.store offset=0x1ff align=1 (i32.const 0) (get_local 0x1ff)) + (i64.store offset=0x200 align=1 (i32.const 0) (get_local 0x200)) + (i64.store offset=0x201 align=1 (i32.const 0) (get_local 0x201)) + (i64.store offset=0x202 align=1 (i32.const 0) (get_local 0x202)) + (i64.store offset=0x203 align=1 (i32.const 0) (get_local 0x203)) + (i64.store offset=0x204 align=1 (i32.const 0) (get_local 0x204)) + (i64.store offset=0x205 align=1 (i32.const 0) (get_local 0x205)) + (i64.store offset=0x206 align=1 (i32.const 0) (get_local 0x206)) + (i64.store offset=0x207 align=1 (i32.const 0) (get_local 0x207)) + (i64.store offset=0x208 align=1 (i32.const 0) (get_local 0x208)) + (i64.store offset=0x209 align=1 (i32.const 0) (get_local 0x209)) + (i64.store offset=0x20a align=1 (i32.const 0) (get_local 0x20a)) + (i64.store offset=0x20b align=1 (i32.const 0) (get_local 0x20b)) + (i64.store offset=0x20c align=1 (i32.const 0) (get_local 0x20c)) + (i64.store offset=0x20d align=1 (i32.const 0) (get_local 0x20d)) + (i64.store offset=0x20e align=1 (i32.const 0) (get_local 0x20e)) + (i64.store offset=0x20f align=1 (i32.const 0) (get_local 0x20f)) + (i64.store offset=0x210 align=1 (i32.const 0) (get_local 0x210)) + (i64.store offset=0x211 align=1 (i32.const 0) (get_local 0x211)) + (i64.store offset=0x212 align=1 (i32.const 0) (get_local 0x212)) + (i64.store offset=0x213 align=1 (i32.const 0) (get_local 0x213)) + (i64.store offset=0x214 align=1 (i32.const 0) (get_local 0x214)) + (i64.store offset=0x215 align=1 (i32.const 0) (get_local 0x215)) + (i64.store offset=0x216 align=1 (i32.const 0) (get_local 0x216)) + (i64.store offset=0x217 align=1 (i32.const 0) (get_local 0x217)) + (i64.store offset=0x218 align=1 (i32.const 0) (get_local 0x218)) + (i64.store offset=0x219 align=1 (i32.const 0) (get_local 0x219)) + (i64.store offset=0x21a align=1 (i32.const 0) (get_local 0x21a)) + (i64.store offset=0x21b align=1 (i32.const 0) (get_local 0x21b)) + (i64.store offset=0x21c align=1 (i32.const 0) (get_local 0x21c)) + (i64.store offset=0x21d align=1 (i32.const 0) (get_local 0x21d)) + (i64.store offset=0x21e align=1 (i32.const 0) (get_local 0x21e)) + (i64.store offset=0x21f align=1 (i32.const 0) (get_local 0x21f)) + (i64.store offset=0x220 align=1 (i32.const 0) (get_local 0x220)) + (i64.store offset=0x221 align=1 (i32.const 0) (get_local 0x221)) + (i64.store offset=0x222 align=1 (i32.const 0) (get_local 0x222)) + (i64.store offset=0x223 align=1 (i32.const 0) (get_local 0x223)) + (i64.store offset=0x224 align=1 (i32.const 0) (get_local 0x224)) + (i64.store offset=0x225 align=1 (i32.const 0) (get_local 0x225)) + (i64.store offset=0x226 align=1 (i32.const 0) (get_local 0x226)) + (i64.store offset=0x227 align=1 (i32.const 0) (get_local 0x227)) + (i64.store offset=0x228 align=1 (i32.const 0) (get_local 0x228)) + (i64.store offset=0x229 align=1 (i32.const 0) (get_local 0x229)) + (i64.store offset=0x22a align=1 (i32.const 0) (get_local 0x22a)) + (i64.store offset=0x22b align=1 (i32.const 0) (get_local 0x22b)) + (i64.store offset=0x22c align=1 (i32.const 0) (get_local 0x22c)) + (i64.store offset=0x22d align=1 (i32.const 0) (get_local 0x22d)) + (i64.store offset=0x22e align=1 (i32.const 0) (get_local 0x22e)) + (i64.store offset=0x22f align=1 (i32.const 0) (get_local 0x22f)) + (i64.store offset=0x230 align=1 (i32.const 0) (get_local 0x230)) + (i64.store offset=0x231 align=1 (i32.const 0) (get_local 0x231)) + (i64.store offset=0x232 align=1 (i32.const 0) (get_local 0x232)) + (i64.store offset=0x233 align=1 (i32.const 0) (get_local 0x233)) + (i64.store offset=0x234 align=1 (i32.const 0) (get_local 0x234)) + (i64.store offset=0x235 align=1 (i32.const 0) (get_local 0x235)) + (i64.store offset=0x236 align=1 (i32.const 0) (get_local 0x236)) + (i64.store offset=0x237 align=1 (i32.const 0) (get_local 0x237)) + (i64.store offset=0x238 align=1 (i32.const 0) (get_local 0x238)) + (i64.store offset=0x239 align=1 (i32.const 0) (get_local 0x239)) + (i64.store offset=0x23a align=1 (i32.const 0) (get_local 0x23a)) + (i64.store offset=0x23b align=1 (i32.const 0) (get_local 0x23b)) + (i64.store offset=0x23c align=1 (i32.const 0) (get_local 0x23c)) + (i64.store offset=0x23d align=1 (i32.const 0) (get_local 0x23d)) + (i64.store offset=0x23e align=1 (i32.const 0) (get_local 0x23e)) + (i64.store offset=0x23f align=1 (i32.const 0) (get_local 0x23f)) + (i64.store offset=0x240 align=1 (i32.const 0) (get_local 0x240)) + (i64.store offset=0x241 align=1 (i32.const 0) (get_local 0x241)) + (i64.store offset=0x242 align=1 (i32.const 0) (get_local 0x242)) + (i64.store offset=0x243 align=1 (i32.const 0) (get_local 0x243)) + (i64.store offset=0x244 align=1 (i32.const 0) (get_local 0x244)) + (i64.store offset=0x245 align=1 (i32.const 0) (get_local 0x245)) + (i64.store offset=0x246 align=1 (i32.const 0) (get_local 0x246)) + (i64.store offset=0x247 align=1 (i32.const 0) (get_local 0x247)) + (i64.store offset=0x248 align=1 (i32.const 0) (get_local 0x248)) + (i64.store offset=0x249 align=1 (i32.const 0) (get_local 0x249)) + (i64.store offset=0x24a align=1 (i32.const 0) (get_local 0x24a)) + (i64.store offset=0x24b align=1 (i32.const 0) (get_local 0x24b)) + (i64.store offset=0x24c align=1 (i32.const 0) (get_local 0x24c)) + (i64.store offset=0x24d align=1 (i32.const 0) (get_local 0x24d)) + (i64.store offset=0x24e align=1 (i32.const 0) (get_local 0x24e)) + (i64.store offset=0x24f align=1 (i32.const 0) (get_local 0x24f)) + (i64.store offset=0x250 align=1 (i32.const 0) (get_local 0x250)) + (i64.store offset=0x251 align=1 (i32.const 0) (get_local 0x251)) + (i64.store offset=0x252 align=1 (i32.const 0) (get_local 0x252)) + (i64.store offset=0x253 align=1 (i32.const 0) (get_local 0x253)) + (i64.store offset=0x254 align=1 (i32.const 0) (get_local 0x254)) + (i64.store offset=0x255 align=1 (i32.const 0) (get_local 0x255)) + (i64.store offset=0x256 align=1 (i32.const 0) (get_local 0x256)) + (i64.store offset=0x257 align=1 (i32.const 0) (get_local 0x257)) + (i64.store offset=0x258 align=1 (i32.const 0) (get_local 0x258)) + (i64.store offset=0x259 align=1 (i32.const 0) (get_local 0x259)) + (i64.store offset=0x25a align=1 (i32.const 0) (get_local 0x25a)) + (i64.store offset=0x25b align=1 (i32.const 0) (get_local 0x25b)) + (i64.store offset=0x25c align=1 (i32.const 0) (get_local 0x25c)) + (i64.store offset=0x25d align=1 (i32.const 0) (get_local 0x25d)) + (i64.store offset=0x25e align=1 (i32.const 0) (get_local 0x25e)) + (i64.store offset=0x25f align=1 (i32.const 0) (get_local 0x25f)) + (i64.store offset=0x260 align=1 (i32.const 0) (get_local 0x260)) + (i64.store offset=0x261 align=1 (i32.const 0) (get_local 0x261)) + (i64.store offset=0x262 align=1 (i32.const 0) (get_local 0x262)) + (i64.store offset=0x263 align=1 (i32.const 0) (get_local 0x263)) + (i64.store offset=0x264 align=1 (i32.const 0) (get_local 0x264)) + (i64.store offset=0x265 align=1 (i32.const 0) (get_local 0x265)) + (i64.store offset=0x266 align=1 (i32.const 0) (get_local 0x266)) + (i64.store offset=0x267 align=1 (i32.const 0) (get_local 0x267)) + (i64.store offset=0x268 align=1 (i32.const 0) (get_local 0x268)) + (i64.store offset=0x269 align=1 (i32.const 0) (get_local 0x269)) + (i64.store offset=0x26a align=1 (i32.const 0) (get_local 0x26a)) + (i64.store offset=0x26b align=1 (i32.const 0) (get_local 0x26b)) + (i64.store offset=0x26c align=1 (i32.const 0) (get_local 0x26c)) + (i64.store offset=0x26d align=1 (i32.const 0) (get_local 0x26d)) + (i64.store offset=0x26e align=1 (i32.const 0) (get_local 0x26e)) + (i64.store offset=0x26f align=1 (i32.const 0) (get_local 0x26f)) + (i64.store offset=0x270 align=1 (i32.const 0) (get_local 0x270)) + (i64.store offset=0x271 align=1 (i32.const 0) (get_local 0x271)) + (i64.store offset=0x272 align=1 (i32.const 0) (get_local 0x272)) + (i64.store offset=0x273 align=1 (i32.const 0) (get_local 0x273)) + (i64.store offset=0x274 align=1 (i32.const 0) (get_local 0x274)) + (i64.store offset=0x275 align=1 (i32.const 0) (get_local 0x275)) + (i64.store offset=0x276 align=1 (i32.const 0) (get_local 0x276)) + (i64.store offset=0x277 align=1 (i32.const 0) (get_local 0x277)) + (i64.store offset=0x278 align=1 (i32.const 0) (get_local 0x278)) + (i64.store offset=0x279 align=1 (i32.const 0) (get_local 0x279)) + (i64.store offset=0x27a align=1 (i32.const 0) (get_local 0x27a)) + (i64.store offset=0x27b align=1 (i32.const 0) (get_local 0x27b)) + (i64.store offset=0x27c align=1 (i32.const 0) (get_local 0x27c)) + (i64.store offset=0x27d align=1 (i32.const 0) (get_local 0x27d)) + (i64.store offset=0x27e align=1 (i32.const 0) (get_local 0x27e)) + (i64.store offset=0x27f align=1 (i32.const 0) (get_local 0x27f)) + (i64.store offset=0x280 align=1 (i32.const 0) (get_local 0x280)) + (i64.store offset=0x281 align=1 (i32.const 0) (get_local 0x281)) + (i64.store offset=0x282 align=1 (i32.const 0) (get_local 0x282)) + (i64.store offset=0x283 align=1 (i32.const 0) (get_local 0x283)) + (i64.store offset=0x284 align=1 (i32.const 0) (get_local 0x284)) + (i64.store offset=0x285 align=1 (i32.const 0) (get_local 0x285)) + (i64.store offset=0x286 align=1 (i32.const 0) (get_local 0x286)) + (i64.store offset=0x287 align=1 (i32.const 0) (get_local 0x287)) + (i64.store offset=0x288 align=1 (i32.const 0) (get_local 0x288)) + (i64.store offset=0x289 align=1 (i32.const 0) (get_local 0x289)) + (i64.store offset=0x28a align=1 (i32.const 0) (get_local 0x28a)) + (i64.store offset=0x28b align=1 (i32.const 0) (get_local 0x28b)) + (i64.store offset=0x28c align=1 (i32.const 0) (get_local 0x28c)) + (i64.store offset=0x28d align=1 (i32.const 0) (get_local 0x28d)) + (i64.store offset=0x28e align=1 (i32.const 0) (get_local 0x28e)) + (i64.store offset=0x28f align=1 (i32.const 0) (get_local 0x28f)) + (i64.store offset=0x290 align=1 (i32.const 0) (get_local 0x290)) + (i64.store offset=0x291 align=1 (i32.const 0) (get_local 0x291)) + (i64.store offset=0x292 align=1 (i32.const 0) (get_local 0x292)) + (i64.store offset=0x293 align=1 (i32.const 0) (get_local 0x293)) + (i64.store offset=0x294 align=1 (i32.const 0) (get_local 0x294)) + (i64.store offset=0x295 align=1 (i32.const 0) (get_local 0x295)) + (i64.store offset=0x296 align=1 (i32.const 0) (get_local 0x296)) + (i64.store offset=0x297 align=1 (i32.const 0) (get_local 0x297)) + (i64.store offset=0x298 align=1 (i32.const 0) (get_local 0x298)) + (i64.store offset=0x299 align=1 (i32.const 0) (get_local 0x299)) + (i64.store offset=0x29a align=1 (i32.const 0) (get_local 0x29a)) + (i64.store offset=0x29b align=1 (i32.const 0) (get_local 0x29b)) + (i64.store offset=0x29c align=1 (i32.const 0) (get_local 0x29c)) + (i64.store offset=0x29d align=1 (i32.const 0) (get_local 0x29d)) + (i64.store offset=0x29e align=1 (i32.const 0) (get_local 0x29e)) + (i64.store offset=0x29f align=1 (i32.const 0) (get_local 0x29f)) + (i64.store offset=0x2a0 align=1 (i32.const 0) (get_local 0x2a0)) + (i64.store offset=0x2a1 align=1 (i32.const 0) (get_local 0x2a1)) + (i64.store offset=0x2a2 align=1 (i32.const 0) (get_local 0x2a2)) + (i64.store offset=0x2a3 align=1 (i32.const 0) (get_local 0x2a3)) + (i64.store offset=0x2a4 align=1 (i32.const 0) (get_local 0x2a4)) + (i64.store offset=0x2a5 align=1 (i32.const 0) (get_local 0x2a5)) + (i64.store offset=0x2a6 align=1 (i32.const 0) (get_local 0x2a6)) + (i64.store offset=0x2a7 align=1 (i32.const 0) (get_local 0x2a7)) + (i64.store offset=0x2a8 align=1 (i32.const 0) (get_local 0x2a8)) + (i64.store offset=0x2a9 align=1 (i32.const 0) (get_local 0x2a9)) + (i64.store offset=0x2aa align=1 (i32.const 0) (get_local 0x2aa)) + (i64.store offset=0x2ab align=1 (i32.const 0) (get_local 0x2ab)) + (i64.store offset=0x2ac align=1 (i32.const 0) (get_local 0x2ac)) + (i64.store offset=0x2ad align=1 (i32.const 0) (get_local 0x2ad)) + (i64.store offset=0x2ae align=1 (i32.const 0) (get_local 0x2ae)) + (i64.store offset=0x2af align=1 (i32.const 0) (get_local 0x2af)) + (i64.store offset=0x2b0 align=1 (i32.const 0) (get_local 0x2b0)) + (i64.store offset=0x2b1 align=1 (i32.const 0) (get_local 0x2b1)) + (i64.store offset=0x2b2 align=1 (i32.const 0) (get_local 0x2b2)) + (i64.store offset=0x2b3 align=1 (i32.const 0) (get_local 0x2b3)) + (i64.store offset=0x2b4 align=1 (i32.const 0) (get_local 0x2b4)) + (i64.store offset=0x2b5 align=1 (i32.const 0) (get_local 0x2b5)) + (i64.store offset=0x2b6 align=1 (i32.const 0) (get_local 0x2b6)) + (i64.store offset=0x2b7 align=1 (i32.const 0) (get_local 0x2b7)) + (i64.store offset=0x2b8 align=1 (i32.const 0) (get_local 0x2b8)) + (i64.store offset=0x2b9 align=1 (i32.const 0) (get_local 0x2b9)) + (i64.store offset=0x2ba align=1 (i32.const 0) (get_local 0x2ba)) + (i64.store offset=0x2bb align=1 (i32.const 0) (get_local 0x2bb)) + (i64.store offset=0x2bc align=1 (i32.const 0) (get_local 0x2bc)) + (i64.store offset=0x2bd align=1 (i32.const 0) (get_local 0x2bd)) + (i64.store offset=0x2be align=1 (i32.const 0) (get_local 0x2be)) + (i64.store offset=0x2bf align=1 (i32.const 0) (get_local 0x2bf)) + (i64.store offset=0x2c0 align=1 (i32.const 0) (get_local 0x2c0)) + (i64.store offset=0x2c1 align=1 (i32.const 0) (get_local 0x2c1)) + (i64.store offset=0x2c2 align=1 (i32.const 0) (get_local 0x2c2)) + (i64.store offset=0x2c3 align=1 (i32.const 0) (get_local 0x2c3)) + (i64.store offset=0x2c4 align=1 (i32.const 0) (get_local 0x2c4)) + (i64.store offset=0x2c5 align=1 (i32.const 0) (get_local 0x2c5)) + (i64.store offset=0x2c6 align=1 (i32.const 0) (get_local 0x2c6)) + (i64.store offset=0x2c7 align=1 (i32.const 0) (get_local 0x2c7)) + (i64.store offset=0x2c8 align=1 (i32.const 0) (get_local 0x2c8)) + (i64.store offset=0x2c9 align=1 (i32.const 0) (get_local 0x2c9)) + (i64.store offset=0x2ca align=1 (i32.const 0) (get_local 0x2ca)) + (i64.store offset=0x2cb align=1 (i32.const 0) (get_local 0x2cb)) + (i64.store offset=0x2cc align=1 (i32.const 0) (get_local 0x2cc)) + (i64.store offset=0x2cd align=1 (i32.const 0) (get_local 0x2cd)) + (i64.store offset=0x2ce align=1 (i32.const 0) (get_local 0x2ce)) + (i64.store offset=0x2cf align=1 (i32.const 0) (get_local 0x2cf)) + (i64.store offset=0x2d0 align=1 (i32.const 0) (get_local 0x2d0)) + (i64.store offset=0x2d1 align=1 (i32.const 0) (get_local 0x2d1)) + (i64.store offset=0x2d2 align=1 (i32.const 0) (get_local 0x2d2)) + (i64.store offset=0x2d3 align=1 (i32.const 0) (get_local 0x2d3)) + (i64.store offset=0x2d4 align=1 (i32.const 0) (get_local 0x2d4)) + (i64.store offset=0x2d5 align=1 (i32.const 0) (get_local 0x2d5)) + (i64.store offset=0x2d6 align=1 (i32.const 0) (get_local 0x2d6)) + (i64.store offset=0x2d7 align=1 (i32.const 0) (get_local 0x2d7)) + (i64.store offset=0x2d8 align=1 (i32.const 0) (get_local 0x2d8)) + (i64.store offset=0x2d9 align=1 (i32.const 0) (get_local 0x2d9)) + (i64.store offset=0x2da align=1 (i32.const 0) (get_local 0x2da)) + (i64.store offset=0x2db align=1 (i32.const 0) (get_local 0x2db)) + (i64.store offset=0x2dc align=1 (i32.const 0) (get_local 0x2dc)) + (i64.store offset=0x2dd align=1 (i32.const 0) (get_local 0x2dd)) + (i64.store offset=0x2de align=1 (i32.const 0) (get_local 0x2de)) + (i64.store offset=0x2df align=1 (i32.const 0) (get_local 0x2df)) + (i64.store offset=0x2e0 align=1 (i32.const 0) (get_local 0x2e0)) + (i64.store offset=0x2e1 align=1 (i32.const 0) (get_local 0x2e1)) + (i64.store offset=0x2e2 align=1 (i32.const 0) (get_local 0x2e2)) + (i64.store offset=0x2e3 align=1 (i32.const 0) (get_local 0x2e3)) + (i64.store offset=0x2e4 align=1 (i32.const 0) (get_local 0x2e4)) + (i64.store offset=0x2e5 align=1 (i32.const 0) (get_local 0x2e5)) + (i64.store offset=0x2e6 align=1 (i32.const 0) (get_local 0x2e6)) + (i64.store offset=0x2e7 align=1 (i32.const 0) (get_local 0x2e7)) + (i64.store offset=0x2e8 align=1 (i32.const 0) (get_local 0x2e8)) + (i64.store offset=0x2e9 align=1 (i32.const 0) (get_local 0x2e9)) + (i64.store offset=0x2ea align=1 (i32.const 0) (get_local 0x2ea)) + (i64.store offset=0x2eb align=1 (i32.const 0) (get_local 0x2eb)) + (i64.store offset=0x2ec align=1 (i32.const 0) (get_local 0x2ec)) + (i64.store offset=0x2ed align=1 (i32.const 0) (get_local 0x2ed)) + (i64.store offset=0x2ee align=1 (i32.const 0) (get_local 0x2ee)) + (i64.store offset=0x2ef align=1 (i32.const 0) (get_local 0x2ef)) + (i64.store offset=0x2f0 align=1 (i32.const 0) (get_local 0x2f0)) + (i64.store offset=0x2f1 align=1 (i32.const 0) (get_local 0x2f1)) + (i64.store offset=0x2f2 align=1 (i32.const 0) (get_local 0x2f2)) + (i64.store offset=0x2f3 align=1 (i32.const 0) (get_local 0x2f3)) + (i64.store offset=0x2f4 align=1 (i32.const 0) (get_local 0x2f4)) + (i64.store offset=0x2f5 align=1 (i32.const 0) (get_local 0x2f5)) + (i64.store offset=0x2f6 align=1 (i32.const 0) (get_local 0x2f6)) + (i64.store offset=0x2f7 align=1 (i32.const 0) (get_local 0x2f7)) + (i64.store offset=0x2f8 align=1 (i32.const 0) (get_local 0x2f8)) + (i64.store offset=0x2f9 align=1 (i32.const 0) (get_local 0x2f9)) + (i64.store offset=0x2fa align=1 (i32.const 0) (get_local 0x2fa)) + (i64.store offset=0x2fb align=1 (i32.const 0) (get_local 0x2fb)) + (i64.store offset=0x2fc align=1 (i32.const 0) (get_local 0x2fc)) + (i64.store offset=0x2fd align=1 (i32.const 0) (get_local 0x2fd)) + (i64.store offset=0x2fe align=1 (i32.const 0) (get_local 0x2fe)) + (i64.store offset=0x2ff align=1 (i32.const 0) (get_local 0x2ff)) + (i64.store offset=0x300 align=1 (i32.const 0) (get_local 0x300)) + (i64.store offset=0x301 align=1 (i32.const 0) (get_local 0x301)) + (i64.store offset=0x302 align=1 (i32.const 0) (get_local 0x302)) + (i64.store offset=0x303 align=1 (i32.const 0) (get_local 0x303)) + (i64.store offset=0x304 align=1 (i32.const 0) (get_local 0x304)) + (i64.store offset=0x305 align=1 (i32.const 0) (get_local 0x305)) + (i64.store offset=0x306 align=1 (i32.const 0) (get_local 0x306)) + (i64.store offset=0x307 align=1 (i32.const 0) (get_local 0x307)) + (i64.store offset=0x308 align=1 (i32.const 0) (get_local 0x308)) + (i64.store offset=0x309 align=1 (i32.const 0) (get_local 0x309)) + (i64.store offset=0x30a align=1 (i32.const 0) (get_local 0x30a)) + (i64.store offset=0x30b align=1 (i32.const 0) (get_local 0x30b)) + (i64.store offset=0x30c align=1 (i32.const 0) (get_local 0x30c)) + (i64.store offset=0x30d align=1 (i32.const 0) (get_local 0x30d)) + (i64.store offset=0x30e align=1 (i32.const 0) (get_local 0x30e)) + (i64.store offset=0x30f align=1 (i32.const 0) (get_local 0x30f)) + (i64.store offset=0x310 align=1 (i32.const 0) (get_local 0x310)) + (i64.store offset=0x311 align=1 (i32.const 0) (get_local 0x311)) + (i64.store offset=0x312 align=1 (i32.const 0) (get_local 0x312)) + (i64.store offset=0x313 align=1 (i32.const 0) (get_local 0x313)) + (i64.store offset=0x314 align=1 (i32.const 0) (get_local 0x314)) + (i64.store offset=0x315 align=1 (i32.const 0) (get_local 0x315)) + (i64.store offset=0x316 align=1 (i32.const 0) (get_local 0x316)) + (i64.store offset=0x317 align=1 (i32.const 0) (get_local 0x317)) + (i64.store offset=0x318 align=1 (i32.const 0) (get_local 0x318)) + (i64.store offset=0x319 align=1 (i32.const 0) (get_local 0x319)) + (i64.store offset=0x31a align=1 (i32.const 0) (get_local 0x31a)) + (i64.store offset=0x31b align=1 (i32.const 0) (get_local 0x31b)) + (i64.store offset=0x31c align=1 (i32.const 0) (get_local 0x31c)) + (i64.store offset=0x31d align=1 (i32.const 0) (get_local 0x31d)) + (i64.store offset=0x31e align=1 (i32.const 0) (get_local 0x31e)) + (i64.store offset=0x31f align=1 (i32.const 0) (get_local 0x31f)) + (i64.store offset=0x320 align=1 (i32.const 0) (get_local 0x320)) + (i64.store offset=0x321 align=1 (i32.const 0) (get_local 0x321)) + (i64.store offset=0x322 align=1 (i32.const 0) (get_local 0x322)) + (i64.store offset=0x323 align=1 (i32.const 0) (get_local 0x323)) + (i64.store offset=0x324 align=1 (i32.const 0) (get_local 0x324)) + (i64.store offset=0x325 align=1 (i32.const 0) (get_local 0x325)) + (i64.store offset=0x326 align=1 (i32.const 0) (get_local 0x326)) + (i64.store offset=0x327 align=1 (i32.const 0) (get_local 0x327)) + (i64.store offset=0x328 align=1 (i32.const 0) (get_local 0x328)) + (i64.store offset=0x329 align=1 (i32.const 0) (get_local 0x329)) + (i64.store offset=0x32a align=1 (i32.const 0) (get_local 0x32a)) + (i64.store offset=0x32b align=1 (i32.const 0) (get_local 0x32b)) + (i64.store offset=0x32c align=1 (i32.const 0) (get_local 0x32c)) + (i64.store offset=0x32d align=1 (i32.const 0) (get_local 0x32d)) + (i64.store offset=0x32e align=1 (i32.const 0) (get_local 0x32e)) + (i64.store offset=0x32f align=1 (i32.const 0) (get_local 0x32f)) + (i64.store offset=0x330 align=1 (i32.const 0) (get_local 0x330)) + (i64.store offset=0x331 align=1 (i32.const 0) (get_local 0x331)) + (i64.store offset=0x332 align=1 (i32.const 0) (get_local 0x332)) + (i64.store offset=0x333 align=1 (i32.const 0) (get_local 0x333)) + (i64.store offset=0x334 align=1 (i32.const 0) (get_local 0x334)) + (i64.store offset=0x335 align=1 (i32.const 0) (get_local 0x335)) + (i64.store offset=0x336 align=1 (i32.const 0) (get_local 0x336)) + (i64.store offset=0x337 align=1 (i32.const 0) (get_local 0x337)) + (i64.store offset=0x338 align=1 (i32.const 0) (get_local 0x338)) + (i64.store offset=0x339 align=1 (i32.const 0) (get_local 0x339)) + (i64.store offset=0x33a align=1 (i32.const 0) (get_local 0x33a)) + (i64.store offset=0x33b align=1 (i32.const 0) (get_local 0x33b)) + (i64.store offset=0x33c align=1 (i32.const 0) (get_local 0x33c)) + (i64.store offset=0x33d align=1 (i32.const 0) (get_local 0x33d)) + (i64.store offset=0x33e align=1 (i32.const 0) (get_local 0x33e)) + (i64.store offset=0x33f align=1 (i32.const 0) (get_local 0x33f)) + (i64.store offset=0x340 align=1 (i32.const 0) (get_local 0x340)) + (i64.store offset=0x341 align=1 (i32.const 0) (get_local 0x341)) + (i64.store offset=0x342 align=1 (i32.const 0) (get_local 0x342)) + (i64.store offset=0x343 align=1 (i32.const 0) (get_local 0x343)) + (i64.store offset=0x344 align=1 (i32.const 0) (get_local 0x344)) + (i64.store offset=0x345 align=1 (i32.const 0) (get_local 0x345)) + (i64.store offset=0x346 align=1 (i32.const 0) (get_local 0x346)) + (i64.store offset=0x347 align=1 (i32.const 0) (get_local 0x347)) + (i64.store offset=0x348 align=1 (i32.const 0) (get_local 0x348)) + (i64.store offset=0x349 align=1 (i32.const 0) (get_local 0x349)) + (i64.store offset=0x34a align=1 (i32.const 0) (get_local 0x34a)) + (i64.store offset=0x34b align=1 (i32.const 0) (get_local 0x34b)) + (i64.store offset=0x34c align=1 (i32.const 0) (get_local 0x34c)) + (i64.store offset=0x34d align=1 (i32.const 0) (get_local 0x34d)) + (i64.store offset=0x34e align=1 (i32.const 0) (get_local 0x34e)) + (i64.store offset=0x34f align=1 (i32.const 0) (get_local 0x34f)) + (i64.store offset=0x350 align=1 (i32.const 0) (get_local 0x350)) + (i64.store offset=0x351 align=1 (i32.const 0) (get_local 0x351)) + (i64.store offset=0x352 align=1 (i32.const 0) (get_local 0x352)) + (i64.store offset=0x353 align=1 (i32.const 0) (get_local 0x353)) + (i64.store offset=0x354 align=1 (i32.const 0) (get_local 0x354)) + (i64.store offset=0x355 align=1 (i32.const 0) (get_local 0x355)) + (i64.store offset=0x356 align=1 (i32.const 0) (get_local 0x356)) + (i64.store offset=0x357 align=1 (i32.const 0) (get_local 0x357)) + (i64.store offset=0x358 align=1 (i32.const 0) (get_local 0x358)) + (i64.store offset=0x359 align=1 (i32.const 0) (get_local 0x359)) + (i64.store offset=0x35a align=1 (i32.const 0) (get_local 0x35a)) + (i64.store offset=0x35b align=1 (i32.const 0) (get_local 0x35b)) + (i64.store offset=0x35c align=1 (i32.const 0) (get_local 0x35c)) + (i64.store offset=0x35d align=1 (i32.const 0) (get_local 0x35d)) + (i64.store offset=0x35e align=1 (i32.const 0) (get_local 0x35e)) + (i64.store offset=0x35f align=1 (i32.const 0) (get_local 0x35f)) + (i64.store offset=0x360 align=1 (i32.const 0) (get_local 0x360)) + (i64.store offset=0x361 align=1 (i32.const 0) (get_local 0x361)) + (i64.store offset=0x362 align=1 (i32.const 0) (get_local 0x362)) + (i64.store offset=0x363 align=1 (i32.const 0) (get_local 0x363)) + (i64.store offset=0x364 align=1 (i32.const 0) (get_local 0x364)) + (i64.store offset=0x365 align=1 (i32.const 0) (get_local 0x365)) + (i64.store offset=0x366 align=1 (i32.const 0) (get_local 0x366)) + (i64.store offset=0x367 align=1 (i32.const 0) (get_local 0x367)) + (i64.store offset=0x368 align=1 (i32.const 0) (get_local 0x368)) + (i64.store offset=0x369 align=1 (i32.const 0) (get_local 0x369)) + (i64.store offset=0x36a align=1 (i32.const 0) (get_local 0x36a)) + (i64.store offset=0x36b align=1 (i32.const 0) (get_local 0x36b)) + (i64.store offset=0x36c align=1 (i32.const 0) (get_local 0x36c)) + (i64.store offset=0x36d align=1 (i32.const 0) (get_local 0x36d)) + (i64.store offset=0x36e align=1 (i32.const 0) (get_local 0x36e)) + (i64.store offset=0x36f align=1 (i32.const 0) (get_local 0x36f)) + (i64.store offset=0x370 align=1 (i32.const 0) (get_local 0x370)) + (i64.store offset=0x371 align=1 (i32.const 0) (get_local 0x371)) + (i64.store offset=0x372 align=1 (i32.const 0) (get_local 0x372)) + (i64.store offset=0x373 align=1 (i32.const 0) (get_local 0x373)) + (i64.store offset=0x374 align=1 (i32.const 0) (get_local 0x374)) + (i64.store offset=0x375 align=1 (i32.const 0) (get_local 0x375)) + (i64.store offset=0x376 align=1 (i32.const 0) (get_local 0x376)) + (i64.store offset=0x377 align=1 (i32.const 0) (get_local 0x377)) + (i64.store offset=0x378 align=1 (i32.const 0) (get_local 0x378)) + (i64.store offset=0x379 align=1 (i32.const 0) (get_local 0x379)) + (i64.store offset=0x37a align=1 (i32.const 0) (get_local 0x37a)) + (i64.store offset=0x37b align=1 (i32.const 0) (get_local 0x37b)) + (i64.store offset=0x37c align=1 (i32.const 0) (get_local 0x37c)) + (i64.store offset=0x37d align=1 (i32.const 0) (get_local 0x37d)) + (i64.store offset=0x37e align=1 (i32.const 0) (get_local 0x37e)) + (i64.store offset=0x37f align=1 (i32.const 0) (get_local 0x37f)) + (i64.store offset=0x380 align=1 (i32.const 0) (get_local 0x380)) + (i64.store offset=0x381 align=1 (i32.const 0) (get_local 0x381)) + (i64.store offset=0x382 align=1 (i32.const 0) (get_local 0x382)) + (i64.store offset=0x383 align=1 (i32.const 0) (get_local 0x383)) + (i64.store offset=0x384 align=1 (i32.const 0) (get_local 0x384)) + (i64.store offset=0x385 align=1 (i32.const 0) (get_local 0x385)) + (i64.store offset=0x386 align=1 (i32.const 0) (get_local 0x386)) + (i64.store offset=0x387 align=1 (i32.const 0) (get_local 0x387)) + (i64.store offset=0x388 align=1 (i32.const 0) (get_local 0x388)) + (i64.store offset=0x389 align=1 (i32.const 0) (get_local 0x389)) + (i64.store offset=0x38a align=1 (i32.const 0) (get_local 0x38a)) + (i64.store offset=0x38b align=1 (i32.const 0) (get_local 0x38b)) + (i64.store offset=0x38c align=1 (i32.const 0) (get_local 0x38c)) + (i64.store offset=0x38d align=1 (i32.const 0) (get_local 0x38d)) + (i64.store offset=0x38e align=1 (i32.const 0) (get_local 0x38e)) + (i64.store offset=0x38f align=1 (i32.const 0) (get_local 0x38f)) + (i64.store offset=0x390 align=1 (i32.const 0) (get_local 0x390)) + (i64.store offset=0x391 align=1 (i32.const 0) (get_local 0x391)) + (i64.store offset=0x392 align=1 (i32.const 0) (get_local 0x392)) + (i64.store offset=0x393 align=1 (i32.const 0) (get_local 0x393)) + (i64.store offset=0x394 align=1 (i32.const 0) (get_local 0x394)) + (i64.store offset=0x395 align=1 (i32.const 0) (get_local 0x395)) + (i64.store offset=0x396 align=1 (i32.const 0) (get_local 0x396)) + (i64.store offset=0x397 align=1 (i32.const 0) (get_local 0x397)) + (i64.store offset=0x398 align=1 (i32.const 0) (get_local 0x398)) + (i64.store offset=0x399 align=1 (i32.const 0) (get_local 0x399)) + (i64.store offset=0x39a align=1 (i32.const 0) (get_local 0x39a)) + (i64.store offset=0x39b align=1 (i32.const 0) (get_local 0x39b)) + (i64.store offset=0x39c align=1 (i32.const 0) (get_local 0x39c)) + (i64.store offset=0x39d align=1 (i32.const 0) (get_local 0x39d)) + (i64.store offset=0x39e align=1 (i32.const 0) (get_local 0x39e)) + (i64.store offset=0x39f align=1 (i32.const 0) (get_local 0x39f)) + (i64.store offset=0x3a0 align=1 (i32.const 0) (get_local 0x3a0)) + (i64.store offset=0x3a1 align=1 (i32.const 0) (get_local 0x3a1)) + (i64.store offset=0x3a2 align=1 (i32.const 0) (get_local 0x3a2)) + (i64.store offset=0x3a3 align=1 (i32.const 0) (get_local 0x3a3)) + (i64.store offset=0x3a4 align=1 (i32.const 0) (get_local 0x3a4)) + (i64.store offset=0x3a5 align=1 (i32.const 0) (get_local 0x3a5)) + (i64.store offset=0x3a6 align=1 (i32.const 0) (get_local 0x3a6)) + (i64.store offset=0x3a7 align=1 (i32.const 0) (get_local 0x3a7)) + (i64.store offset=0x3a8 align=1 (i32.const 0) (get_local 0x3a8)) + (i64.store offset=0x3a9 align=1 (i32.const 0) (get_local 0x3a9)) + (i64.store offset=0x3aa align=1 (i32.const 0) (get_local 0x3aa)) + (i64.store offset=0x3ab align=1 (i32.const 0) (get_local 0x3ab)) + (i64.store offset=0x3ac align=1 (i32.const 0) (get_local 0x3ac)) + (i64.store offset=0x3ad align=1 (i32.const 0) (get_local 0x3ad)) + (i64.store offset=0x3ae align=1 (i32.const 0) (get_local 0x3ae)) + (i64.store offset=0x3af align=1 (i32.const 0) (get_local 0x3af)) + (i64.store offset=0x3b0 align=1 (i32.const 0) (get_local 0x3b0)) + (i64.store offset=0x3b1 align=1 (i32.const 0) (get_local 0x3b1)) + (i64.store offset=0x3b2 align=1 (i32.const 0) (get_local 0x3b2)) + (i64.store offset=0x3b3 align=1 (i32.const 0) (get_local 0x3b3)) + (i64.store offset=0x3b4 align=1 (i32.const 0) (get_local 0x3b4)) + (i64.store offset=0x3b5 align=1 (i32.const 0) (get_local 0x3b5)) + (i64.store offset=0x3b6 align=1 (i32.const 0) (get_local 0x3b6)) + (i64.store offset=0x3b7 align=1 (i32.const 0) (get_local 0x3b7)) + (i64.store offset=0x3b8 align=1 (i32.const 0) (get_local 0x3b8)) + (i64.store offset=0x3b9 align=1 (i32.const 0) (get_local 0x3b9)) + (i64.store offset=0x3ba align=1 (i32.const 0) (get_local 0x3ba)) + (i64.store offset=0x3bb align=1 (i32.const 0) (get_local 0x3bb)) + (i64.store offset=0x3bc align=1 (i32.const 0) (get_local 0x3bc)) + (i64.store offset=0x3bd align=1 (i32.const 0) (get_local 0x3bd)) + (i64.store offset=0x3be align=1 (i32.const 0) (get_local 0x3be)) + (i64.store offset=0x3bf align=1 (i32.const 0) (get_local 0x3bf)) + (i64.store offset=0x3c0 align=1 (i32.const 0) (get_local 0x3c0)) + (i64.store offset=0x3c1 align=1 (i32.const 0) (get_local 0x3c1)) + (i64.store offset=0x3c2 align=1 (i32.const 0) (get_local 0x3c2)) + (i64.store offset=0x3c3 align=1 (i32.const 0) (get_local 0x3c3)) + (i64.store offset=0x3c4 align=1 (i32.const 0) (get_local 0x3c4)) + (i64.store offset=0x3c5 align=1 (i32.const 0) (get_local 0x3c5)) + (i64.store offset=0x3c6 align=1 (i32.const 0) (get_local 0x3c6)) + (i64.store offset=0x3c7 align=1 (i32.const 0) (get_local 0x3c7)) + (i64.store offset=0x3c8 align=1 (i32.const 0) (get_local 0x3c8)) + (i64.store offset=0x3c9 align=1 (i32.const 0) (get_local 0x3c9)) + (i64.store offset=0x3ca align=1 (i32.const 0) (get_local 0x3ca)) + (i64.store offset=0x3cb align=1 (i32.const 0) (get_local 0x3cb)) + (i64.store offset=0x3cc align=1 (i32.const 0) (get_local 0x3cc)) + (i64.store offset=0x3cd align=1 (i32.const 0) (get_local 0x3cd)) + (i64.store offset=0x3ce align=1 (i32.const 0) (get_local 0x3ce)) + (i64.store offset=0x3cf align=1 (i32.const 0) (get_local 0x3cf)) + (i64.store offset=0x3d0 align=1 (i32.const 0) (get_local 0x3d0)) + (i64.store offset=0x3d1 align=1 (i32.const 0) (get_local 0x3d1)) + (i64.store offset=0x3d2 align=1 (i32.const 0) (get_local 0x3d2)) + (i64.store offset=0x3d3 align=1 (i32.const 0) (get_local 0x3d3)) + (i64.store offset=0x3d4 align=1 (i32.const 0) (get_local 0x3d4)) + (i64.store offset=0x3d5 align=1 (i32.const 0) (get_local 0x3d5)) + (i64.store offset=0x3d6 align=1 (i32.const 0) (get_local 0x3d6)) + (i64.store offset=0x3d7 align=1 (i32.const 0) (get_local 0x3d7)) + (i64.store offset=0x3d8 align=1 (i32.const 0) (get_local 0x3d8)) + (i64.store offset=0x3d9 align=1 (i32.const 0) (get_local 0x3d9)) + (i64.store offset=0x3da align=1 (i32.const 0) (get_local 0x3da)) + (i64.store offset=0x3db align=1 (i32.const 0) (get_local 0x3db)) + (i64.store offset=0x3dc align=1 (i32.const 0) (get_local 0x3dc)) + (i64.store offset=0x3dd align=1 (i32.const 0) (get_local 0x3dd)) + (i64.store offset=0x3de align=1 (i32.const 0) (get_local 0x3de)) + (i64.store offset=0x3df align=1 (i32.const 0) (get_local 0x3df)) + (i64.store offset=0x3e0 align=1 (i32.const 0) (get_local 0x3e0)) + (i64.store offset=0x3e1 align=1 (i32.const 0) (get_local 0x3e1)) + (i64.store offset=0x3e2 align=1 (i32.const 0) (get_local 0x3e2)) + (i64.store offset=0x3e3 align=1 (i32.const 0) (get_local 0x3e3)) + (i64.store offset=0x3e4 align=1 (i32.const 0) (get_local 0x3e4)) + (i64.store offset=0x3e5 align=1 (i32.const 0) (get_local 0x3e5)) + (i64.store offset=0x3e6 align=1 (i32.const 0) (get_local 0x3e6)) + (i64.store offset=0x3e7 align=1 (i32.const 0) (get_local 0x3e7)) + (i64.store offset=0x3e8 align=1 (i32.const 0) (get_local 0x3e8)) + (i64.store offset=0x3e9 align=1 (i32.const 0) (get_local 0x3e9)) + (i64.store offset=0x3ea align=1 (i32.const 0) (get_local 0x3ea)) + (i64.store offset=0x3eb align=1 (i32.const 0) (get_local 0x3eb)) + (i64.store offset=0x3ec align=1 (i32.const 0) (get_local 0x3ec)) + (i64.store offset=0x3ed align=1 (i32.const 0) (get_local 0x3ed)) + (i64.store offset=0x3ee align=1 (i32.const 0) (get_local 0x3ee)) + (i64.store offset=0x3ef align=1 (i32.const 0) (get_local 0x3ef)) + (i64.store offset=0x3f0 align=1 (i32.const 0) (get_local 0x3f0)) + (i64.store offset=0x3f1 align=1 (i32.const 0) (get_local 0x3f1)) + (i64.store offset=0x3f2 align=1 (i32.const 0) (get_local 0x3f2)) + (i64.store offset=0x3f3 align=1 (i32.const 0) (get_local 0x3f3)) + (i64.store offset=0x3f4 align=1 (i32.const 0) (get_local 0x3f4)) + (i64.store offset=0x3f5 align=1 (i32.const 0) (get_local 0x3f5)) + (i64.store offset=0x3f6 align=1 (i32.const 0) (get_local 0x3f6)) + (i64.store offset=0x3f7 align=1 (i32.const 0) (get_local 0x3f7)) + (i64.store offset=0x3f8 align=1 (i32.const 0) (get_local 0x3f8)) + (i64.store offset=0x3f9 align=1 (i32.const 0) (get_local 0x3f9)) + (i64.store offset=0x3fa align=1 (i32.const 0) (get_local 0x3fa)) + (i64.store offset=0x3fb align=1 (i32.const 0) (get_local 0x3fb)) + (i64.store offset=0x3fc align=1 (i32.const 0) (get_local 0x3fc)) + (i64.store offset=0x3fd align=1 (i32.const 0) (get_local 0x3fd)) + (i64.store offset=0x3fe align=1 (i32.const 0) (get_local 0x3fe)) + (i64.store offset=0x3ff align=1 (i32.const 0) (get_local 0x3ff)) + (i64.store offset=0x400 align=1 (i32.const 0) (get_local 0x400)) + (i64.store offset=0x401 align=1 (i32.const 0) (get_local 0x401)) + (i64.store offset=0x402 align=1 (i32.const 0) (get_local 0x402)) + (i64.store offset=0x403 align=1 (i32.const 0) (get_local 0x403)) + (i64.store offset=0x404 align=1 (i32.const 0) (get_local 0x404)) + (i64.store offset=0x405 align=1 (i32.const 0) (get_local 0x405)) + (i64.store offset=0x406 align=1 (i32.const 0) (get_local 0x406)) + (i64.store offset=0x407 align=1 (i32.const 0) (get_local 0x407)) + (i64.store offset=0x408 align=1 (i32.const 0) (get_local 0x408)) + (i64.store offset=0x409 align=1 (i32.const 0) (get_local 0x409)) + (i64.store offset=0x40a align=1 (i32.const 0) (get_local 0x40a)) + (i64.store offset=0x40b align=1 (i32.const 0) (get_local 0x40b)) + (i64.store offset=0x40c align=1 (i32.const 0) (get_local 0x40c)) + (i64.store offset=0x40d align=1 (i32.const 0) (get_local 0x40d)) + (i64.store offset=0x40e align=1 (i32.const 0) (get_local 0x40e)) + (i64.store offset=0x40f align=1 (i32.const 0) (get_local 0x40f)) + (i64.store offset=0x410 align=1 (i32.const 0) (get_local 0x410)) + (i64.store offset=0x411 align=1 (i32.const 0) (get_local 0x411)) + (i64.store offset=0x412 align=1 (i32.const 0) (get_local 0x412)) + (i64.store offset=0x413 align=1 (i32.const 0) (get_local 0x413)) + (i64.store offset=0x414 align=1 (i32.const 0) (get_local 0x414)) + (i64.store offset=0x415 align=1 (i32.const 0) (get_local 0x415)) + (i64.store offset=0x416 align=1 (i32.const 0) (get_local 0x416)) + (i64.store offset=0x417 align=1 (i32.const 0) (get_local 0x417)) + (i64.store offset=0x418 align=1 (i32.const 0) (get_local 0x418)) + (i64.store offset=0x419 align=1 (i32.const 0) (get_local 0x419)) + (i64.store offset=0x41a align=1 (i32.const 0) (get_local 0x41a)) + (i64.store offset=0x41b align=1 (i32.const 0) (get_local 0x41b)) + (i64.store offset=0x41c align=1 (i32.const 0) (get_local 0x41c)) + (i64.store offset=0x41d align=1 (i32.const 0) (get_local 0x41d)) + (i64.store offset=0x41e align=1 (i32.const 0) (get_local 0x41e)) + (i64.store offset=0x41f align=1 (i32.const 0) (get_local 0x41f)) + ) +) + +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") +(assert_exhaustion (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") \ No newline at end of file diff --git a/libraries/wasm-jit/Test/spec/stack.wast b/libraries/wasm-jit/Test/spec/stack.wast new file mode 100644 index 000000000..b3f321eca --- /dev/null +++ b/libraries/wasm-jit/Test/spec/stack.wast @@ -0,0 +1,132 @@ +(module + (func (export "fac-expr") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (if + (i64.eq (get_local $i) (i64.const 0)) + (then (br $done)) + (else + (set_local $res (i64.mul (get_local $i) (get_local $res))) + (set_local $i (i64.sub (get_local $i) (i64.const 1))) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-stack") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (get_local $n) + (set_local $i) + (i64.const 1) + (set_local $res) + (block $done + (loop $loop + (get_local $i) + (i64.const 0) + (i64.eq) + (if + (then (br $done)) + (else + (get_local $i) + (get_local $res) + (i64.mul) + (set_local $res) + (get_local $i) + (i64.const 1) + (i64.sub) + (set_local $i) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-stack-raw") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + get_local $n + set_local $i + i64.const 1 + set_local $res + block $done + loop $loop + get_local $i + i64.const 0 + i64.eq + if $body + br $done + else $body + get_local $i + get_local $res + i64.mul + set_local $res + get_local $i + i64.const 1 + i64.sub + set_local $i + end $body + br $loop + end $loop + end $done + get_local $res + ) + + (func (export "fac-mixed") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + (block $done + (loop $loop + (i64.eq (get_local $i) (i64.const 0)) + (if + (then (br $done)) + (else + (i64.mul (get_local $i) (get_local $res)) + (set_local $res) + (i64.sub (get_local $i) (i64.const 1)) + (set_local $i) + ) + ) + (br $loop) + ) + ) + (get_local $res) + ) + + (func (export "fac-mixed-raw") (param $n i64) (result i64) + (local $i i64) + (local $res i64) + (set_local $i (get_local $n)) + (set_local $res (i64.const 1)) + block $done + loop $loop + (i64.eq (get_local $i) (i64.const 0)) + if + br $done + else + (i64.mul (get_local $i) (get_local $res)) + set_local $res + (i64.sub (get_local $i) (i64.const 1)) + set_local $i + end + br $loop + end + end + get_local $res + ) +) + +(assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776)) +(assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776)) diff --git a/libraries/wasm-jit/Test/spec/start.wast b/libraries/wasm-jit/Test/spec/start.wast new file mode 100644 index 000000000..a94dfa16b --- /dev/null +++ b/libraries/wasm-jit/Test/spec/start.wast @@ -0,0 +1,100 @@ +(assert_invalid + (module (func) (start 1)) + "unknown function" +) + +(assert_invalid + (module + (func $main (result i32) (return (i32.const 0))) + (start $main) + ) + "start function" +) +(assert_invalid + (module + (func $main (param $a i32)) + (start $main) + ) + "start function" +) + +(module + (memory (data "A")) + (func $inc + (i32.store8 + (i32.const 0) + (i32.add + (i32.load8_u (i32.const 0)) + (i32.const 1) + ) + ) + ) + (func $get (result i32) + (return (i32.load8_u (i32.const 0))) + ) + (func $main + (call $inc) + (call $inc) + (call $inc) + ) + + (start $main) + (export "inc" (func $inc)) + (export "get" (func $get)) +) +(assert_return (invoke "get") (i32.const 68)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 69)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 70)) + +(module + (memory (data "A")) + (func $inc + (i32.store8 + (i32.const 0) + (i32.add + (i32.load8_u (i32.const 0)) + (i32.const 1) + ) + ) + ) + (func $get (result i32) + (return (i32.load8_u (i32.const 0))) + ) + (func $main + (call $inc) + (call $inc) + (call $inc) + ) + (start 2) + (export "inc" (func $inc)) + (export "get" (func $get)) +) +(assert_return (invoke "get") (i32.const 68)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 69)) +(invoke "inc") +(assert_return (invoke "get") (i32.const 70)) + +(module + (func $print_i32 (import "spectest" "print") (param i32)) + (func $main (call $print_i32 (i32.const 1))) + (start 1) +) + +(module + (func $print_i32 (import "spectest" "print") (param i32)) + (func $main (call $print_i32 (i32.const 2))) + (start $main) +) + +(module + (func $print (import "spectest" "print")) + (start $print) +) + +(assert_trap + (module (func $main (unreachable)) (start $main)) + "unreachable" +) diff --git a/libraries/wasm-jit/Test/spec/store_retval.wast b/libraries/wasm-jit/Test/spec/store_retval.wast new file mode 100644 index 000000000..a4d03582f --- /dev/null +++ b/libraries/wasm-jit/Test/spec/store_retval.wast @@ -0,0 +1,55 @@ +(assert_invalid + (module (func (param i32) (result i32) (set_local 0 (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param i64) (result i64) (set_local 0 (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param f32) (result f32) (set_local 0 (f32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (func (param f64) (result f64) (set_local 0 (f64.const 1)))) + "type mismatch" +) + +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param f32) (result f32) (f32.store (i32.const 0) (f32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param f64) (result f64) (f64.store (i32.const 0) (f64.const 1)))) + "type mismatch" +) + +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store8 (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i32) (result i32) (i32.store16 (i32.const 0) (i32.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store8 (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store16 (i32.const 0) (i64.const 1)))) + "type mismatch" +) +(assert_invalid + (module (memory 1) (func (param i64) (result i64) (i64.store32 (i32.const 0) (i64.const 1)))) + "type mismatch" +) + diff --git a/libraries/wasm-jit/Test/spec/switch.wast b/libraries/wasm-jit/Test/spec/switch.wast new file mode 100644 index 000000000..829acc024 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/switch.wast @@ -0,0 +1,150 @@ +(module + ;; Statement switch + (func (export "stmt") (param $i i32) (result i32) + (local $j i32) + (set_local $j (i32.const 100)) + (block $switch + (block $7 + (block $default + (block $6 + (block $5 + (block $4 + (block $3 + (block $2 + (block $1 + (block $0 + (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default + (get_local $i) + ) + ) ;; 0 + (return (get_local $i)) + ) ;; 1 + (nop) + ;; fallthrough + ) ;; 2 + ;; fallthrough + ) ;; 3 + (set_local $j (i32.sub (i32.const 0) (get_local $i))) + (br $switch) + ) ;; 4 + (br $switch) + ) ;; 5 + (set_local $j (i32.const 101)) + (br $switch) + ) ;; 6 + (set_local $j (i32.const 101)) + ;; fallthrough + ) ;; default + (set_local $j (i32.const 102)) + ) ;; 7 + ;; fallthrough + ) + (return (get_local $j)) + ) + + ;; Expression switch + (func (export "expr") (param $i i64) (result i64) + (local $j i64) + (set_local $j (i64.const 100)) + (return + (block $switch (result i64) + (block $7 + (block $default + (block $4 + (block $5 + (block $6 + (block $3 + (block $2 + (block $1 + (block $0 + (br_table $0 $1 $2 $3 $4 $5 $6 $7 $default + (i32.wrap/i64 (get_local $i)) + ) + ) ;; 0 + (return (get_local $i)) + ) ;; 1 + (nop) + ;; fallthrough + ) ;; 2 + ;; fallthrough + ) ;; 3 + (br $switch (i64.sub (i64.const 0) (get_local $i))) + ) ;; 6 + (set_local $j (i64.const 101)) + ;; fallthrough + ) ;; 4 + ;; fallthrough + ) ;; 5 + ;; fallthrough + ) ;; default + (br $switch (get_local $j)) + ) ;; 7 + (i64.const -5) + ) + ) + ) + + ;; Argument switch + (func (export "arg") (param $i i32) (result i32) + (return + (block $2 (result i32) + (i32.add (i32.const 10) + (block $1 (result i32) + (i32.add (i32.const 100) + (block $0 (result i32) + (i32.add (i32.const 1000) + (block $default (result i32) + (br_table $0 $1 $2 $default + (i32.mul (i32.const 2) (get_local $i)) + (i32.and (i32.const 3) (get_local $i)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; Corner cases + (func (export "corner") (result i32) + (block + (br_table 0 (i32.const 0)) + ) + (i32.const 1) + ) +) + +(assert_return (invoke "stmt" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "stmt" (i32.const 1)) (i32.const -1)) +(assert_return (invoke "stmt" (i32.const 2)) (i32.const -2)) +(assert_return (invoke "stmt" (i32.const 3)) (i32.const -3)) +(assert_return (invoke "stmt" (i32.const 4)) (i32.const 100)) +(assert_return (invoke "stmt" (i32.const 5)) (i32.const 101)) +(assert_return (invoke "stmt" (i32.const 6)) (i32.const 102)) +(assert_return (invoke "stmt" (i32.const 7)) (i32.const 100)) +(assert_return (invoke "stmt" (i32.const -10)) (i32.const 102)) + +(assert_return (invoke "expr" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "expr" (i64.const 1)) (i64.const -1)) +(assert_return (invoke "expr" (i64.const 2)) (i64.const -2)) +(assert_return (invoke "expr" (i64.const 3)) (i64.const -3)) +(assert_return (invoke "expr" (i64.const 6)) (i64.const 101)) +(assert_return (invoke "expr" (i64.const 7)) (i64.const -5)) +(assert_return (invoke "expr" (i64.const -10)) (i64.const 100)) + +(assert_return (invoke "arg" (i32.const 0)) (i32.const 110)) +(assert_return (invoke "arg" (i32.const 1)) (i32.const 12)) +(assert_return (invoke "arg" (i32.const 2)) (i32.const 4)) +(assert_return (invoke "arg" (i32.const 3)) (i32.const 1116)) +(assert_return (invoke "arg" (i32.const 4)) (i32.const 118)) +(assert_return (invoke "arg" (i32.const 5)) (i32.const 20)) +(assert_return (invoke "arg" (i32.const 6)) (i32.const 12)) +(assert_return (invoke "arg" (i32.const 7)) (i32.const 1124)) +(assert_return (invoke "arg" (i32.const 8)) (i32.const 126)) + +(assert_return (invoke "corner") (i32.const 1)) + +(assert_invalid (module (func (br_table 3 (i32.const 0)))) "unknown label") diff --git a/libraries/wasm-jit/Test/spec/tee_local.wast b/libraries/wasm-jit/Test/spec/tee_local.wast new file mode 100644 index 000000000..452793e30 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/tee_local.wast @@ -0,0 +1,236 @@ +;; Test `tee_local` operator + +(module + ;; Typing + + (func (export "type-local-i32") (result i32) (local i32) (tee_local 0 (i32.const 0))) + (func (export "type-local-i64") (result i64) (local i64) (tee_local 0 (i64.const 0))) + (func (export "type-local-f32") (result f32) (local f32) (tee_local 0 (f32.const 0))) + (func (export "type-local-f64") (result f64) (local f64) (tee_local 0 (f64.const 0))) + + (func (export "type-param-i32") (param i32) (result i32) (tee_local 0 (i32.const 10))) + (func (export "type-param-i64") (param i64) (result i64) (tee_local 0 (i64.const 11))) + (func (export "type-param-f32") (param f32) (result f32) (tee_local 0 (f32.const 11.1))) + (func (export "type-param-f64") (param f64) (result f64) (tee_local 0 (f64.const 12.2))) + + (func (export "type-mixed") (param i64 f32 f64 i32 i32) (local f32 i64 i64 f64) + (drop (i64.eqz (tee_local 0 (i64.const 0)))) + (drop (f32.neg (tee_local 1 (f32.const 0)))) + (drop (f64.neg (tee_local 2 (f64.const 0)))) + (drop (i32.eqz (tee_local 3 (i32.const 0)))) + (drop (i32.eqz (tee_local 4 (i32.const 0)))) + (drop (f32.neg (tee_local 5 (f32.const 0)))) + (drop (i64.eqz (tee_local 6 (i64.const 0)))) + (drop (i64.eqz (tee_local 7 (i64.const 0)))) + (drop (f64.neg (tee_local 8 (f64.const 0)))) + ) + + ;; Writing + + (func (export "write") (param i64 f32 f64 i32 i32) (result i64) (local f32 i64 i64 f64) + (drop (tee_local 1 (f32.const -0.3))) + (drop (tee_local 3 (i32.const 40))) + (drop (tee_local 4 (i32.const -7))) + (drop (tee_local 5 (f32.const 5.5))) + (drop (tee_local 6 (i64.const 6))) + (drop (tee_local 8 (f64.const 8))) + (i64.trunc_s/f64 + (f64.add + (f64.convert_u/i64 (get_local 0)) + (f64.add + (f64.promote/f32 (get_local 1)) + (f64.add + (get_local 2) + (f64.add + (f64.convert_u/i32 (get_local 3)) + (f64.add + (f64.convert_s/i32 (get_local 4)) + (f64.add + (f64.promote/f32 (get_local 5)) + (f64.add + (f64.convert_u/i64 (get_local 6)) + (f64.add + (f64.convert_u/i64 (get_local 7)) + (get_local 8) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; Result + + (func (export "result") (param i64 f32 f64 i32 i32) (result f64) + (local f32 i64 i64 f64) + (f64.add + (f64.convert_u/i64 (tee_local 0 (i64.const 1))) + (f64.add + (f64.promote/f32 (tee_local 1 (f32.const 2))) + (f64.add + (tee_local 2 (f64.const 3.3)) + (f64.add + (f64.convert_u/i32 (tee_local 3 (i32.const 4))) + (f64.add + (f64.convert_s/i32 (tee_local 4 (i32.const 5))) + (f64.add + (f64.promote/f32 (tee_local 5 (f32.const 5.5))) + (f64.add + (f64.convert_u/i64 (tee_local 6 (i64.const 6))) + (f64.add + (f64.convert_u/i64 (tee_local 7 (i64.const 0))) + (tee_local 8 (f64.const 8)) + ) + ) + ) + ) + ) + ) + ) + ) + ) +) + +(assert_return (invoke "type-local-i32") (i32.const 0)) +(assert_return (invoke "type-local-i64") (i64.const 0)) +(assert_return (invoke "type-local-f32") (f32.const 0)) +(assert_return (invoke "type-local-f64") (f64.const 0)) + +(assert_return (invoke "type-param-i32" (i32.const 2)) (i32.const 10)) +(assert_return (invoke "type-param-i64" (i64.const 3)) (i64.const 11)) +(assert_return (invoke "type-param-f32" (f32.const 4.4)) (f32.const 11.1)) +(assert_return (invoke "type-param-f64" (f64.const 5.5)) (f64.const 12.2)) + +(assert_return + (invoke "type-mixed" + (i64.const 1) (f32.const 2.2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) +) + +(assert_return + (invoke "write" + (i64.const 1) (f32.const 2) (f64.const 3.3) (i32.const 4) (i32.const 5) + ) + (i64.const 56) +) + +(assert_return + (invoke "result" + (i64.const -1) (f32.const -2) (f64.const -3.3) (i32.const -4) (i32.const -5) + ) + (f64.const 34.8) +) + + +;; Invalid typing of access to locals + +(assert_invalid + (module (func $type-local-num-vs-num (result i64) (local i32) (tee_local 0 (i32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f32) (i32.eqz (tee_local 0 (f32.const 0))))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-num-vs-num (local f64 i64) (f64.neg (tee_local 1 (i64.const 0))))) + "type mismatch" +) + +(assert_invalid + (module (func $type-local-arg-void-vs-num (local i32) (tee_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local i32) (tee_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f32) (tee_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-local-arg-num-vs-num (local f64 i64) (tee_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid typing of access to parameters + +(assert_invalid + (module (func $type-param-num-vs-num (param i32) (result i64) (get_local 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f32) (i32.eqz (get_local 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-num-vs-num (param f64 i64) (f64.neg (get_local 1)))) + "type mismatch" +) + +(assert_invalid + (module (func $type-param-arg-void-vs-num (param i32) (tee_local 0 (nop)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param i32) (tee_local 0 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f32) (tee_local 0 (f64.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-param-arg-num-vs-num (param f64 i64) (tee_local 1 (f64.const 0)))) + "type mismatch" +) + + +;; Invalid local index + +(assert_invalid + (module (func $unbound-local (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-local (local i32 i64) (get_local 14324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-param (param i32 i64) (get_local 2))) + "unknown local" +) +(assert_invalid + (module (func $large-param (local i32 i64) (get_local 714324343))) + "unknown local" +) + +(assert_invalid + (module (func $unbound-mixed (param i32) (local i32 i64) (get_local 3))) + "unknown local" +) +(assert_invalid + (module (func $large-mixed (param i64) (local i32 i64) (get_local 214324343))) + "unknown local" +) + +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param f32) (local i32) (tee_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64 i32) (local f32) (tee_local 1 (f32.const 0)))) + "type mismatch" +) +(assert_invalid + (module (func $type-mixed-arg-num-vs-num (param i64) (local f64 i64) (tee_local 1 (i64.const 0)))) + "type mismatch" +) + diff --git a/libraries/wasm-jit/Test/spec/token.wast b/libraries/wasm-jit/Test/spec/token.wast new file mode 100644 index 000000000..1dcd32e7f --- /dev/null +++ b/libraries/wasm-jit/Test/spec/token.wast @@ -0,0 +1,10 @@ +;; Test tokenization + +(assert_malformed + (module quote "(func (drop (i32.const0)))") + "unknown operator" +) +(assert_malformed + (module quote "(func br 0drop)") + "unknown operator" +) diff --git a/libraries/wasm-jit/Test/spec/traps.wast b/libraries/wasm-jit/Test/spec/traps.wast new file mode 100644 index 000000000..32072b984 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/traps.wast @@ -0,0 +1,89 @@ +;; Test that traps are preserved even in instructions which might otherwise +;; be dead-code-eliminated. These functions all perform an operation and +;; discard its return value. + +(module + (func (export "no_dce.i32.div_s") (param $x i32) (param $y i32) + (drop (i32.div_s (get_local $x) (get_local $y)))) + (func (export "no_dce.i32.div_u") (param $x i32) (param $y i32) + (drop (i32.div_u (get_local $x) (get_local $y)))) + (func (export "no_dce.i64.div_s") (param $x i64) (param $y i64) + (drop (i64.div_s (get_local $x) (get_local $y)))) + (func (export "no_dce.i64.div_u") (param $x i64) (param $y i64) + (drop (i64.div_u (get_local $x) (get_local $y)))) +) + +(assert_trap (invoke "no_dce.i32.div_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i32.div_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.div_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.div_u" (i64.const 1) (i64.const 0)) "integer divide by zero") + +(module + (func (export "no_dce.i32.rem_s") (param $x i32) (param $y i32) + (drop (i32.rem_s (get_local $x) (get_local $y)))) + (func (export "no_dce.i32.rem_u") (param $x i32) (param $y i32) + (drop (i32.rem_u (get_local $x) (get_local $y)))) + (func (export "no_dce.i64.rem_s") (param $x i64) (param $y i64) + (drop (i64.rem_s (get_local $x) (get_local $y)))) + (func (export "no_dce.i64.rem_u") (param $x i64) (param $y i64) + (drop (i64.rem_u (get_local $x) (get_local $y)))) +) + +(assert_trap (invoke "no_dce.i32.rem_s" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i32.rem_u" (i32.const 1) (i32.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.rem_s" (i64.const 1) (i64.const 0)) "integer divide by zero") +(assert_trap (invoke "no_dce.i64.rem_u" (i64.const 1) (i64.const 0)) "integer divide by zero") + +(module + (func (export "no_dce.i32.trunc_s_f32") (param $x f32) (drop (i32.trunc_s/f32 (get_local $x)))) + (func (export "no_dce.i32.trunc_u_f32") (param $x f32) (drop (i32.trunc_u/f32 (get_local $x)))) + (func (export "no_dce.i32.trunc_s_f64") (param $x f64) (drop (i32.trunc_s/f64 (get_local $x)))) + (func (export "no_dce.i32.trunc_u_f64") (param $x f64) (drop (i32.trunc_u/f64 (get_local $x)))) + (func (export "no_dce.i64.trunc_s_f32") (param $x f32) (drop (i64.trunc_s/f32 (get_local $x)))) + (func (export "no_dce.i64.trunc_u_f32") (param $x f32) (drop (i64.trunc_u/f32 (get_local $x)))) + (func (export "no_dce.i64.trunc_s_f64") (param $x f64) (drop (i64.trunc_s/f64 (get_local $x)))) + (func (export "no_dce.i64.trunc_u_f64") (param $x f64) (drop (i64.trunc_u/f64 (get_local $x)))) +) + +(assert_trap (invoke "no_dce.i32.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i32.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_s_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_u_f32" (f32.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_s_f64" (f64.const nan)) "invalid conversion to integer") +(assert_trap (invoke "no_dce.i64.trunc_u_f64" (f64.const nan)) "invalid conversion to integer") + +(module + (memory 1) + + (func (export "no_dce.i32.load") (param $i i32) (drop (i32.load (get_local $i)))) + (func (export "no_dce.i32.load16_s") (param $i i32) (drop (i32.load16_s (get_local $i)))) + (func (export "no_dce.i32.load16_u") (param $i i32) (drop (i32.load16_u (get_local $i)))) + (func (export "no_dce.i32.load8_s") (param $i i32) (drop (i32.load8_s (get_local $i)))) + (func (export "no_dce.i32.load8_u") (param $i i32) (drop (i32.load8_u (get_local $i)))) + (func (export "no_dce.i64.load") (param $i i32) (drop (i64.load (get_local $i)))) + (func (export "no_dce.i64.load32_s") (param $i i32) (drop (i64.load32_s (get_local $i)))) + (func (export "no_dce.i64.load32_u") (param $i i32) (drop (i64.load32_u (get_local $i)))) + (func (export "no_dce.i64.load16_s") (param $i i32) (drop (i64.load16_s (get_local $i)))) + (func (export "no_dce.i64.load16_u") (param $i i32) (drop (i64.load16_u (get_local $i)))) + (func (export "no_dce.i64.load8_s") (param $i i32) (drop (i64.load8_s (get_local $i)))) + (func (export "no_dce.i64.load8_u") (param $i i32) (drop (i64.load8_u (get_local $i)))) + (func (export "no_dce.f32.load") (param $i i32) (drop (f32.load (get_local $i)))) + (func (export "no_dce.f64.load") (param $i i32) (drop (f64.load (get_local $i)))) +) + +(assert_trap (invoke "no_dce.i32.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i32.load16_s" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i32.load16_u" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i32.load8_s" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i32.load8_u" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load32_s" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load32_u" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load16_s" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load16_u" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load8_s" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.i64.load8_u" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.f32.load" (i32.const 65536)) "out of bounds memory access") +(assert_trap (invoke "no_dce.f64.load" (i32.const 65536)) "out of bounds memory access") diff --git a/libraries/wasm-jit/Test/spec/typecheck.wast b/libraries/wasm-jit/Test/spec/typecheck.wast new file mode 100644 index 000000000..72f6f621f --- /dev/null +++ b/libraries/wasm-jit/Test/spec/typecheck.wast @@ -0,0 +1,425 @@ +;; TODO: move all tests in this file to appropriate operator-specific files. + +(assert_invalid + (module (func $type-unary-operand-missing + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-block + (i32.const 0) + (block (i32.eqz) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-loop + (i32.const 0) + (loop (i32.eqz) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (then (i32.eqz) (drop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (i32.eqz))) (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-binary-1st-operand-missing + (i32.add) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing + (i32.const 0) (i32.add) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-block + (i32.const 0) (i32.const 0) + (block (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-block + (i32.const 0) + (block (i32.const 0) (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-loop + (i32.const 0) (i32.const 0) + (loop (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-loop + (i32.const 0) + (loop (i32.const 0) (i32.add) (drop)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-if + (i32.const 0) (i32.const 0) (i32.const 0) + (if (i32.add) (then (drop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (i32.const 0) (then (i32.add)) (else (drop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-1st-operand-missing-in-else + (i32.const 0) (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (i32.add) (i32.const 0))) + (drop) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-2nd-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (i32.add))) + (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-if-operand-missing + (if (then)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-block + (i32.const 0) + (block (if (then))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-loop + (i32.const 0) + (loop (if (then))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-if + (i32.const 0) (i32.const 0) + (if (then (if (then)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-operand-missing-in-else + (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (if (then)) (i32.const 0))) + (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-br-operand-missing + (block (result i32) (br 0)) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-block + (i32.const 0) + (block (result i32) (br 0)) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-if + (block + (i32.const 0) (i32.const 0) + (if (result i32) (then (br 0))) + ) + (i32.eqz) (drop) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br-operand-missing-in-else + (block + (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (br 0))) + ) + (i32.eqz) (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-operand-missing (result i32) + (return) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-block (result i32) + (i32.const 0) + (block (return)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-loop (result i32) + (i32.const 0) + (loop (return)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-if (result i32) + (i32.const 0) (i32.const 0) + (if (then (return))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-return-operand-missing-in-else (result i32) + (i32.const 0) (i32.const 0) + (if (result i32) (then (i32.const 0)) (else (return))) (drop) + )) + "type mismatch" +) + +;; TODO(stack): more of the above + +;; if condition +(assert_invalid (module (func (if (f32.const 0) (then)))) "type mismatch") + +;; br_if condition +(assert_invalid (module (func (block (br_if 0 (f32.const 0))))) "type mismatch") + +;; br_table key +(assert_invalid + (module (func (block (br_table 0 (f32.const 0))))) + "type mismatch") + +;; call params +(assert_invalid (module (func (param i32)) (func (call 0 (f32.const 0)))) "type mismatch") +(assert_invalid + (module + (type (func (param i32))) + (func (type 0)) + (table 0 anyfunc) + (func + (call_indirect 0 (i32.const 0) (f32.const 0)))) + "type mismatch") + +;; call_indirect index +(assert_invalid + (module + (type (func)) + (func (type 0)) + (table 0 anyfunc) + (func (call_indirect 0 (f32.const 0)))) + "type mismatch") + +;; return +(assert_invalid (module (func (result i32) (return (f32.const 0)))) "type mismatch") + +;; set_local +(assert_invalid (module (func (local i32) (set_local 0 (f32.const 0)))) "type mismatch") + +;; load index +(assert_invalid (module (memory 1) (func (i32.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load8_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load8_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load16_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.load16_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load8_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load8_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load16_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load16_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load32_s (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.load32_u (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.load (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.load (f32.const 0)))) "type mismatch") + +;; store index +(assert_invalid (module (memory 1) (func (i32.store (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store8 (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store16 (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store (f32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store8 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store16 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store32 (f32.const 0) (i64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.store (f32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.store (f32.const 0) (f64.const 0)))) "type mismatch") + +;; store value +(assert_invalid (module (memory 1) (func (i32.store (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store8 (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i32.store16 (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store8 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store16 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (i64.store32 (i32.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f32.store (i32.const 0) (i32.const 0)))) "type mismatch") +(assert_invalid (module (memory 1) (func (f64.store (i32.const 0) (i64.const 0)))) "type mismatch") + +;; binary +(assert_invalid (module (func (i32.add (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.and (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.div_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.div_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.mul (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.or (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rem_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rem_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rotl (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.rotr (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shl (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shr_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.shr_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.sub (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.xor (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.add (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.and (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.div_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.div_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.mul (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.or (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rem_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rem_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rotl (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.rotr (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shl (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shr_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.shr_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.sub (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.xor (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.add (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.copysign (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.div (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.max (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.min (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.mul (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.sub (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.add (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.copysign (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.div (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.max (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.min (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.mul (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.sub (i64.const 0) (f32.const 0)))) "type mismatch") + +;; unary +(assert_invalid (module (func (i32.eqz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.clz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ctz (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.popcnt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.eqz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.clz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ctz (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.popcnt (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.abs (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ceil (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.floor (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.nearest (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.neg (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.sqrt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.trunc (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.abs (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ceil (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.floor (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.nearest (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.neg (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.sqrt (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.trunc (i64.const 0)))) "type mismatch") + +;; compare +(assert_invalid (module (func (i32.eq (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ge_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ge_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.gt_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.gt_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.le_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.le_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.lt_s (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.lt_u (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.ne (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.eq (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ge_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ge_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.gt_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.gt_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.le_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.le_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.lt_s (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.lt_u (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.ne (i32.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.eq (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ge (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.gt (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.le (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.lt (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.ne (i64.const 0) (f64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.eq (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ge (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.gt (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.le (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.lt (i64.const 0) (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.ne (i64.const 0) (f32.const 0)))) "type mismatch") + +;; convert +(assert_invalid (module (func (i32.wrap/i64 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_s/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_u/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_s/f64 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.trunc_u/f64 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i32.reinterpret/f32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.extend_s/i32 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.extend_u/i32 (f32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_s/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_u/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_s/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.trunc_u/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (i64.reinterpret/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_s/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_u/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_s/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.convert_u/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.demote/f64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f32.reinterpret/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_s/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_u/i32 (i64.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_s/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.convert_u/i64 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.promote/f32 (i32.const 0)))) "type mismatch") +(assert_invalid (module (func (f64.reinterpret/i64 (i32.const 0)))) "type mismatch") + +;; grow_memory +(assert_invalid (module (memory 1) (func (grow_memory (f32.const 0)))) "type mismatch") diff --git a/libraries/wasm-jit/Test/spec/unreachable.wast b/libraries/wasm-jit/Test/spec/unreachable.wast new file mode 100644 index 000000000..30df789e2 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/unreachable.wast @@ -0,0 +1,282 @@ +;; Test `unreachable` operator + +(module + ;; Auxiliary definitions + (func $dummy) + (func $dummy3 (param i32 i32 i32)) + + (func (export "type-i32") (result i32) (unreachable)) + (func (export "type-i64") (result i32) (unreachable)) + (func (export "type-f32") (result f64) (unreachable)) + (func (export "type-f64") (result f64) (unreachable)) + + (func (export "as-func-first") (result i32) + (unreachable) (i32.const -1) + ) + (func (export "as-func-mid") (result i32) + (call $dummy) (unreachable) (i32.const -1) + ) + (func (export "as-func-last") + (call $dummy) (unreachable) + ) + (func (export "as-func-value") (result i32) + (call $dummy) (unreachable) + ) + + (func (export "as-block-first") (result i32) + (block (result i32) (unreachable) (i32.const 2)) + ) + (func (export "as-block-mid") (result i32) + (block (result i32) (call $dummy) (unreachable) (i32.const 2)) + ) + (func (export "as-block-last") + (block (nop) (call $dummy) (unreachable)) + ) + (func (export "as-block-value") (result i32) + (block (result i32) (nop) (call $dummy) (unreachable)) + ) + (func (export "as-block-broke") (result i32) + (block (result i32) (call $dummy) (br 0 (i32.const 1)) (unreachable)) + ) + + (func (export "as-loop-first") (result i32) + (loop (result i32) (unreachable) (i32.const 2)) + ) + (func (export "as-loop-mid") (result i32) + (loop (result i32) (call $dummy) (unreachable) (i32.const 2)) + ) + (func (export "as-loop-last") + (loop (nop) (call $dummy) (unreachable)) + ) + (func (export "as-loop-broke") (result i32) + (block (result i32) + (loop (result i32) (call $dummy) (br 1 (i32.const 1)) (unreachable)) + ) + ) + + (func (export "as-br-value") (result i32) + (block (result i32) (br 0 (unreachable))) + ) + + (func (export "as-br_if-cond") + (block (br_if 0 (unreachable))) + ) + (func (export "as-br_if-value") (result i32) + (block (result i32) + (drop (br_if 0 (unreachable) (i32.const 1))) (i32.const 7) + ) + ) + (func (export "as-br_if-value-cond") (result i32) + (block (result i32) + (drop (br_if 0 (i32.const 6) (unreachable))) (i32.const 7) + ) + ) + + (func (export "as-br_table-index") + (block (br_table 0 0 0 (unreachable))) + ) + (func (export "as-br_table-value") (result i32) + (block (result i32) + (br_table 0 0 0 (unreachable) (i32.const 1)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-2") (result i32) + (block (result i32) + (block (result i32) (br_table 0 1 (unreachable) (i32.const 1))) + ) + ) + (func (export "as-br_table-value-index") (result i32) + (block (result i32) + (br_table 0 0 (i32.const 6) (unreachable)) (i32.const 7) + ) + ) + (func (export "as-br_table-value-and-index") (result i32) + (block (result i32) (br_table 0 0 (unreachable)) (i32.const 8)) + ) + + (func (export "as-return-value") (result i64) + (return (unreachable)) + ) + + (func (export "as-if-cond") (result i32) + (if (result i32) (unreachable) (then (i32.const 0)) (else (i32.const 1))) + ) + (func (export "as-if-then") (param i32 i32) (result i32) + (if (result i32) (get_local 0) (then (unreachable)) (else (get_local 1))) + ) + (func (export "as-if-else") (param i32 i32) (result i32) + (if (result i32) (get_local 0) (then (get_local 1)) (else (unreachable))) + ) + + (func (export "as-select-first") (param i32 i32) (result i32) + (select (unreachable) (get_local 0) (get_local 1)) + ) + (func (export "as-select-second") (param i32 i32) (result i32) + (select (get_local 0) (unreachable) (get_local 1)) + ) + (func (export "as-select-cond") (result i32) + (select (i32.const 0) (i32.const 1) (unreachable)) + ) + + (func (export "as-call-first") + (call $dummy3 (unreachable) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call-mid") + (call $dummy3 (i32.const 1) (unreachable) (i32.const 3)) + ) + (func (export "as-call-last") + (call $dummy3 (i32.const 1) (i32.const 2) (unreachable)) + ) + + (type $sig (func (param i32 i32 i32))) + (table anyfunc (elem $dummy3)) + (func (export "as-call_indirect-func") + (call_indirect $sig (unreachable) (i32.const 1) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-first") + (call_indirect $sig (i32.const 0) (unreachable) (i32.const 2) (i32.const 3)) + ) + (func (export "as-call_indirect-mid") + (call_indirect $sig (i32.const 0) (i32.const 1) (unreachable) (i32.const 3)) + ) + (func (export "as-call_indirect-last") + (call_indirect $sig (i32.const 0) (i32.const 1) (i32.const 2) (unreachable)) + ) + + (func (export "as-set_local-value") (local f32) + (set_local 0 (unreachable)) + ) + + (memory 1) + (func (export "as-load-address") (result f32) + (f32.load (unreachable)) + ) + (func (export "as-loadN-address") (result i64) + (i64.load8_s (unreachable)) + ) + + (func (export "as-store-address") + (f64.store (unreachable) (f64.const 7)) + ) + (func (export "as-store-value") + (i64.store (i32.const 2) (unreachable)) + ) + + (func (export "as-storeN-address") + (i32.store8 (unreachable) (i32.const 7)) + ) + (func (export "as-storeN-value") + (i64.store16 (i32.const 2) (unreachable)) + ) + + (func (export "as-unary-operand") (result f32) + (f32.neg (unreachable)) + ) + + (func (export "as-binary-left") (result i32) + (i32.add (unreachable) (i32.const 10)) + ) + (func (export "as-binary-right") (result i64) + (i64.sub (i64.const 10) (unreachable)) + ) + + (func (export "as-test-operand") (result i32) + (i32.eqz (unreachable)) + ) + + (func (export "as-compare-left") (result i32) + (f64.le (unreachable) (f64.const 10)) + ) + (func (export "as-compare-right") (result i32) + (f32.ne (f32.const 10) (unreachable)) + ) + + (func (export "as-convert-operand") (result i32) + (i32.wrap/i64 (unreachable)) + ) + + (func (export "as-grow_memory-size") (result i32) + (grow_memory (unreachable)) + ) +) + +(assert_trap (invoke "type-i32") "unreachable") +(assert_trap (invoke "type-i64") "unreachable") +(assert_trap (invoke "type-f32") "unreachable") +(assert_trap (invoke "type-f64") "unreachable") + +(assert_trap (invoke "as-func-first") "unreachable") +(assert_trap (invoke "as-func-mid") "unreachable") +(assert_trap (invoke "as-func-last") "unreachable") +(assert_trap (invoke "as-func-value") "unreachable") + +(assert_trap (invoke "as-block-first") "unreachable") +(assert_trap (invoke "as-block-mid") "unreachable") +(assert_trap (invoke "as-block-last") "unreachable") +(assert_trap (invoke "as-block-value") "unreachable") +(assert_return (invoke "as-block-broke") (i32.const 1)) + +(assert_trap (invoke "as-loop-first") "unreachable") +(assert_trap (invoke "as-loop-mid") "unreachable") +(assert_trap (invoke "as-loop-last") "unreachable") +(assert_return (invoke "as-loop-broke") (i32.const 1)) + +(assert_trap (invoke "as-br-value") "unreachable") + +(assert_trap (invoke "as-br_if-cond") "unreachable") +(assert_trap (invoke "as-br_if-value") "unreachable") +(assert_trap (invoke "as-br_if-value-cond") "unreachable") + +(assert_trap (invoke "as-br_table-index") "unreachable") +(assert_trap (invoke "as-br_table-value") "unreachable") +(assert_trap (invoke "as-br_table-value-2") "unreachable") +(assert_trap (invoke "as-br_table-value-index") "unreachable") +(assert_trap (invoke "as-br_table-value-and-index") "unreachable") + +(assert_trap (invoke "as-return-value") "unreachable") + +(assert_trap (invoke "as-if-cond") "unreachable") +(assert_trap (invoke "as-if-then" (i32.const 1) (i32.const 6)) "unreachable") +(assert_return (invoke "as-if-then" (i32.const 0) (i32.const 6)) (i32.const 6)) +(assert_trap (invoke "as-if-else" (i32.const 0) (i32.const 6)) "unreachable") +(assert_return (invoke "as-if-else" (i32.const 1) (i32.const 6)) (i32.const 6)) + +(assert_trap (invoke "as-select-first" (i32.const 0) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-first" (i32.const 1) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-second" (i32.const 0) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-second" (i32.const 1) (i32.const 6)) "unreachable") +(assert_trap (invoke "as-select-cond") "unreachable") + +(assert_trap (invoke "as-call-first") "unreachable") +(assert_trap (invoke "as-call-mid") "unreachable") +(assert_trap (invoke "as-call-last") "unreachable") + +(assert_trap (invoke "as-call_indirect-func") "unreachable") +(assert_trap (invoke "as-call_indirect-first") "unreachable") +(assert_trap (invoke "as-call_indirect-mid") "unreachable") +(assert_trap (invoke "as-call_indirect-last") "unreachable") + +(assert_trap (invoke "as-set_local-value") "unreachable") + +(assert_trap (invoke "as-load-address") "unreachable") +(assert_trap (invoke "as-loadN-address") "unreachable") + +(assert_trap (invoke "as-store-address") "unreachable") +(assert_trap (invoke "as-store-value") "unreachable") +(assert_trap (invoke "as-storeN-address") "unreachable") +(assert_trap (invoke "as-storeN-value") "unreachable") + +(assert_trap (invoke "as-unary-operand") "unreachable") + +(assert_trap (invoke "as-binary-left") "unreachable") +(assert_trap (invoke "as-binary-right") "unreachable") + +(assert_trap (invoke "as-test-operand") "unreachable") + +(assert_trap (invoke "as-compare-left") "unreachable") +(assert_trap (invoke "as-compare-right") "unreachable") + +(assert_trap (invoke "as-convert-operand") "unreachable") + +(assert_trap (invoke "as-grow_memory-size") "unreachable") + diff --git a/libraries/wasm-jit/Test/spec/unreached-invalid.wast b/libraries/wasm-jit/Test/spec/unreached-invalid.wast new file mode 100644 index 000000000..8c73deb9c --- /dev/null +++ b/libraries/wasm-jit/Test/spec/unreached-invalid.wast @@ -0,0 +1,625 @@ +;; Failures in unreachable code. + +(assert_invalid + (module (func $local-index (unreachable) (drop (get_local 0)))) + "unknown local" +) +(assert_invalid + (module (func $global-index (unreachable) (drop (get_global 0)))) + "unknown global" +) +(assert_invalid + (module (func $func-index (unreachable) (call 1))) + "unknown function" +) +(assert_invalid + (module (func $label-index (unreachable) (br 1))) + "unknown label" +) + +(assert_invalid + (module (func $type-num-vs-num + (unreachable) (drop (i64.eqz (i32.const 0)))) + ) + "type mismatch" +) +(assert_invalid + (module (func $type-poly-num-vs-num (result i32) + (unreachable) (i64.const 0) (i32.const 0) (select) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-poly-transitive-num-vs-num (result i32) + (unreachable) + (i64.const 0) (i32.const 0) (select) + (i32.const 0) (i32.const 0) (select) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unconsumed-const (unreachable) (i32.const 0))) + "type mismatch" +) +(assert_invalid + (module (func $type-unconsumed-result (unreachable) (i32.eqz))) + "type mismatch" +) +(assert_invalid + (module (func $type-unconsumed-result2 + (unreachable) (i32.const 0) (i32.add) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unconsumed-poly0 (unreachable) (select))) + "type mismatch" +) +(assert_invalid + (module (func $type-unconsumed-poly1 (unreachable) (i32.const 0) (select))) + "type mismatch" +) +(assert_invalid + (module (func $type-unconsumed-poly2 + (unreachable) (i32.const 0) (i32.const 0) (select) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-after-break + (block (br 0) (block (drop (i32.eqz (nop))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-after-break + (block (br 0) (drop (i32.eqz (f32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-after-break + (block (br 0) (block (drop (f32.eq (i32.const 1))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-after-break + (block (br 0) (drop (f32.eq (i32.const 1) (f32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-after-break + (block (br 0) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-after-break (result i32) + (block (result i32) (i32.const 1) (br 0) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-void-after-break + (block (loop (br 1) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-num-after-break (result i32) + (loop (result i32) (br 1 (i32.const 1)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-void-after-break + (br 0) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-num-after-break (result i32) + (br 0 (i32.const 1)) (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-after-return + (return) (block (drop (i32.eqz (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-after-return + (return) (drop (i32.eqz (f32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-after-return + (return) (block (drop (f32.eq (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-after-return + (return) (drop (f32.eq (i32.const 1) (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-after-return + (block (return) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-after-return (result i32) + (block (result i32) (i32.const 1) (return (i32.const 0)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-void-after-return + (block (loop (return) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-num-after-return (result i32) + (loop (result i32) (return (i32.const 1)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-void-after-return + (return) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-num-after-return (result i32) + (return (i32.const 1)) (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-after-unreachable + (unreachable) (block (drop (i32.eqz (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-after-unreachable + (unreachable) (drop (i32.eqz (f32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-after-unreachable + (unreachable) (block (drop (f32.eq (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-after-unreachable + (unreachable) (drop (f32.eq (i32.const 1) (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-after-unreachable + (block (unreachable) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-after-unreachable (result i32) + (block (result i32) (i32.const 1) (unreachable) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-void-after-unreachable + (block (loop (unreachable) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-num-after-unreachable (result i32) + (loop (result i32) (unreachable) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-void-after-unreachable + (unreachable) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-num-after-unreachable (result i32) + (unreachable) (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-after-nested-unreachable + (block (unreachable)) (block (drop (i32.eqz (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-after-nested-unreachable + (block (unreachable)) (drop (i32.eqz (f32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-after-nested-unreachable + (block (unreachable)) (block (drop (f32.eq (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-after-nested-unreachable + (block (unreachable)) (drop (f32.eq (i32.const 1) (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-after-nested-unreachable + (block (block (unreachable)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-after-nested-unreachable + (result i32) + (block (result i32) (i32.const 1) (block (unreachable)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-void-after-nested-unreachable + (block (loop (block (unreachable)) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-num-after-nested-unreachable + (result i32) + (loop (result i32) (block (unreachable)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-void-after-nested-unreachable + (block (unreachable)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-num-after-nested-unreachable + (result i32) + (block (unreachable)) (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-after-infinite-loop + (loop (br 0)) (block (drop (i32.eqz (nop)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-after-infinite-loop + (loop (br 0)) (drop (i32.eqz (f32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-after-infinite-loop + (loop (br 0)) (block (drop (f32.eq (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-after-infinite-loop + (loop (br 0)) (drop (f32.eq (i32.const 1) (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-after-infinite-loop + (block (loop (br 0)) (i32.const 1)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-after-infinite-loop (result i32) + (block (result i32) (i32.const 1) (loop (br 0)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-void-after-infinite-loop + (block (loop (loop (br 0)) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-num-vs-num-after-infinite-loop (result i32) + (loop (result i32) (loop (br 0)) (f32.const 0)) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-void-after-infinite-loop + (loop (br 0)) (i32.const 1) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-func-value-num-vs-num-after-infinite-loop (result i32) + (loop (br 0)) (f32.const 0) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-unary-num-vs-void-in-dead-body + (if (i32.const 0) (then (drop (i32.eqz (nop))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-unary-num-vs-num-in-dead-body + (if (i32.const 0) (then (drop (i32.eqz (f32.const 1))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-void-in-dead-body + (if (i32.const 0) (then (drop (f32.eq (i32.const 1))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-binary-num-vs-num-in-dead-body + (if (i32.const 0) (then (drop (f32.eq (i32.const 1) (f32.const 0))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-value-num-vs-void-in-dead-body + (if (i32.const 0) (then (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-if-value-num-vs-num-in-dead-body (result i32) + (if (result i32) (i32.const 0) (then (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-in-dead-body + (if (i32.const 0) (then (block (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-in-dead-body (result i32) + (if (result i32) (i32.const 0) (then (block (result i32) (f32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-void-in-dead-body + (if (i32.const 0) (then (loop (i32.const 1)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-num-vs-num-in-dead-body (result i32) + (if (result i32) (i32.const 0) (then (loop (result i32) (f32.const 0)))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-return-second-num-vs-num (result i32) + (return (i32.const 1)) (return (f64.const 1)) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-br-second-num-vs-num (result i32) + (block (result i32) (br 0 (i32.const 1)) (br 0 (f64.const 1))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-br_if-cond-num-vs-num-after-unreachable + (block (br_if 0 (unreachable) (f32.const 0))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br_table-num-vs-num-after-unreachable + (block (br_table 0 (unreachable) (f32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br_table-label-num-vs-num-after-unreachable (result i32) + (block (result i32) (unreachable) (br_table 0 (f32.const 0) (i32.const 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br_table-label-num-vs-label-void-after-unreachable + (block + (block (result f32) + (unreachable) + (br_table 0 1 0 (i32.const 1)) + ) + (drop) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-br_table-label-num-vs-label-num-after-unreachable + (block (result f64) + (block (result f32) + (unreachable) + (br_table 0 1 1 (i32.const 1)) + ) + (drop) + (f64.const 0) + ) + (drop) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-block-value-nested-unreachable-num-vs-void + (block (i32.const 3) (block (unreachable))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-unreachable-void-vs-num (result i32) + (block (block (unreachable))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-unreachable-num-vs-num (result i32) + (block (result i64) (i64.const 0) (block (unreachable))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-unreachable-num2-vs-void (result i32) + (block (i32.const 3) (block (i64.const 1) (unreachable))) (i32.const 9) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-block-value-nested-br-num-vs-void + (block (i32.const 3) (block (br 1))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-br-void-vs-num (result i32) + (block (result i32) (block (br 1 (i32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-br-num-vs-num (result i32) + (block (result i32) (i64.const 0) (block (br 1 (i32.const 0)))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-block-value-nested2-br-num-vs-void + (block (block (i32.const 3) (block (br 2)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested2-br-void-vs-num (result i32) + (block (result i32) (block (block (br 2 (i32.const 0))))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested2-br-num-vs-num (result i32) + (block (result i32) + (block (result i64) (i64.const 0) (block (br 2 (i32.const 0)))) + ) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested2-br-num2-vs-void (result i32) + (block (i32.const 3) (block (i64.const 1) (br 1))) (i32.const 9) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-block-value-nested-return-num-vs-void + (block (i32.const 3) (block (return))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-return-void-vs-num (result i32) + (block (block (return (i32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-return-num-vs-num (result i32) + (block (result i64) (i64.const 0) (block (return (i32.const 0)))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-block-value-nested-return-num2-vs-void (result i32) + (block (i32.const 3) (block (i64.const 1) (return (i32.const 0)))) + (i32.const 9) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-loop-value-nested-unreachable-num-vs-void + (loop (i32.const 3) (block (unreachable))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-nested-unreachable-void-vs-num (result i32) + (loop (block (unreachable))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-loop-value-nested-unreachable-num-vs-num (result i32) + (loop (result i64) (i64.const 0) (block (unreachable))) + )) + "type mismatch" +) + +(assert_invalid + (module (func $type-cont-last-void-vs-empty (result i32) + (loop (br 0 (nop))) + )) + "type mismatch" +) +(assert_invalid + (module (func $type-cont-last-num-vs-empty (result i32) + (loop (br 0 (i32.const 0))) + )) + "type mismatch" +) diff --git a/libraries/wasm-jit/Test/spec/unwind.wast b/libraries/wasm-jit/Test/spec/unwind.wast new file mode 100644 index 000000000..40b0dcf6f --- /dev/null +++ b/libraries/wasm-jit/Test/spec/unwind.wast @@ -0,0 +1,203 @@ +;; Test that control-flow transfer unwinds stack and it can be anything after. + +(module + (func (export "func-unwind-by-unreachable") + (i32.const 3) (i64.const 1) (unreachable) + ) + (func (export "func-unwind-by-br") + (i32.const 3) (i64.const 1) (br 0) + ) + (func (export "func-unwind-by-br-value") (result i32) + (i32.const 3) (i64.const 1) (br 0 (i32.const 9)) + ) + (func (export "func-unwind-by-br_table") + (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0)) + ) + (func (export "func-unwind-by-br_table-value") (result i32) + (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) + ) + (func (export "func-unwind-by-return") (result i32) + (i32.const 3) (i64.const 1) (return (i32.const 9)) + ) + + (func (export "block-unwind-by-unreachable") + (block (i32.const 3) (i64.const 1) (unreachable)) + ) + (func (export "block-unwind-by-br") (result i32) + (block (i32.const 3) (i64.const 1) (br 0)) (i32.const 9) + ) + (func (export "block-unwind-by-br-value") (result i32) + (block (result i32) (i32.const 3) (i64.const 1) (br 0 (i32.const 9))) + ) + (func (export "block-unwind-by-br_table") (result i32) + (block (i32.const 3) (i64.const 1) (br_table 0 (i32.const 0))) (i32.const 9) + ) + (func (export "block-unwind-by-br_table-value") (result i32) + (block (result i32) + (i32.const 3) (i64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) + ) + ) + (func (export "block-unwind-by-return") (result i32) + (block (result i32) (i32.const 3) (i64.const 1) (return (i32.const 9))) + ) + + (func (export "block-nested-unwind-by-unreachable") (result i32) + (block (result i32) (i32.const 3) (block (i64.const 1) (unreachable))) + ) + (func (export "block-nested-unwind-by-br") (result i32) + (block (i32.const 3) (block (i64.const 1) (br 1)) (drop)) (i32.const 9) + ) + (func (export "block-nested-unwind-by-br-value") (result i32) + (block (result i32) + (i32.const 3) (block (i64.const 1) (br 1 (i32.const 9))) + ) + ) + (func (export "block-nested-unwind-by-br_table") (result i32) + (block + (i32.const 3) (block (i64.const 1) (br_table 1 (i32.const 1))) + (drop) + ) + (i32.const 9) + ) + (func (export "block-nested-unwind-by-br_table-value") (result i32) + (block (result i32) + (i32.const 3) + (block (i64.const 1) (br_table 1 (i32.const 9) (i32.const 1))) + ) + ) + (func (export "block-nested-unwind-by-return") (result i32) + (block (result i32) + (i32.const 3) (block (i64.const 1) (return (i32.const 9))) + ) + ) + + (func (export "unary-after-unreachable") (result i32) + (f32.const 0) (unreachable) (i64.eqz) + ) + (func (export "unary-after-br") (result i32) + (block (result i32) (f32.const 0) (br 0 (i32.const 9)) (i64.eqz)) + ) + (func (export "unary-after-br_table") (result i32) + (block (result i32) + (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) (i64.eqz) + ) + ) + (func (export "unary-after-return") (result i32) + (f32.const 0) (return (i32.const 9)) (i64.eqz) + ) + + (func (export "binary-after-unreachable") (result i32) + (f32.const 0) (f64.const 1) (unreachable) (i64.eq) + ) + (func (export "binary-after-br") (result i32) + (block (result i32) + (f32.const 0) (f64.const 1) (br 0 (i32.const 9)) (i64.eq) + ) + ) + (func (export "binary-after-br_table") (result i32) + (block (result i32) + (f32.const 0) (f64.const 1) (br_table 0 (i32.const 9) (i32.const 0)) + (i64.eq) + ) + ) + (func (export "binary-after-return") (result i32) + (f32.const 0) (f64.const 1) (return (i32.const 9)) (i64.eq) + ) + + (func (export "select-after-unreachable") (result i32) + (f32.const 0) (f64.const 1) (i64.const 0) (unreachable) (select) + ) + (func (export "select-after-br") (result i32) + (block (result i32) + (f32.const 0) (f64.const 1) (i64.const 0) (br 0 (i32.const 9)) (select) + ) + ) + (func (export "select-after-br_table") (result i32) + (block (result i32) + (f32.const 0) (f64.const 1) (i64.const 0) + (br_table 0 (i32.const 9) (i32.const 0)) + (select) + ) + ) + (func (export "select-after-return") (result i32) + (f32.const 0) (f64.const 1) (i64.const 1) (return (i32.const 9)) (select) + ) + + (func (export "block-value-after-unreachable") (result i32) + (block (result i32) (f32.const 0) (unreachable)) + ) + (func (export "block-value-after-br") (result i32) + (block (result i32) (f32.const 0) (br 0 (i32.const 9))) + ) + (func (export "block-value-after-br_table") (result i32) + (block (result i32) + (f32.const 0) (br_table 0 0 (i32.const 9) (i32.const 0)) + ) + ) + (func (export "block-value-after-return") (result i32) + (block (result i32) (f32.const 0) (return (i32.const 9))) + ) + + (func (export "loop-value-after-unreachable") (result i32) + (loop (result i32) (f32.const 0) (unreachable)) + ) + (func (export "loop-value-after-br") (result i32) + (block (result i32) (loop (result i32) (f32.const 0) (br 1 (i32.const 9)))) + ) + (func (export "loop-value-after-br_table") (result i32) + (block (result i32) + (loop (result i32) + (f32.const 0) (br_table 1 1 (i32.const 9) (i32.const 0)) + ) + ) + ) + (func (export "loop-value-after-return") (result i32) + (loop (result i32) (f32.const 0) (return (i32.const 9))) + ) +) + +(assert_trap (invoke "func-unwind-by-unreachable") "unreachable") +(assert_return (invoke "func-unwind-by-br")) +(assert_return (invoke "func-unwind-by-br-value") (i32.const 9)) +(assert_return (invoke "func-unwind-by-br_table")) +(assert_return (invoke "func-unwind-by-br_table-value") (i32.const 9)) +(assert_return (invoke "func-unwind-by-return") (i32.const 9)) + +(assert_trap (invoke "block-unwind-by-unreachable") "unreachable") +(assert_return (invoke "block-unwind-by-br") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br-value") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br_table") (i32.const 9)) +(assert_return (invoke "block-unwind-by-br_table-value") (i32.const 9)) +(assert_return (invoke "block-unwind-by-return") (i32.const 9)) + +(assert_trap (invoke "block-nested-unwind-by-unreachable") "unreachable") +(assert_return (invoke "block-nested-unwind-by-br") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br-value") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br_table") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-br_table-value") (i32.const 9)) +(assert_return (invoke "block-nested-unwind-by-return") (i32.const 9)) + +(assert_trap (invoke "unary-after-unreachable") "unreachable") +(assert_return (invoke "unary-after-br") (i32.const 9)) +(assert_return (invoke "unary-after-br_table") (i32.const 9)) +(assert_return (invoke "unary-after-return") (i32.const 9)) + +(assert_trap (invoke "binary-after-unreachable") "unreachable") +(assert_return (invoke "binary-after-br") (i32.const 9)) +(assert_return (invoke "binary-after-br_table") (i32.const 9)) +(assert_return (invoke "binary-after-return") (i32.const 9)) + +(assert_trap (invoke "select-after-unreachable") "unreachable") +(assert_return (invoke "select-after-br") (i32.const 9)) +(assert_return (invoke "select-after-br_table") (i32.const 9)) +(assert_return (invoke "select-after-return") (i32.const 9)) + +(assert_trap (invoke "block-value-after-unreachable") "unreachable") +(assert_return (invoke "block-value-after-br") (i32.const 9)) +(assert_return (invoke "block-value-after-br_table") (i32.const 9)) +(assert_return (invoke "block-value-after-return") (i32.const 9)) + +(assert_trap (invoke "loop-value-after-unreachable") "unreachable") +(assert_return (invoke "loop-value-after-br") (i32.const 9)) +(assert_return (invoke "loop-value-after-br_table") (i32.const 9)) +(assert_return (invoke "loop-value-after-return") (i32.const 9)) diff --git a/libraries/wasm-jit/Test/spec/utf8-custom-section-id.wast b/libraries/wasm-jit/Test/spec/utf8-custom-section-id.wast new file mode 100644 index 000000000..129d2b913 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/utf8-custom-section-id.wast @@ -0,0 +1,1792 @@ +;;;;;; Invalid UTF-8 custom section names + +;;;; Continuation bytes not preceded by prefixes + +;; encoding starts with (first) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\80" ;; "\80" + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x8f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\8f" ;; "\8f" + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x90) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\90" ;; "\90" + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x9f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\9f" ;; "\9f" + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0xa0) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\a0" ;; "\a0" + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (last) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\bf" ;; "\bf" + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequences + +;; 2-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\c2\80\80" ;; "\c2\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\c2" ;; "\c2" + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c2\2e" ;; "\c2." + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequence contents + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c0\80" ;; "\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c0\bf" ;; "\c0\bf" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c1\80" ;; "\c1\80" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c1\bf" ;; "\c1\bf" + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a contination byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c2\00" ;; "\c2\00" + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c2\7f" ;; "\c2\7f" + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c2\c0" ;; "\c2\c0" + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\c2\fd" ;; "\c2\fd" + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\df\00" ;; "\df\00" + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\df\7f" ;; "\df\7f" + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\df\c0" ;; "\df\c0" + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\df\fd" ;; "\df\fd" + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequences + +;; 3-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\e1\80\80\80" ;; "\e1\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\e1\80" ;; "\e1\80" + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\80\2e" ;; "\e1\80." + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\e1" ;; "\e1" + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\e1\2e" ;; "\e1." + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\00\a0" ;; "\e0\00\a0" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\7f\a0" ;; "\e0\7f\a0" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\80\80" ;; "\e0\80\80" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\80\a0" ;; "\e0\80\a0" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\9f\a0" ;; "\e0\9f\a0" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\9f\bf" ;; "\e0\9f\bf" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\c0\a0" ;; "\e0\c0\a0" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\fd\a0" ;; "\e0\fd\a0" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\00\80" ;; "\e1\00\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\7f\80" ;; "\e1\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\c0\80" ;; "\e1\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\fd\80" ;; "\e1\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\00\80" ;; "\ec\00\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\7f\80" ;; "\ec\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\c0\80" ;; "\ec\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\fd\80" ;; "\ec\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\00\80" ;; "\ed\00\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\7f\80" ;; "\ed\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\a0\80" ;; "\ed\a0\80" + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\a0\bf" ;; "\ed\a0\bf" + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\bf\80" ;; "\ed\bf\80" + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\bf\bf" ;; "\ed\bf\bf" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\c0\80" ;; "\ed\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\fd\80" ;; "\ed\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\00\80" ;; "\ee\00\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\7f\80" ;; "\ee\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\c0\80" ;; "\ee\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\fd\80" ;; "\ee\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\00\80" ;; "\ef\00\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\7f\80" ;; "\ef\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\c0\80" ;; "\ef\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\fd\80" ;; "\ef\fd\80" + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents (third byte) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\a0\00" ;; "\e0\a0\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\a0\7f" ;; "\e0\a0\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\a0\c0" ;; "\e0\a0\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e0\a0\fd" ;; "\e0\a0\fd" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\80\00" ;; "\e1\80\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\80\7f" ;; "\e1\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\80\c0" ;; "\e1\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\e1\80\fd" ;; "\e1\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\80\00" ;; "\ec\80\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\80\7f" ;; "\ec\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\80\c0" ;; "\ec\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ec\80\fd" ;; "\ec\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\80\00" ;; "\ed\80\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\80\7f" ;; "\ed\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\80\c0" ;; "\ed\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ed\80\fd" ;; "\ed\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\80\00" ;; "\ee\80\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\80\7f" ;; "\ee\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\80\c0" ;; "\ee\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ee\80\fd" ;; "\ee\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\80\00" ;; "\ef\80\00" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\80\7f" ;; "\ef\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\80\c0" ;; "\ef\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\ef\80\fd" ;; "\ef\80\fd" + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequences + +;; 4-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\f1\80\80" ;; "\f1\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\80\23" ;; "\f1\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\f1\80" ;; "\f1\80" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\f1\80\23" ;; "\f1\80#" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\f1" ;; "\f1" + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\f1\23" ;; "\f1#" + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\00\90\90" ;; "\f0\00\90\90" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\7f\90\90" ;; "\f0\7f\90\90" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\80\80\80" ;; "\f0\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\80\90\90" ;; "\f0\80\90\90" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\8f\90\90" ;; "\f0\8f\90\90" + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\c0\90\90" ;; "\f0\c0\90\90" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\fd\90\90" ;; "\f0\fd\90\90" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\00\80\80" ;; "\f1\00\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\7f\80\80" ;; "\f1\7f\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\c0\80\80" ;; "\f1\c0\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\fd\80\80" ;; "\f1\fd\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\00\80\80" ;; "\f3\00\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\7f\80\80" ;; "\f3\7f\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\c0\80\80" ;; "\f3\c0\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\fd\80\80" ;; "\f3\fd\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\00\80\80" ;; "\f4\00\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\7f\80\80" ;; "\f4\7f\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\90\80\80" ;; "\f4\90\80\80" + ) + "invalid UTF-8 encoding" +) + +;; invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\bf\80\80" ;; "\f4\bf\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\c0\80\80" ;; "\f4\c0\80\80" + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\fd\80\80" ;; "\f4\fd\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f5\80\80\80" ;; "\f5\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f7\80\80\80" ;; "\f7\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (third byte) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\00\90" ;; "\f0\90\00\90" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\7f\90" ;; "\f0\90\7f\90" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\c0\90" ;; "\f0\90\c0\90" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\fd\90" ;; "\f0\90\fd\90" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\00\80" ;; "\f1\80\00\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\7f\80" ;; "\f1\80\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\c0\80" ;; "\f1\80\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\fd\80" ;; "\f1\80\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\00\80" ;; "\f3\80\00\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\7f\80" ;; "\f3\80\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\c0\80" ;; "\f3\80\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\fd\80" ;; "\f3\80\fd\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\00\80" ;; "\f4\80\00\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\7f\80" ;; "\f4\80\7f\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\c0\80" ;; "\f4\80\c0\80" + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\fd\80" ;; "\f4\80\fd\80" + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (fourth byte) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\90\00" ;; "\f0\90\90\00" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\90\7f" ;; "\f0\90\90\7f" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\90\c0" ;; "\f0\90\90\c0" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f0\90\90\fd" ;; "\f0\90\90\fd" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\80\00" ;; "\f1\80\80\00" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\80\7f" ;; "\f1\80\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\80\c0" ;; "\f1\80\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f1\80\80\fd" ;; "\f1\80\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\80\00" ;; "\f3\80\80\00" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\80\7f" ;; "\f3\80\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\80\c0" ;; "\f3\80\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f3\80\80\fd" ;; "\f3\80\80\fd" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\80\00" ;; "\f4\80\80\00" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\80\7f" ;; "\f4\80\80\7f" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\80\c0" ;; "\f4\80\80\c0" + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f4\80\80\fd" ;; "\f4\80\80\fd" + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequences + +;; 5-byte sequence contains 6 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\07" ;; custom section + "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f8\80\80\80" ;; "\f8\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\f8\80\80" ;; "\f8\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\f8\80\80\23" ;; "\f8\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\f8\80" ;; "\f8\80" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\f8\80\23" ;; "\f8\80#" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\f8" ;; "\f8" + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\f8\23" ;; "\f8#" + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequence contents + +;; (first) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequences + +;; 6-byte sequence contains 7 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\08" ;; custom section + "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\07" ;; custom section + "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\fc\80\80\80" ;; "\fc\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\06" ;; custom section + "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\fc\80\80" ;; "\fc\80\80" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\fc\80\80\23" ;; "\fc\80\80#" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\fc\80" ;; "\fc\80" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\04" ;; custom section + "\03\fc\80\23" ;; "\fc\80#" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\fc" ;; "\fc" + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\fc\23" ;; "\fc#" + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequence contents + +;; (first) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\07" ;; custom section + "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\07" ;; custom section + "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" + ) + "invalid UTF-8 encoding" +) + +;;;; Miscellaneous invalid bytes + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\fe" ;; "\fe" + ) + "invalid UTF-8 encoding" +) + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\02" ;; custom section + "\01\ff" ;; "\ff" + ) + "invalid UTF-8 encoding" +) + +;; UTF-16BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\fe\ff" ;; "\fe\ff" + ) + "invalid UTF-8 encoding" +) + +;; UTF-32BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\00\00\fe\ff" ;; "\00\00\fe\ff" + ) + "invalid UTF-8 encoding" +) + +;; UTF-16LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\03" ;; custom section + "\02\ff\fe" ;; "\ff\fe" + ) + "invalid UTF-8 encoding" +) + +;; UTF-32LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\00\05" ;; custom section + "\04\ff\fe\00\00" ;; "\ff\fe\00\00" + ) + "invalid UTF-8 encoding" +) + diff --git a/libraries/wasm-jit/Test/spec/utf8-import-field.wast b/libraries/wasm-jit/Test/spec/utf8-import-field.wast new file mode 100644 index 000000000..1ff2aa030 --- /dev/null +++ b/libraries/wasm-jit/Test/spec/utf8-import-field.wast @@ -0,0 +1,2672 @@ +;;;;;; Invalid UTF-8 import field names + +;;;; Continuation bytes not preceded by prefixes + +;; encoding starts with (first) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\80" ;; "\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x8f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\8f" ;; "\8f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x90) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\90" ;; "\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x9f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\9f" ;; "\9f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0xa0) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\a0" ;; "\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (last) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\bf" ;; "\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequences + +;; 2-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\c2\80\80" ;; "\c2\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\c2" ;; "\c2" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c2\2e" ;; "\c2." + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequence contents + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c0\80" ;; "\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c0\bf" ;; "\c0\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c1\80" ;; "\c1\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c1\bf" ;; "\c1\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a contination byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c2\00" ;; "\c2\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c2\7f" ;; "\c2\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c2\c0" ;; "\c2\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\c2\fd" ;; "\c2\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\df\00" ;; "\df\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\df\7f" ;; "\df\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\df\c0" ;; "\df\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\df\fd" ;; "\df\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequences + +;; 3-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\e1\80\80\80" ;; "\e1\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\e1\80" ;; "\e1\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\80\2e" ;; "\e1\80." + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\e1" ;; "\e1" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\e1\2e" ;; "\e1." + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\00\a0" ;; "\e0\00\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\7f\a0" ;; "\e0\7f\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\80\80" ;; "\e0\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\80\a0" ;; "\e0\80\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\9f\a0" ;; "\e0\9f\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\9f\bf" ;; "\e0\9f\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\c0\a0" ;; "\e0\c0\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\fd\a0" ;; "\e0\fd\a0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\00\80" ;; "\e1\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\7f\80" ;; "\e1\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\c0\80" ;; "\e1\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\fd\80" ;; "\e1\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\00\80" ;; "\ec\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\7f\80" ;; "\ec\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\c0\80" ;; "\ec\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\fd\80" ;; "\ec\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\00\80" ;; "\ed\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\7f\80" ;; "\ed\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\a0\80" ;; "\ed\a0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\a0\bf" ;; "\ed\a0\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\bf\80" ;; "\ed\bf\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\bf\bf" ;; "\ed\bf\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\c0\80" ;; "\ed\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\fd\80" ;; "\ed\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\00\80" ;; "\ee\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\7f\80" ;; "\ee\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\c0\80" ;; "\ee\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\fd\80" ;; "\ee\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\00\80" ;; "\ef\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\7f\80" ;; "\ef\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\c0\80" ;; "\ef\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\fd\80" ;; "\ef\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents (third byte) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\a0\00" ;; "\e0\a0\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\a0\7f" ;; "\e0\a0\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\a0\c0" ;; "\e0\a0\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e0\a0\fd" ;; "\e0\a0\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\80\00" ;; "\e1\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\80\7f" ;; "\e1\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\80\c0" ;; "\e1\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\e1\80\fd" ;; "\e1\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\80\00" ;; "\ec\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\80\7f" ;; "\ec\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\80\c0" ;; "\ec\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ec\80\fd" ;; "\ec\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\80\00" ;; "\ed\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\80\7f" ;; "\ed\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\80\c0" ;; "\ed\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ed\80\fd" ;; "\ed\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\80\00" ;; "\ee\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\80\7f" ;; "\ee\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\80\c0" ;; "\ee\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ee\80\fd" ;; "\ee\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\80\00" ;; "\ef\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\80\7f" ;; "\ef\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\80\c0" ;; "\ef\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\ef\80\fd" ;; "\ef\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequences + +;; 4-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\f1\80\80" ;; "\f1\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\80\23" ;; "\f1\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\f1\80" ;; "\f1\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\f1\80\23" ;; "\f1\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\f1" ;; "\f1" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\f1\23" ;; "\f1#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\00\90\90" ;; "\f0\00\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\7f\90\90" ;; "\f0\7f\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\80\80\80" ;; "\f0\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\80\90\90" ;; "\f0\80\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\8f\90\90" ;; "\f0\8f\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\c0\90\90" ;; "\f0\c0\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\fd\90\90" ;; "\f0\fd\90\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\00\80\80" ;; "\f1\00\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\7f\80\80" ;; "\f1\7f\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\c0\80\80" ;; "\f1\c0\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\fd\80\80" ;; "\f1\fd\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\00\80\80" ;; "\f3\00\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\7f\80\80" ;; "\f3\7f\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\c0\80\80" ;; "\f3\c0\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\fd\80\80" ;; "\f3\fd\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\00\80\80" ;; "\f4\00\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\7f\80\80" ;; "\f4\7f\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\90\80\80" ;; "\f4\90\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\bf\80\80" ;; "\f4\bf\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\c0\80\80" ;; "\f4\c0\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\fd\80\80" ;; "\f4\fd\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f5\80\80\80" ;; "\f5\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f7\80\80\80" ;; "\f7\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (third byte) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\00\90" ;; "\f0\90\00\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\7f\90" ;; "\f0\90\7f\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\c0\90" ;; "\f0\90\c0\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\fd\90" ;; "\f0\90\fd\90" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\00\80" ;; "\f1\80\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\7f\80" ;; "\f1\80\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\c0\80" ;; "\f1\80\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\fd\80" ;; "\f1\80\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\00\80" ;; "\f3\80\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\7f\80" ;; "\f3\80\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\c0\80" ;; "\f3\80\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\fd\80" ;; "\f3\80\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\00\80" ;; "\f4\80\00\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\7f\80" ;; "\f4\80\7f\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\c0\80" ;; "\f4\80\c0\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\fd\80" ;; "\f4\80\fd\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (fourth byte) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\90\00" ;; "\f0\90\90\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\90\7f" ;; "\f0\90\90\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\90\c0" ;; "\f0\90\90\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f0\90\90\fd" ;; "\f0\90\90\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\80\00" ;; "\f1\80\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\80\7f" ;; "\f1\80\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\80\c0" ;; "\f1\80\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f1\80\80\fd" ;; "\f1\80\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\80\00" ;; "\f3\80\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\80\7f" ;; "\f3\80\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\80\c0" ;; "\f3\80\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f3\80\80\fd" ;; "\f3\80\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\80\00" ;; "\f4\80\80\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\80\7f" ;; "\f4\80\80\7f" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\80\c0" ;; "\f4\80\80\c0" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f4\80\80\fd" ;; "\f4\80\80\fd" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequences + +;; 5-byte sequence contains 6 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f8\80\80\80" ;; "\f8\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\f8\80\80" ;; "\f8\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\f8\80\80\23" ;; "\f8\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\f8\80" ;; "\f8\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\f8\80\23" ;; "\f8\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\f8" ;; "\f8" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\f8\23" ;; "\f8#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequence contents + +;; (first) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequences + +;; 6-byte sequence contains 7 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\11" ;; import section + "\01" ;; length 1 + "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\fc\80\80\80" ;; "\fc\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\fc\80\80" ;; "\fc\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\fc\80\80\23" ;; "\fc\80\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\fc\80" ;; "\fc\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\03\fc\80\23" ;; "\fc\80#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\fc" ;; "\fc" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\fc\23" ;; "\fc#" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequence contents + +;; (first) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; Miscellaneous invalid bytes + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\fe" ;; "\fe" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\01\ff" ;; "\ff" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-16BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\fe\ff" ;; "\fe\ff" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-32BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\00\00\fe\ff" ;; "\00\00\fe\ff" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-16LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\02\ff\fe" ;; "\ff\fe" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-32LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\ff\fe\00\00" ;; "\ff\fe\00\00" + "\04\74\65\73\74" ;; "test" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + diff --git a/libraries/wasm-jit/Test/spec/utf8-import-module.wast b/libraries/wasm-jit/Test/spec/utf8-import-module.wast new file mode 100644 index 000000000..ceabbeb7c --- /dev/null +++ b/libraries/wasm-jit/Test/spec/utf8-import-module.wast @@ -0,0 +1,2672 @@ +;;;;;; Invalid UTF-8 import module names + +;;;; Continuation bytes not preceded by prefixes + +;; encoding starts with (first) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\80" ;; "\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x8f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\8f" ;; "\8f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x90) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\90" ;; "\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0x9f) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\9f" ;; "\9f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (0xa0) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\a0" ;; "\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; encoding starts with (last) continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\bf" ;; "\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequences + +;; 2-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\c2\80\80" ;; "\c2\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\c2" ;; "\c2" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 2-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c2\2e" ;; "\c2." + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 2-byte sequence contents + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c0\80" ;; "\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c0\bf" ;; "\c0\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c1\80" ;; "\c1\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xc1 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c1\bf" ;; "\c1\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a contination byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c2\00" ;; "\c2\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c2\7f" ;; "\c2\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c2\c0" ;; "\c2\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (first) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\c2\fd" ;; "\c2\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\df\00" ;; "\df\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\df\7f" ;; "\df\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\df\c0" ;; "\df\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte after (last) 2-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\df\fd" ;; "\df\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequences + +;; 3-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\e1\80\80\80" ;; "\e1\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\e1\80" ;; "\e1\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\80\2e" ;; "\e1\80." + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\e1" ;; "\e1" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 3-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\e1\2e" ;; "\e1." + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\00\a0" ;; "\e0\00\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\7f\a0" ;; "\e0\7f\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\80\80" ;; "\e0\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\80\a0" ;; "\e0\80\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\9f\a0" ;; "\e0\9f\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xe0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\9f\bf" ;; "\e0\9f\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\c0\a0" ;; "\e0\c0\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\fd\a0" ;; "\e0\fd\a0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\00\80" ;; "\e1\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\7f\80" ;; "\e1\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\c0\80" ;; "\e1\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\fd\80" ;; "\e1\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\00\80" ;; "\ec\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\7f\80" ;; "\ec\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\c0\80" ;; "\ec\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\fd\80" ;; "\ec\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\00\80" ;; "\ed\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\7f\80" ;; "\ed\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\a0\80" ;; "\ed\a0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\a0\bf" ;; "\ed\a0\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\bf\80" ;; "\ed\bf\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; byte sequence reserved for UTF-16 surrogate half +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\bf\bf" ;; "\ed\bf\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\c0\80" ;; "\ed\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\fd\80" ;; "\ed\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\00\80" ;; "\ee\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\7f\80" ;; "\ee\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\c0\80" ;; "\ee\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\fd\80" ;; "\ee\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\00\80" ;; "\ef\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\7f\80" ;; "\ef\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\c0\80" ;; "\ef\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\fd\80" ;; "\ef\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 3-byte sequence contents (third byte) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\a0\00" ;; "\e0\a0\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\a0\7f" ;; "\e0\a0\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\a0\c0" ;; "\e0\a0\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xe0) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e0\a0\fd" ;; "\e0\a0\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\80\00" ;; "\e1\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\80\7f" ;; "\e1\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\80\c0" ;; "\e1\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\e1\80\fd" ;; "\e1\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\80\00" ;; "\ec\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\80\7f" ;; "\ec\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\80\c0" ;; "\ec\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ec\80\fd" ;; "\ec\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\80\00" ;; "\ed\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\80\7f" ;; "\ed\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\80\c0" ;; "\ed\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xed) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ed\80\fd" ;; "\ed\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\80\00" ;; "\ee\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\80\7f" ;; "\ee\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\80\c0" ;; "\ee\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ee\80\fd" ;; "\ee\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\80\00" ;; "\ef\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\80\7f" ;; "\ef\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\80\c0" ;; "\ef\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 3-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\ef\80\fd" ;; "\ef\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequences + +;; 4-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\f1\80\80\80\80" ;; "\f1\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\f1\80\80" ;; "\f1\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\80\23" ;; "\f1\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\f1\80" ;; "\f1\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\f1\80\23" ;; "\f1\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\f1" ;; "\f1" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 4-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\f1\23" ;; "\f1#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\00\90\90" ;; "\f0\00\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\7f\90\90" ;; "\f0\7f\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\80\80\80" ;; "\f0\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\80\90\90" ;; "\f0\80\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\8f\90\90" ;; "\f0\8f\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; overlong encoding after 0xf0 prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\8f\bf\bf" ;; "\f0\8f\bf\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\c0\90\90" ;; "\f0\c0\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\fd\90\90" ;; "\f0\fd\90\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\00\80\80" ;; "\f1\00\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\7f\80\80" ;; "\f1\7f\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\c0\80\80" ;; "\f1\c0\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\fd\80\80" ;; "\f1\fd\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\00\80\80" ;; "\f3\00\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\7f\80\80" ;; "\f3\7f\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\c0\80\80" ;; "\f3\c0\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\fd\80\80" ;; "\f3\fd\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\00\80\80" ;; "\f4\00\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\7f\80\80" ;; "\f4\7f\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\90\80\80" ;; "\f4\90\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; invalid code point +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\bf\80\80" ;; "\f4\bf\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\c0\80\80" ;; "\f4\c0\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; first byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\fd\80\80" ;; "\f4\fd\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (first) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f5\80\80\80" ;; "\f5\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f7\80\80\80" ;; "\f7\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 4-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f7\bf\bf\bf" ;; "\f7\bf\bf\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (third byte) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\00\90" ;; "\f0\90\00\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\7f\90" ;; "\f0\90\7f\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\c0\90" ;; "\f0\90\c0\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\fd\90" ;; "\f0\90\fd\90" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\00\80" ;; "\f1\80\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\7f\80" ;; "\f1\80\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\c0\80" ;; "\f1\80\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\fd\80" ;; "\f1\80\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\00\80" ;; "\f3\80\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\7f\80" ;; "\f3\80\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\c0\80" ;; "\f3\80\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\fd\80" ;; "\f3\80\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\00\80" ;; "\f4\80\00\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\7f\80" ;; "\f4\80\7f\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\c0\80" ;; "\f4\80\c0\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; second byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\fd\80" ;; "\f4\80\fd\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 4-byte sequence contents (fourth byte) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\90\00" ;; "\f0\90\90\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\90\7f" ;; "\f0\90\90\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\90\c0" ;; "\f0\90\90\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf0) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f0\90\90\fd" ;; "\f0\90\90\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\80\00" ;; "\f1\80\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\80\7f" ;; "\f1\80\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\80\c0" ;; "\f1\80\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (first normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f1\80\80\fd" ;; "\f1\80\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\80\00" ;; "\f3\80\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\80\7f" ;; "\f3\80\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\80\c0" ;; "\f3\80\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (last normal) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f3\80\80\fd" ;; "\f3\80\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\80\00" ;; "\f4\80\80\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\80\7f" ;; "\f4\80\80\7f" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\80\c0" ;; "\f4\80\80\c0" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; third byte after (0xf4) 4-byte prefix not a continuation byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f4\80\80\fd" ;; "\f4\80\80\fd" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequences + +;; 5-byte sequence contains 6 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\06\f8\80\80\80\80\80" ;; "\f8\80\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f8\80\80\80" ;; "\f8\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\f8\80\80\80\23" ;; "\f8\80\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\f8\80\80" ;; "\f8\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\f8\80\80\23" ;; "\f8\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\f8\80" ;; "\f8\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\f8\80\23" ;; "\f8\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\f8" ;; "\f8" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 5-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\f8\23" ;; "\f8#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 5-byte sequence contents + +;; (first) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\f8\80\80\80\80" ;; "\f8\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 5-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\fb\bf\bf\bf\bf" ;; "\fb\bf\bf\bf\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequences + +;; 6-byte sequence contains 7 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\11" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\07\fc\80\80\80\80\80\80" ;; "\fc\80\80\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\fc\80\80\80\80" ;; "\fc\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 5 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\06\fc\80\80\80\80\23" ;; "\fc\80\80\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\fc\80\80\80" ;; "\fc\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 4 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0f" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\05\fc\80\80\80\23" ;; "\fc\80\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\fc\80\80" ;; "\fc\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 3 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\fc\80\80\23" ;; "\fc\80\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\fc\80" ;; "\fc\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 2 bytes +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0d" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\03\fc\80\23" ;; "\fc\80#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte at end of string +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\fc" ;; "\fc" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; 6-byte sequence contains 1 byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\fc\23" ;; "\fc#" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; 6-byte sequence contents + +;; (first) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\06\fc\80\80\80\80\80" ;; "\fc\80\80\80\80\80" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; (last) invalid 6-byte prefix +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\10" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\06\fd\bf\bf\bf\bf\bf" ;; "\fd\bf\bf\bf\bf\bf" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;;;; Miscellaneous invalid bytes + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\fe" ;; "\fe" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; invalid byte +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0b" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\01\ff" ;; "\ff" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-16BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\fe\ff" ;; "\fe\ff" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-32BE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\00\00\fe\ff" ;; "\00\00\fe\ff" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-16LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0c" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\02\ff\fe" ;; "\ff\fe" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + +;; UTF-32LE BOM +(assert_malformed + (module binary + "\00asm" "\01\00\00\00" + "\02\0e" ;; import section + "\01" ;; length 1 + "\04\74\65\73\74" ;; "test" + "\04\ff\fe\00\00" ;; "\ff\fe\00\00" + "\03" ;; GlobalImport + "\7f" ;; i32 + "\00" ;; immutable + ) + "invalid UTF-8 encoding" +) + diff --git a/libraries/wasm-jit/Test/wast/echo.wast b/libraries/wasm-jit/Test/wast/echo.wast new file mode 100644 index 000000000..b7e5f9bc4 --- /dev/null +++ b/libraries/wasm-jit/Test/wast/echo.wast @@ -0,0 +1,63 @@ +;; Classic Unix echo program in WebAssembly WASM AST + +(module + (data (i32.const 8) "\n\00") + (data (i32.const 12) " \00") + + (import "env" "memory" (memory 1)) + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdout" (global $stdoutPtr i32)) + (export "main" (func $main)) + + (func $strlen (param $s i32) (result i32) + (local $head i32) + (set_local $head (get_local $s)) + (loop $loop + (block $done + (br_if $done (i32.eq (i32.const 0) (i32.load8_u offset=0 (get_local $head)))) + (set_local $head (i32.add (get_local $head) (i32.const 1))) + ;; Would it be worth unrolling offset 1,2,3? + (br $loop) + ) + ) + (return (i32.sub (get_local $head) (get_local $s))) + ) + + (func $fputs (param $s i32) (param $stream i32) (result i32) + (local $len i32) + (set_local $len (call $strlen (get_local $s))) + (return (call $__fwrite + (get_local $s) ;; ptr + (i32.const 1) ;; size_t size => Data size + (get_local $len) ;; size_t nmemb => Length of our string + (get_local $stream))) ;; stream + ) + + (func $main (param $argc i32) (param $argv i32) (result i32) + (local $stdout i32) + (local $s i32) + (local $space i32) + (set_local $space (i32.const 0)) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + + (loop $loop + (block $done + (set_local $argv (i32.add (get_local $argv) (i32.const 4))) + (set_local $s (i32.load (get_local $argv))) + (br_if $done (i32.eq (i32.const 0) (get_local $s))) + + (if (i32.eq (i32.const 1) (get_local $space)) + (drop (call $fputs (i32.const 12) (get_local $stdout))) ;; ' ' + ) + (set_local $space (i32.const 1)) + + (drop (call $fputs (get_local $s) (get_local $stdout))) + (br $loop) + ) + ) + + (drop (call $fputs (i32.const 8) (get_local $stdout))) ;; \n + + (return (i32.const 0)) + ) +) diff --git a/libraries/wasm-jit/Test/wast/helloworld.wast b/libraries/wasm-jit/Test/wast/helloworld.wast new file mode 100644 index 000000000..8095e6a1e --- /dev/null +++ b/libraries/wasm-jit/Test/wast/helloworld.wast @@ -0,0 +1,24 @@ +;; WebAssembly WASM AST Hello World! program + +(module + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdout" (global $stdoutPtr i32)) + (import "env" "memory" (memory 1)) + (export "main" (func $main)) + + (data (i32.const 8) "Hello World!\n") + + (func (export "establishStackSpace") (param i32 i32) (nop)) + + (func $main (result i32) + (local $stdout i32) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + + (return (call $__fwrite + (i32.const 8) ;; void *ptr => Address of our string + (i32.const 1) ;; size_t size => Data size + (i32.const 13) ;; size_t nmemb => Length of our string + (get_local $stdout)) ;; stream + ) + ) +) diff --git a/libraries/wasm-jit/Test/wast/skip-stack-guard-page.wast b/libraries/wasm-jit/Test/wast/skip-stack-guard-page.wast new file mode 100644 index 000000000..95b4c3654 --- /dev/null +++ b/libraries/wasm-jit/Test/wast/skip-stack-guard-page.wast @@ -0,0 +1,2180 @@ +;; This tests that the stack overflow guard page can't be skipped by a function with more than a page of locals. +(module + (memory 1) + (export "test-guard-page-skip" (func $test-guard-page-skip)) + + (func $test-guard-page-skip + (param $depth i32) + (if (i32.eq (get_local $depth) (i32.const 0)) + (then (call $function-with-many-locals)) + (else (call $test-guard-page-skip (i32.sub (get_local $depth) (i32.const 1)))) + ) + ) + + (func $function-with-many-locals + + ;; 1056 i64 = 8448 bytes of locals + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x000-0x01f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x020-0x03f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x040-0x05f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x060-0x07f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x080-0x09f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0a0-0x0bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0c0-0x0df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x0e0-0x0ff + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x100-0x11f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x120-0x13f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x140-0x15f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x160-0x17f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x180-0x19f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1a0-0x1bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1c0-0x1df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x1e0-0x1ff + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x200-0x21f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x220-0x23f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x240-0x25f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x260-0x27f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x280-0x29f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2a0-0x2bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2c0-0x2df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x2e0-0x2ff + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x300-0x31f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x320-0x33f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x340-0x35f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x360-0x37f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x380-0x39f + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3a0-0x3bf + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3c0-0x3df + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x3e0-0x3ff + (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) (local i64) ;; 0x400-0x41f + + ;; recurse first to try to make the callee access the stack below the space allocated for the locals before the locals themselves have been initialized. + (call $function-with-many-locals) + + ;; load from memory into the locals + (set_local 0x000 (i64.load offset=0x000 align=1 (i32.const 0))) + (set_local 0x001 (i64.load offset=0x001 align=1 (i32.const 0))) + (set_local 0x002 (i64.load offset=0x002 align=1 (i32.const 0))) + (set_local 0x003 (i64.load offset=0x003 align=1 (i32.const 0))) + (set_local 0x004 (i64.load offset=0x004 align=1 (i32.const 0))) + (set_local 0x005 (i64.load offset=0x005 align=1 (i32.const 0))) + (set_local 0x006 (i64.load offset=0x006 align=1 (i32.const 0))) + (set_local 0x007 (i64.load offset=0x007 align=1 (i32.const 0))) + (set_local 0x008 (i64.load offset=0x008 align=1 (i32.const 0))) + (set_local 0x009 (i64.load offset=0x009 align=1 (i32.const 0))) + (set_local 0x00a (i64.load offset=0x00a align=1 (i32.const 0))) + (set_local 0x00b (i64.load offset=0x00b align=1 (i32.const 0))) + (set_local 0x00c (i64.load offset=0x00c align=1 (i32.const 0))) + (set_local 0x00d (i64.load offset=0x00d align=1 (i32.const 0))) + (set_local 0x00e (i64.load offset=0x00e align=1 (i32.const 0))) + (set_local 0x00f (i64.load offset=0x00f align=1 (i32.const 0))) + (set_local 0x010 (i64.load offset=0x010 align=1 (i32.const 0))) + (set_local 0x011 (i64.load offset=0x011 align=1 (i32.const 0))) + (set_local 0x012 (i64.load offset=0x012 align=1 (i32.const 0))) + (set_local 0x013 (i64.load offset=0x013 align=1 (i32.const 0))) + (set_local 0x014 (i64.load offset=0x014 align=1 (i32.const 0))) + (set_local 0x015 (i64.load offset=0x015 align=1 (i32.const 0))) + (set_local 0x016 (i64.load offset=0x016 align=1 (i32.const 0))) + (set_local 0x017 (i64.load offset=0x017 align=1 (i32.const 0))) + (set_local 0x018 (i64.load offset=0x018 align=1 (i32.const 0))) + (set_local 0x019 (i64.load offset=0x019 align=1 (i32.const 0))) + (set_local 0x01a (i64.load offset=0x01a align=1 (i32.const 0))) + (set_local 0x01b (i64.load offset=0x01b align=1 (i32.const 0))) + (set_local 0x01c (i64.load offset=0x01c align=1 (i32.const 0))) + (set_local 0x01d (i64.load offset=0x01d align=1 (i32.const 0))) + (set_local 0x01e (i64.load offset=0x01e align=1 (i32.const 0))) + (set_local 0x01f (i64.load offset=0x01f align=1 (i32.const 0))) + (set_local 0x020 (i64.load offset=0x020 align=1 (i32.const 0))) + (set_local 0x021 (i64.load offset=0x021 align=1 (i32.const 0))) + (set_local 0x022 (i64.load offset=0x022 align=1 (i32.const 0))) + (set_local 0x023 (i64.load offset=0x023 align=1 (i32.const 0))) + (set_local 0x024 (i64.load offset=0x024 align=1 (i32.const 0))) + (set_local 0x025 (i64.load offset=0x025 align=1 (i32.const 0))) + (set_local 0x026 (i64.load offset=0x026 align=1 (i32.const 0))) + (set_local 0x027 (i64.load offset=0x027 align=1 (i32.const 0))) + (set_local 0x028 (i64.load offset=0x028 align=1 (i32.const 0))) + (set_local 0x029 (i64.load offset=0x029 align=1 (i32.const 0))) + (set_local 0x02a (i64.load offset=0x02a align=1 (i32.const 0))) + (set_local 0x02b (i64.load offset=0x02b align=1 (i32.const 0))) + (set_local 0x02c (i64.load offset=0x02c align=1 (i32.const 0))) + (set_local 0x02d (i64.load offset=0x02d align=1 (i32.const 0))) + (set_local 0x02e (i64.load offset=0x02e align=1 (i32.const 0))) + (set_local 0x02f (i64.load offset=0x02f align=1 (i32.const 0))) + (set_local 0x030 (i64.load offset=0x030 align=1 (i32.const 0))) + (set_local 0x031 (i64.load offset=0x031 align=1 (i32.const 0))) + (set_local 0x032 (i64.load offset=0x032 align=1 (i32.const 0))) + (set_local 0x033 (i64.load offset=0x033 align=1 (i32.const 0))) + (set_local 0x034 (i64.load offset=0x034 align=1 (i32.const 0))) + (set_local 0x035 (i64.load offset=0x035 align=1 (i32.const 0))) + (set_local 0x036 (i64.load offset=0x036 align=1 (i32.const 0))) + (set_local 0x037 (i64.load offset=0x037 align=1 (i32.const 0))) + (set_local 0x038 (i64.load offset=0x038 align=1 (i32.const 0))) + (set_local 0x039 (i64.load offset=0x039 align=1 (i32.const 0))) + (set_local 0x03a (i64.load offset=0x03a align=1 (i32.const 0))) + (set_local 0x03b (i64.load offset=0x03b align=1 (i32.const 0))) + (set_local 0x03c (i64.load offset=0x03c align=1 (i32.const 0))) + (set_local 0x03d (i64.load offset=0x03d align=1 (i32.const 0))) + (set_local 0x03e (i64.load offset=0x03e align=1 (i32.const 0))) + (set_local 0x03f (i64.load offset=0x03f align=1 (i32.const 0))) + (set_local 0x040 (i64.load offset=0x040 align=1 (i32.const 0))) + (set_local 0x041 (i64.load offset=0x041 align=1 (i32.const 0))) + (set_local 0x042 (i64.load offset=0x042 align=1 (i32.const 0))) + (set_local 0x043 (i64.load offset=0x043 align=1 (i32.const 0))) + (set_local 0x044 (i64.load offset=0x044 align=1 (i32.const 0))) + (set_local 0x045 (i64.load offset=0x045 align=1 (i32.const 0))) + (set_local 0x046 (i64.load offset=0x046 align=1 (i32.const 0))) + (set_local 0x047 (i64.load offset=0x047 align=1 (i32.const 0))) + (set_local 0x048 (i64.load offset=0x048 align=1 (i32.const 0))) + (set_local 0x049 (i64.load offset=0x049 align=1 (i32.const 0))) + (set_local 0x04a (i64.load offset=0x04a align=1 (i32.const 0))) + (set_local 0x04b (i64.load offset=0x04b align=1 (i32.const 0))) + (set_local 0x04c (i64.load offset=0x04c align=1 (i32.const 0))) + (set_local 0x04d (i64.load offset=0x04d align=1 (i32.const 0))) + (set_local 0x04e (i64.load offset=0x04e align=1 (i32.const 0))) + (set_local 0x04f (i64.load offset=0x04f align=1 (i32.const 0))) + (set_local 0x050 (i64.load offset=0x050 align=1 (i32.const 0))) + (set_local 0x051 (i64.load offset=0x051 align=1 (i32.const 0))) + (set_local 0x052 (i64.load offset=0x052 align=1 (i32.const 0))) + (set_local 0x053 (i64.load offset=0x053 align=1 (i32.const 0))) + (set_local 0x054 (i64.load offset=0x054 align=1 (i32.const 0))) + (set_local 0x055 (i64.load offset=0x055 align=1 (i32.const 0))) + (set_local 0x056 (i64.load offset=0x056 align=1 (i32.const 0))) + (set_local 0x057 (i64.load offset=0x057 align=1 (i32.const 0))) + (set_local 0x058 (i64.load offset=0x058 align=1 (i32.const 0))) + (set_local 0x059 (i64.load offset=0x059 align=1 (i32.const 0))) + (set_local 0x05a (i64.load offset=0x05a align=1 (i32.const 0))) + (set_local 0x05b (i64.load offset=0x05b align=1 (i32.const 0))) + (set_local 0x05c (i64.load offset=0x05c align=1 (i32.const 0))) + (set_local 0x05d (i64.load offset=0x05d align=1 (i32.const 0))) + (set_local 0x05e (i64.load offset=0x05e align=1 (i32.const 0))) + (set_local 0x05f (i64.load offset=0x05f align=1 (i32.const 0))) + (set_local 0x060 (i64.load offset=0x060 align=1 (i32.const 0))) + (set_local 0x061 (i64.load offset=0x061 align=1 (i32.const 0))) + (set_local 0x062 (i64.load offset=0x062 align=1 (i32.const 0))) + (set_local 0x063 (i64.load offset=0x063 align=1 (i32.const 0))) + (set_local 0x064 (i64.load offset=0x064 align=1 (i32.const 0))) + (set_local 0x065 (i64.load offset=0x065 align=1 (i32.const 0))) + (set_local 0x066 (i64.load offset=0x066 align=1 (i32.const 0))) + (set_local 0x067 (i64.load offset=0x067 align=1 (i32.const 0))) + (set_local 0x068 (i64.load offset=0x068 align=1 (i32.const 0))) + (set_local 0x069 (i64.load offset=0x069 align=1 (i32.const 0))) + (set_local 0x06a (i64.load offset=0x06a align=1 (i32.const 0))) + (set_local 0x06b (i64.load offset=0x06b align=1 (i32.const 0))) + (set_local 0x06c (i64.load offset=0x06c align=1 (i32.const 0))) + (set_local 0x06d (i64.load offset=0x06d align=1 (i32.const 0))) + (set_local 0x06e (i64.load offset=0x06e align=1 (i32.const 0))) + (set_local 0x06f (i64.load offset=0x06f align=1 (i32.const 0))) + (set_local 0x070 (i64.load offset=0x070 align=1 (i32.const 0))) + (set_local 0x071 (i64.load offset=0x071 align=1 (i32.const 0))) + (set_local 0x072 (i64.load offset=0x072 align=1 (i32.const 0))) + (set_local 0x073 (i64.load offset=0x073 align=1 (i32.const 0))) + (set_local 0x074 (i64.load offset=0x074 align=1 (i32.const 0))) + (set_local 0x075 (i64.load offset=0x075 align=1 (i32.const 0))) + (set_local 0x076 (i64.load offset=0x076 align=1 (i32.const 0))) + (set_local 0x077 (i64.load offset=0x077 align=1 (i32.const 0))) + (set_local 0x078 (i64.load offset=0x078 align=1 (i32.const 0))) + (set_local 0x079 (i64.load offset=0x079 align=1 (i32.const 0))) + (set_local 0x07a (i64.load offset=0x07a align=1 (i32.const 0))) + (set_local 0x07b (i64.load offset=0x07b align=1 (i32.const 0))) + (set_local 0x07c (i64.load offset=0x07c align=1 (i32.const 0))) + (set_local 0x07d (i64.load offset=0x07d align=1 (i32.const 0))) + (set_local 0x07e (i64.load offset=0x07e align=1 (i32.const 0))) + (set_local 0x07f (i64.load offset=0x07f align=1 (i32.const 0))) + (set_local 0x080 (i64.load offset=0x080 align=1 (i32.const 0))) + (set_local 0x081 (i64.load offset=0x081 align=1 (i32.const 0))) + (set_local 0x082 (i64.load offset=0x082 align=1 (i32.const 0))) + (set_local 0x083 (i64.load offset=0x083 align=1 (i32.const 0))) + (set_local 0x084 (i64.load offset=0x084 align=1 (i32.const 0))) + (set_local 0x085 (i64.load offset=0x085 align=1 (i32.const 0))) + (set_local 0x086 (i64.load offset=0x086 align=1 (i32.const 0))) + (set_local 0x087 (i64.load offset=0x087 align=1 (i32.const 0))) + (set_local 0x088 (i64.load offset=0x088 align=1 (i32.const 0))) + (set_local 0x089 (i64.load offset=0x089 align=1 (i32.const 0))) + (set_local 0x08a (i64.load offset=0x08a align=1 (i32.const 0))) + (set_local 0x08b (i64.load offset=0x08b align=1 (i32.const 0))) + (set_local 0x08c (i64.load offset=0x08c align=1 (i32.const 0))) + (set_local 0x08d (i64.load offset=0x08d align=1 (i32.const 0))) + (set_local 0x08e (i64.load offset=0x08e align=1 (i32.const 0))) + (set_local 0x08f (i64.load offset=0x08f align=1 (i32.const 0))) + (set_local 0x090 (i64.load offset=0x090 align=1 (i32.const 0))) + (set_local 0x091 (i64.load offset=0x091 align=1 (i32.const 0))) + (set_local 0x092 (i64.load offset=0x092 align=1 (i32.const 0))) + (set_local 0x093 (i64.load offset=0x093 align=1 (i32.const 0))) + (set_local 0x094 (i64.load offset=0x094 align=1 (i32.const 0))) + (set_local 0x095 (i64.load offset=0x095 align=1 (i32.const 0))) + (set_local 0x096 (i64.load offset=0x096 align=1 (i32.const 0))) + (set_local 0x097 (i64.load offset=0x097 align=1 (i32.const 0))) + (set_local 0x098 (i64.load offset=0x098 align=1 (i32.const 0))) + (set_local 0x099 (i64.load offset=0x099 align=1 (i32.const 0))) + (set_local 0x09a (i64.load offset=0x09a align=1 (i32.const 0))) + (set_local 0x09b (i64.load offset=0x09b align=1 (i32.const 0))) + (set_local 0x09c (i64.load offset=0x09c align=1 (i32.const 0))) + (set_local 0x09d (i64.load offset=0x09d align=1 (i32.const 0))) + (set_local 0x09e (i64.load offset=0x09e align=1 (i32.const 0))) + (set_local 0x09f (i64.load offset=0x09f align=1 (i32.const 0))) + (set_local 0x0a0 (i64.load offset=0x0a0 align=1 (i32.const 0))) + (set_local 0x0a1 (i64.load offset=0x0a1 align=1 (i32.const 0))) + (set_local 0x0a2 (i64.load offset=0x0a2 align=1 (i32.const 0))) + (set_local 0x0a3 (i64.load offset=0x0a3 align=1 (i32.const 0))) + (set_local 0x0a4 (i64.load offset=0x0a4 align=1 (i32.const 0))) + (set_local 0x0a5 (i64.load offset=0x0a5 align=1 (i32.const 0))) + (set_local 0x0a6 (i64.load offset=0x0a6 align=1 (i32.const 0))) + (set_local 0x0a7 (i64.load offset=0x0a7 align=1 (i32.const 0))) + (set_local 0x0a8 (i64.load offset=0x0a8 align=1 (i32.const 0))) + (set_local 0x0a9 (i64.load offset=0x0a9 align=1 (i32.const 0))) + (set_local 0x0aa (i64.load offset=0x0aa align=1 (i32.const 0))) + (set_local 0x0ab (i64.load offset=0x0ab align=1 (i32.const 0))) + (set_local 0x0ac (i64.load offset=0x0ac align=1 (i32.const 0))) + (set_local 0x0ad (i64.load offset=0x0ad align=1 (i32.const 0))) + (set_local 0x0ae (i64.load offset=0x0ae align=1 (i32.const 0))) + (set_local 0x0af (i64.load offset=0x0af align=1 (i32.const 0))) + (set_local 0x0b0 (i64.load offset=0x0b0 align=1 (i32.const 0))) + (set_local 0x0b1 (i64.load offset=0x0b1 align=1 (i32.const 0))) + (set_local 0x0b2 (i64.load offset=0x0b2 align=1 (i32.const 0))) + (set_local 0x0b3 (i64.load offset=0x0b3 align=1 (i32.const 0))) + (set_local 0x0b4 (i64.load offset=0x0b4 align=1 (i32.const 0))) + (set_local 0x0b5 (i64.load offset=0x0b5 align=1 (i32.const 0))) + (set_local 0x0b6 (i64.load offset=0x0b6 align=1 (i32.const 0))) + (set_local 0x0b7 (i64.load offset=0x0b7 align=1 (i32.const 0))) + (set_local 0x0b8 (i64.load offset=0x0b8 align=1 (i32.const 0))) + (set_local 0x0b9 (i64.load offset=0x0b9 align=1 (i32.const 0))) + (set_local 0x0ba (i64.load offset=0x0ba align=1 (i32.const 0))) + (set_local 0x0bb (i64.load offset=0x0bb align=1 (i32.const 0))) + (set_local 0x0bc (i64.load offset=0x0bc align=1 (i32.const 0))) + (set_local 0x0bd (i64.load offset=0x0bd align=1 (i32.const 0))) + (set_local 0x0be (i64.load offset=0x0be align=1 (i32.const 0))) + (set_local 0x0bf (i64.load offset=0x0bf align=1 (i32.const 0))) + (set_local 0x0c0 (i64.load offset=0x0c0 align=1 (i32.const 0))) + (set_local 0x0c1 (i64.load offset=0x0c1 align=1 (i32.const 0))) + (set_local 0x0c2 (i64.load offset=0x0c2 align=1 (i32.const 0))) + (set_local 0x0c3 (i64.load offset=0x0c3 align=1 (i32.const 0))) + (set_local 0x0c4 (i64.load offset=0x0c4 align=1 (i32.const 0))) + (set_local 0x0c5 (i64.load offset=0x0c5 align=1 (i32.const 0))) + (set_local 0x0c6 (i64.load offset=0x0c6 align=1 (i32.const 0))) + (set_local 0x0c7 (i64.load offset=0x0c7 align=1 (i32.const 0))) + (set_local 0x0c8 (i64.load offset=0x0c8 align=1 (i32.const 0))) + (set_local 0x0c9 (i64.load offset=0x0c9 align=1 (i32.const 0))) + (set_local 0x0ca (i64.load offset=0x0ca align=1 (i32.const 0))) + (set_local 0x0cb (i64.load offset=0x0cb align=1 (i32.const 0))) + (set_local 0x0cc (i64.load offset=0x0cc align=1 (i32.const 0))) + (set_local 0x0cd (i64.load offset=0x0cd align=1 (i32.const 0))) + (set_local 0x0ce (i64.load offset=0x0ce align=1 (i32.const 0))) + (set_local 0x0cf (i64.load offset=0x0cf align=1 (i32.const 0))) + (set_local 0x0d0 (i64.load offset=0x0d0 align=1 (i32.const 0))) + (set_local 0x0d1 (i64.load offset=0x0d1 align=1 (i32.const 0))) + (set_local 0x0d2 (i64.load offset=0x0d2 align=1 (i32.const 0))) + (set_local 0x0d3 (i64.load offset=0x0d3 align=1 (i32.const 0))) + (set_local 0x0d4 (i64.load offset=0x0d4 align=1 (i32.const 0))) + (set_local 0x0d5 (i64.load offset=0x0d5 align=1 (i32.const 0))) + (set_local 0x0d6 (i64.load offset=0x0d6 align=1 (i32.const 0))) + (set_local 0x0d7 (i64.load offset=0x0d7 align=1 (i32.const 0))) + (set_local 0x0d8 (i64.load offset=0x0d8 align=1 (i32.const 0))) + (set_local 0x0d9 (i64.load offset=0x0d9 align=1 (i32.const 0))) + (set_local 0x0da (i64.load offset=0x0da align=1 (i32.const 0))) + (set_local 0x0db (i64.load offset=0x0db align=1 (i32.const 0))) + (set_local 0x0dc (i64.load offset=0x0dc align=1 (i32.const 0))) + (set_local 0x0dd (i64.load offset=0x0dd align=1 (i32.const 0))) + (set_local 0x0de (i64.load offset=0x0de align=1 (i32.const 0))) + (set_local 0x0df (i64.load offset=0x0df align=1 (i32.const 0))) + (set_local 0x0e0 (i64.load offset=0x0e0 align=1 (i32.const 0))) + (set_local 0x0e1 (i64.load offset=0x0e1 align=1 (i32.const 0))) + (set_local 0x0e2 (i64.load offset=0x0e2 align=1 (i32.const 0))) + (set_local 0x0e3 (i64.load offset=0x0e3 align=1 (i32.const 0))) + (set_local 0x0e4 (i64.load offset=0x0e4 align=1 (i32.const 0))) + (set_local 0x0e5 (i64.load offset=0x0e5 align=1 (i32.const 0))) + (set_local 0x0e6 (i64.load offset=0x0e6 align=1 (i32.const 0))) + (set_local 0x0e7 (i64.load offset=0x0e7 align=1 (i32.const 0))) + (set_local 0x0e8 (i64.load offset=0x0e8 align=1 (i32.const 0))) + (set_local 0x0e9 (i64.load offset=0x0e9 align=1 (i32.const 0))) + (set_local 0x0ea (i64.load offset=0x0ea align=1 (i32.const 0))) + (set_local 0x0eb (i64.load offset=0x0eb align=1 (i32.const 0))) + (set_local 0x0ec (i64.load offset=0x0ec align=1 (i32.const 0))) + (set_local 0x0ed (i64.load offset=0x0ed align=1 (i32.const 0))) + (set_local 0x0ee (i64.load offset=0x0ee align=1 (i32.const 0))) + (set_local 0x0ef (i64.load offset=0x0ef align=1 (i32.const 0))) + (set_local 0x0f0 (i64.load offset=0x0f0 align=1 (i32.const 0))) + (set_local 0x0f1 (i64.load offset=0x0f1 align=1 (i32.const 0))) + (set_local 0x0f2 (i64.load offset=0x0f2 align=1 (i32.const 0))) + (set_local 0x0f3 (i64.load offset=0x0f3 align=1 (i32.const 0))) + (set_local 0x0f4 (i64.load offset=0x0f4 align=1 (i32.const 0))) + (set_local 0x0f5 (i64.load offset=0x0f5 align=1 (i32.const 0))) + (set_local 0x0f6 (i64.load offset=0x0f6 align=1 (i32.const 0))) + (set_local 0x0f7 (i64.load offset=0x0f7 align=1 (i32.const 0))) + (set_local 0x0f8 (i64.load offset=0x0f8 align=1 (i32.const 0))) + (set_local 0x0f9 (i64.load offset=0x0f9 align=1 (i32.const 0))) + (set_local 0x0fa (i64.load offset=0x0fa align=1 (i32.const 0))) + (set_local 0x0fb (i64.load offset=0x0fb align=1 (i32.const 0))) + (set_local 0x0fc (i64.load offset=0x0fc align=1 (i32.const 0))) + (set_local 0x0fd (i64.load offset=0x0fd align=1 (i32.const 0))) + (set_local 0x0fe (i64.load offset=0x0fe align=1 (i32.const 0))) + (set_local 0x0ff (i64.load offset=0x0ff align=1 (i32.const 0))) + (set_local 0x100 (i64.load offset=0x100 align=1 (i32.const 0))) + (set_local 0x101 (i64.load offset=0x101 align=1 (i32.const 0))) + (set_local 0x102 (i64.load offset=0x102 align=1 (i32.const 0))) + (set_local 0x103 (i64.load offset=0x103 align=1 (i32.const 0))) + (set_local 0x104 (i64.load offset=0x104 align=1 (i32.const 0))) + (set_local 0x105 (i64.load offset=0x105 align=1 (i32.const 0))) + (set_local 0x106 (i64.load offset=0x106 align=1 (i32.const 0))) + (set_local 0x107 (i64.load offset=0x107 align=1 (i32.const 0))) + (set_local 0x108 (i64.load offset=0x108 align=1 (i32.const 0))) + (set_local 0x109 (i64.load offset=0x109 align=1 (i32.const 0))) + (set_local 0x10a (i64.load offset=0x10a align=1 (i32.const 0))) + (set_local 0x10b (i64.load offset=0x10b align=1 (i32.const 0))) + (set_local 0x10c (i64.load offset=0x10c align=1 (i32.const 0))) + (set_local 0x10d (i64.load offset=0x10d align=1 (i32.const 0))) + (set_local 0x10e (i64.load offset=0x10e align=1 (i32.const 0))) + (set_local 0x10f (i64.load offset=0x10f align=1 (i32.const 0))) + (set_local 0x110 (i64.load offset=0x110 align=1 (i32.const 0))) + (set_local 0x111 (i64.load offset=0x111 align=1 (i32.const 0))) + (set_local 0x112 (i64.load offset=0x112 align=1 (i32.const 0))) + (set_local 0x113 (i64.load offset=0x113 align=1 (i32.const 0))) + (set_local 0x114 (i64.load offset=0x114 align=1 (i32.const 0))) + (set_local 0x115 (i64.load offset=0x115 align=1 (i32.const 0))) + (set_local 0x116 (i64.load offset=0x116 align=1 (i32.const 0))) + (set_local 0x117 (i64.load offset=0x117 align=1 (i32.const 0))) + (set_local 0x118 (i64.load offset=0x118 align=1 (i32.const 0))) + (set_local 0x119 (i64.load offset=0x119 align=1 (i32.const 0))) + (set_local 0x11a (i64.load offset=0x11a align=1 (i32.const 0))) + (set_local 0x11b (i64.load offset=0x11b align=1 (i32.const 0))) + (set_local 0x11c (i64.load offset=0x11c align=1 (i32.const 0))) + (set_local 0x11d (i64.load offset=0x11d align=1 (i32.const 0))) + (set_local 0x11e (i64.load offset=0x11e align=1 (i32.const 0))) + (set_local 0x11f (i64.load offset=0x11f align=1 (i32.const 0))) + (set_local 0x120 (i64.load offset=0x120 align=1 (i32.const 0))) + (set_local 0x121 (i64.load offset=0x121 align=1 (i32.const 0))) + (set_local 0x122 (i64.load offset=0x122 align=1 (i32.const 0))) + (set_local 0x123 (i64.load offset=0x123 align=1 (i32.const 0))) + (set_local 0x124 (i64.load offset=0x124 align=1 (i32.const 0))) + (set_local 0x125 (i64.load offset=0x125 align=1 (i32.const 0))) + (set_local 0x126 (i64.load offset=0x126 align=1 (i32.const 0))) + (set_local 0x127 (i64.load offset=0x127 align=1 (i32.const 0))) + (set_local 0x128 (i64.load offset=0x128 align=1 (i32.const 0))) + (set_local 0x129 (i64.load offset=0x129 align=1 (i32.const 0))) + (set_local 0x12a (i64.load offset=0x12a align=1 (i32.const 0))) + (set_local 0x12b (i64.load offset=0x12b align=1 (i32.const 0))) + (set_local 0x12c (i64.load offset=0x12c align=1 (i32.const 0))) + (set_local 0x12d (i64.load offset=0x12d align=1 (i32.const 0))) + (set_local 0x12e (i64.load offset=0x12e align=1 (i32.const 0))) + (set_local 0x12f (i64.load offset=0x12f align=1 (i32.const 0))) + (set_local 0x130 (i64.load offset=0x130 align=1 (i32.const 0))) + (set_local 0x131 (i64.load offset=0x131 align=1 (i32.const 0))) + (set_local 0x132 (i64.load offset=0x132 align=1 (i32.const 0))) + (set_local 0x133 (i64.load offset=0x133 align=1 (i32.const 0))) + (set_local 0x134 (i64.load offset=0x134 align=1 (i32.const 0))) + (set_local 0x135 (i64.load offset=0x135 align=1 (i32.const 0))) + (set_local 0x136 (i64.load offset=0x136 align=1 (i32.const 0))) + (set_local 0x137 (i64.load offset=0x137 align=1 (i32.const 0))) + (set_local 0x138 (i64.load offset=0x138 align=1 (i32.const 0))) + (set_local 0x139 (i64.load offset=0x139 align=1 (i32.const 0))) + (set_local 0x13a (i64.load offset=0x13a align=1 (i32.const 0))) + (set_local 0x13b (i64.load offset=0x13b align=1 (i32.const 0))) + (set_local 0x13c (i64.load offset=0x13c align=1 (i32.const 0))) + (set_local 0x13d (i64.load offset=0x13d align=1 (i32.const 0))) + (set_local 0x13e (i64.load offset=0x13e align=1 (i32.const 0))) + (set_local 0x13f (i64.load offset=0x13f align=1 (i32.const 0))) + (set_local 0x140 (i64.load offset=0x140 align=1 (i32.const 0))) + (set_local 0x141 (i64.load offset=0x141 align=1 (i32.const 0))) + (set_local 0x142 (i64.load offset=0x142 align=1 (i32.const 0))) + (set_local 0x143 (i64.load offset=0x143 align=1 (i32.const 0))) + (set_local 0x144 (i64.load offset=0x144 align=1 (i32.const 0))) + (set_local 0x145 (i64.load offset=0x145 align=1 (i32.const 0))) + (set_local 0x146 (i64.load offset=0x146 align=1 (i32.const 0))) + (set_local 0x147 (i64.load offset=0x147 align=1 (i32.const 0))) + (set_local 0x148 (i64.load offset=0x148 align=1 (i32.const 0))) + (set_local 0x149 (i64.load offset=0x149 align=1 (i32.const 0))) + (set_local 0x14a (i64.load offset=0x14a align=1 (i32.const 0))) + (set_local 0x14b (i64.load offset=0x14b align=1 (i32.const 0))) + (set_local 0x14c (i64.load offset=0x14c align=1 (i32.const 0))) + (set_local 0x14d (i64.load offset=0x14d align=1 (i32.const 0))) + (set_local 0x14e (i64.load offset=0x14e align=1 (i32.const 0))) + (set_local 0x14f (i64.load offset=0x14f align=1 (i32.const 0))) + (set_local 0x150 (i64.load offset=0x150 align=1 (i32.const 0))) + (set_local 0x151 (i64.load offset=0x151 align=1 (i32.const 0))) + (set_local 0x152 (i64.load offset=0x152 align=1 (i32.const 0))) + (set_local 0x153 (i64.load offset=0x153 align=1 (i32.const 0))) + (set_local 0x154 (i64.load offset=0x154 align=1 (i32.const 0))) + (set_local 0x155 (i64.load offset=0x155 align=1 (i32.const 0))) + (set_local 0x156 (i64.load offset=0x156 align=1 (i32.const 0))) + (set_local 0x157 (i64.load offset=0x157 align=1 (i32.const 0))) + (set_local 0x158 (i64.load offset=0x158 align=1 (i32.const 0))) + (set_local 0x159 (i64.load offset=0x159 align=1 (i32.const 0))) + (set_local 0x15a (i64.load offset=0x15a align=1 (i32.const 0))) + (set_local 0x15b (i64.load offset=0x15b align=1 (i32.const 0))) + (set_local 0x15c (i64.load offset=0x15c align=1 (i32.const 0))) + (set_local 0x15d (i64.load offset=0x15d align=1 (i32.const 0))) + (set_local 0x15e (i64.load offset=0x15e align=1 (i32.const 0))) + (set_local 0x15f (i64.load offset=0x15f align=1 (i32.const 0))) + (set_local 0x160 (i64.load offset=0x160 align=1 (i32.const 0))) + (set_local 0x161 (i64.load offset=0x161 align=1 (i32.const 0))) + (set_local 0x162 (i64.load offset=0x162 align=1 (i32.const 0))) + (set_local 0x163 (i64.load offset=0x163 align=1 (i32.const 0))) + (set_local 0x164 (i64.load offset=0x164 align=1 (i32.const 0))) + (set_local 0x165 (i64.load offset=0x165 align=1 (i32.const 0))) + (set_local 0x166 (i64.load offset=0x166 align=1 (i32.const 0))) + (set_local 0x167 (i64.load offset=0x167 align=1 (i32.const 0))) + (set_local 0x168 (i64.load offset=0x168 align=1 (i32.const 0))) + (set_local 0x169 (i64.load offset=0x169 align=1 (i32.const 0))) + (set_local 0x16a (i64.load offset=0x16a align=1 (i32.const 0))) + (set_local 0x16b (i64.load offset=0x16b align=1 (i32.const 0))) + (set_local 0x16c (i64.load offset=0x16c align=1 (i32.const 0))) + (set_local 0x16d (i64.load offset=0x16d align=1 (i32.const 0))) + (set_local 0x16e (i64.load offset=0x16e align=1 (i32.const 0))) + (set_local 0x16f (i64.load offset=0x16f align=1 (i32.const 0))) + (set_local 0x170 (i64.load offset=0x170 align=1 (i32.const 0))) + (set_local 0x171 (i64.load offset=0x171 align=1 (i32.const 0))) + (set_local 0x172 (i64.load offset=0x172 align=1 (i32.const 0))) + (set_local 0x173 (i64.load offset=0x173 align=1 (i32.const 0))) + (set_local 0x174 (i64.load offset=0x174 align=1 (i32.const 0))) + (set_local 0x175 (i64.load offset=0x175 align=1 (i32.const 0))) + (set_local 0x176 (i64.load offset=0x176 align=1 (i32.const 0))) + (set_local 0x177 (i64.load offset=0x177 align=1 (i32.const 0))) + (set_local 0x178 (i64.load offset=0x178 align=1 (i32.const 0))) + (set_local 0x179 (i64.load offset=0x179 align=1 (i32.const 0))) + (set_local 0x17a (i64.load offset=0x17a align=1 (i32.const 0))) + (set_local 0x17b (i64.load offset=0x17b align=1 (i32.const 0))) + (set_local 0x17c (i64.load offset=0x17c align=1 (i32.const 0))) + (set_local 0x17d (i64.load offset=0x17d align=1 (i32.const 0))) + (set_local 0x17e (i64.load offset=0x17e align=1 (i32.const 0))) + (set_local 0x17f (i64.load offset=0x17f align=1 (i32.const 0))) + (set_local 0x180 (i64.load offset=0x180 align=1 (i32.const 0))) + (set_local 0x181 (i64.load offset=0x181 align=1 (i32.const 0))) + (set_local 0x182 (i64.load offset=0x182 align=1 (i32.const 0))) + (set_local 0x183 (i64.load offset=0x183 align=1 (i32.const 0))) + (set_local 0x184 (i64.load offset=0x184 align=1 (i32.const 0))) + (set_local 0x185 (i64.load offset=0x185 align=1 (i32.const 0))) + (set_local 0x186 (i64.load offset=0x186 align=1 (i32.const 0))) + (set_local 0x187 (i64.load offset=0x187 align=1 (i32.const 0))) + (set_local 0x188 (i64.load offset=0x188 align=1 (i32.const 0))) + (set_local 0x189 (i64.load offset=0x189 align=1 (i32.const 0))) + (set_local 0x18a (i64.load offset=0x18a align=1 (i32.const 0))) + (set_local 0x18b (i64.load offset=0x18b align=1 (i32.const 0))) + (set_local 0x18c (i64.load offset=0x18c align=1 (i32.const 0))) + (set_local 0x18d (i64.load offset=0x18d align=1 (i32.const 0))) + (set_local 0x18e (i64.load offset=0x18e align=1 (i32.const 0))) + (set_local 0x18f (i64.load offset=0x18f align=1 (i32.const 0))) + (set_local 0x190 (i64.load offset=0x190 align=1 (i32.const 0))) + (set_local 0x191 (i64.load offset=0x191 align=1 (i32.const 0))) + (set_local 0x192 (i64.load offset=0x192 align=1 (i32.const 0))) + (set_local 0x193 (i64.load offset=0x193 align=1 (i32.const 0))) + (set_local 0x194 (i64.load offset=0x194 align=1 (i32.const 0))) + (set_local 0x195 (i64.load offset=0x195 align=1 (i32.const 0))) + (set_local 0x196 (i64.load offset=0x196 align=1 (i32.const 0))) + (set_local 0x197 (i64.load offset=0x197 align=1 (i32.const 0))) + (set_local 0x198 (i64.load offset=0x198 align=1 (i32.const 0))) + (set_local 0x199 (i64.load offset=0x199 align=1 (i32.const 0))) + (set_local 0x19a (i64.load offset=0x19a align=1 (i32.const 0))) + (set_local 0x19b (i64.load offset=0x19b align=1 (i32.const 0))) + (set_local 0x19c (i64.load offset=0x19c align=1 (i32.const 0))) + (set_local 0x19d (i64.load offset=0x19d align=1 (i32.const 0))) + (set_local 0x19e (i64.load offset=0x19e align=1 (i32.const 0))) + (set_local 0x19f (i64.load offset=0x19f align=1 (i32.const 0))) + (set_local 0x1a0 (i64.load offset=0x1a0 align=1 (i32.const 0))) + (set_local 0x1a1 (i64.load offset=0x1a1 align=1 (i32.const 0))) + (set_local 0x1a2 (i64.load offset=0x1a2 align=1 (i32.const 0))) + (set_local 0x1a3 (i64.load offset=0x1a3 align=1 (i32.const 0))) + (set_local 0x1a4 (i64.load offset=0x1a4 align=1 (i32.const 0))) + (set_local 0x1a5 (i64.load offset=0x1a5 align=1 (i32.const 0))) + (set_local 0x1a6 (i64.load offset=0x1a6 align=1 (i32.const 0))) + (set_local 0x1a7 (i64.load offset=0x1a7 align=1 (i32.const 0))) + (set_local 0x1a8 (i64.load offset=0x1a8 align=1 (i32.const 0))) + (set_local 0x1a9 (i64.load offset=0x1a9 align=1 (i32.const 0))) + (set_local 0x1aa (i64.load offset=0x1aa align=1 (i32.const 0))) + (set_local 0x1ab (i64.load offset=0x1ab align=1 (i32.const 0))) + (set_local 0x1ac (i64.load offset=0x1ac align=1 (i32.const 0))) + (set_local 0x1ad (i64.load offset=0x1ad align=1 (i32.const 0))) + (set_local 0x1ae (i64.load offset=0x1ae align=1 (i32.const 0))) + (set_local 0x1af (i64.load offset=0x1af align=1 (i32.const 0))) + (set_local 0x1b0 (i64.load offset=0x1b0 align=1 (i32.const 0))) + (set_local 0x1b1 (i64.load offset=0x1b1 align=1 (i32.const 0))) + (set_local 0x1b2 (i64.load offset=0x1b2 align=1 (i32.const 0))) + (set_local 0x1b3 (i64.load offset=0x1b3 align=1 (i32.const 0))) + (set_local 0x1b4 (i64.load offset=0x1b4 align=1 (i32.const 0))) + (set_local 0x1b5 (i64.load offset=0x1b5 align=1 (i32.const 0))) + (set_local 0x1b6 (i64.load offset=0x1b6 align=1 (i32.const 0))) + (set_local 0x1b7 (i64.load offset=0x1b7 align=1 (i32.const 0))) + (set_local 0x1b8 (i64.load offset=0x1b8 align=1 (i32.const 0))) + (set_local 0x1b9 (i64.load offset=0x1b9 align=1 (i32.const 0))) + (set_local 0x1ba (i64.load offset=0x1ba align=1 (i32.const 0))) + (set_local 0x1bb (i64.load offset=0x1bb align=1 (i32.const 0))) + (set_local 0x1bc (i64.load offset=0x1bc align=1 (i32.const 0))) + (set_local 0x1bd (i64.load offset=0x1bd align=1 (i32.const 0))) + (set_local 0x1be (i64.load offset=0x1be align=1 (i32.const 0))) + (set_local 0x1bf (i64.load offset=0x1bf align=1 (i32.const 0))) + (set_local 0x1c0 (i64.load offset=0x1c0 align=1 (i32.const 0))) + (set_local 0x1c1 (i64.load offset=0x1c1 align=1 (i32.const 0))) + (set_local 0x1c2 (i64.load offset=0x1c2 align=1 (i32.const 0))) + (set_local 0x1c3 (i64.load offset=0x1c3 align=1 (i32.const 0))) + (set_local 0x1c4 (i64.load offset=0x1c4 align=1 (i32.const 0))) + (set_local 0x1c5 (i64.load offset=0x1c5 align=1 (i32.const 0))) + (set_local 0x1c6 (i64.load offset=0x1c6 align=1 (i32.const 0))) + (set_local 0x1c7 (i64.load offset=0x1c7 align=1 (i32.const 0))) + (set_local 0x1c8 (i64.load offset=0x1c8 align=1 (i32.const 0))) + (set_local 0x1c9 (i64.load offset=0x1c9 align=1 (i32.const 0))) + (set_local 0x1ca (i64.load offset=0x1ca align=1 (i32.const 0))) + (set_local 0x1cb (i64.load offset=0x1cb align=1 (i32.const 0))) + (set_local 0x1cc (i64.load offset=0x1cc align=1 (i32.const 0))) + (set_local 0x1cd (i64.load offset=0x1cd align=1 (i32.const 0))) + (set_local 0x1ce (i64.load offset=0x1ce align=1 (i32.const 0))) + (set_local 0x1cf (i64.load offset=0x1cf align=1 (i32.const 0))) + (set_local 0x1d0 (i64.load offset=0x1d0 align=1 (i32.const 0))) + (set_local 0x1d1 (i64.load offset=0x1d1 align=1 (i32.const 0))) + (set_local 0x1d2 (i64.load offset=0x1d2 align=1 (i32.const 0))) + (set_local 0x1d3 (i64.load offset=0x1d3 align=1 (i32.const 0))) + (set_local 0x1d4 (i64.load offset=0x1d4 align=1 (i32.const 0))) + (set_local 0x1d5 (i64.load offset=0x1d5 align=1 (i32.const 0))) + (set_local 0x1d6 (i64.load offset=0x1d6 align=1 (i32.const 0))) + (set_local 0x1d7 (i64.load offset=0x1d7 align=1 (i32.const 0))) + (set_local 0x1d8 (i64.load offset=0x1d8 align=1 (i32.const 0))) + (set_local 0x1d9 (i64.load offset=0x1d9 align=1 (i32.const 0))) + (set_local 0x1da (i64.load offset=0x1da align=1 (i32.const 0))) + (set_local 0x1db (i64.load offset=0x1db align=1 (i32.const 0))) + (set_local 0x1dc (i64.load offset=0x1dc align=1 (i32.const 0))) + (set_local 0x1dd (i64.load offset=0x1dd align=1 (i32.const 0))) + (set_local 0x1de (i64.load offset=0x1de align=1 (i32.const 0))) + (set_local 0x1df (i64.load offset=0x1df align=1 (i32.const 0))) + (set_local 0x1e0 (i64.load offset=0x1e0 align=1 (i32.const 0))) + (set_local 0x1e1 (i64.load offset=0x1e1 align=1 (i32.const 0))) + (set_local 0x1e2 (i64.load offset=0x1e2 align=1 (i32.const 0))) + (set_local 0x1e3 (i64.load offset=0x1e3 align=1 (i32.const 0))) + (set_local 0x1e4 (i64.load offset=0x1e4 align=1 (i32.const 0))) + (set_local 0x1e5 (i64.load offset=0x1e5 align=1 (i32.const 0))) + (set_local 0x1e6 (i64.load offset=0x1e6 align=1 (i32.const 0))) + (set_local 0x1e7 (i64.load offset=0x1e7 align=1 (i32.const 0))) + (set_local 0x1e8 (i64.load offset=0x1e8 align=1 (i32.const 0))) + (set_local 0x1e9 (i64.load offset=0x1e9 align=1 (i32.const 0))) + (set_local 0x1ea (i64.load offset=0x1ea align=1 (i32.const 0))) + (set_local 0x1eb (i64.load offset=0x1eb align=1 (i32.const 0))) + (set_local 0x1ec (i64.load offset=0x1ec align=1 (i32.const 0))) + (set_local 0x1ed (i64.load offset=0x1ed align=1 (i32.const 0))) + (set_local 0x1ee (i64.load offset=0x1ee align=1 (i32.const 0))) + (set_local 0x1ef (i64.load offset=0x1ef align=1 (i32.const 0))) + (set_local 0x1f0 (i64.load offset=0x1f0 align=1 (i32.const 0))) + (set_local 0x1f1 (i64.load offset=0x1f1 align=1 (i32.const 0))) + (set_local 0x1f2 (i64.load offset=0x1f2 align=1 (i32.const 0))) + (set_local 0x1f3 (i64.load offset=0x1f3 align=1 (i32.const 0))) + (set_local 0x1f4 (i64.load offset=0x1f4 align=1 (i32.const 0))) + (set_local 0x1f5 (i64.load offset=0x1f5 align=1 (i32.const 0))) + (set_local 0x1f6 (i64.load offset=0x1f6 align=1 (i32.const 0))) + (set_local 0x1f7 (i64.load offset=0x1f7 align=1 (i32.const 0))) + (set_local 0x1f8 (i64.load offset=0x1f8 align=1 (i32.const 0))) + (set_local 0x1f9 (i64.load offset=0x1f9 align=1 (i32.const 0))) + (set_local 0x1fa (i64.load offset=0x1fa align=1 (i32.const 0))) + (set_local 0x1fb (i64.load offset=0x1fb align=1 (i32.const 0))) + (set_local 0x1fc (i64.load offset=0x1fc align=1 (i32.const 0))) + (set_local 0x1fd (i64.load offset=0x1fd align=1 (i32.const 0))) + (set_local 0x1fe (i64.load offset=0x1fe align=1 (i32.const 0))) + (set_local 0x1ff (i64.load offset=0x1ff align=1 (i32.const 0))) + (set_local 0x200 (i64.load offset=0x200 align=1 (i32.const 0))) + (set_local 0x201 (i64.load offset=0x201 align=1 (i32.const 0))) + (set_local 0x202 (i64.load offset=0x202 align=1 (i32.const 0))) + (set_local 0x203 (i64.load offset=0x203 align=1 (i32.const 0))) + (set_local 0x204 (i64.load offset=0x204 align=1 (i32.const 0))) + (set_local 0x205 (i64.load offset=0x205 align=1 (i32.const 0))) + (set_local 0x206 (i64.load offset=0x206 align=1 (i32.const 0))) + (set_local 0x207 (i64.load offset=0x207 align=1 (i32.const 0))) + (set_local 0x208 (i64.load offset=0x208 align=1 (i32.const 0))) + (set_local 0x209 (i64.load offset=0x209 align=1 (i32.const 0))) + (set_local 0x20a (i64.load offset=0x20a align=1 (i32.const 0))) + (set_local 0x20b (i64.load offset=0x20b align=1 (i32.const 0))) + (set_local 0x20c (i64.load offset=0x20c align=1 (i32.const 0))) + (set_local 0x20d (i64.load offset=0x20d align=1 (i32.const 0))) + (set_local 0x20e (i64.load offset=0x20e align=1 (i32.const 0))) + (set_local 0x20f (i64.load offset=0x20f align=1 (i32.const 0))) + (set_local 0x210 (i64.load offset=0x210 align=1 (i32.const 0))) + (set_local 0x211 (i64.load offset=0x211 align=1 (i32.const 0))) + (set_local 0x212 (i64.load offset=0x212 align=1 (i32.const 0))) + (set_local 0x213 (i64.load offset=0x213 align=1 (i32.const 0))) + (set_local 0x214 (i64.load offset=0x214 align=1 (i32.const 0))) + (set_local 0x215 (i64.load offset=0x215 align=1 (i32.const 0))) + (set_local 0x216 (i64.load offset=0x216 align=1 (i32.const 0))) + (set_local 0x217 (i64.load offset=0x217 align=1 (i32.const 0))) + (set_local 0x218 (i64.load offset=0x218 align=1 (i32.const 0))) + (set_local 0x219 (i64.load offset=0x219 align=1 (i32.const 0))) + (set_local 0x21a (i64.load offset=0x21a align=1 (i32.const 0))) + (set_local 0x21b (i64.load offset=0x21b align=1 (i32.const 0))) + (set_local 0x21c (i64.load offset=0x21c align=1 (i32.const 0))) + (set_local 0x21d (i64.load offset=0x21d align=1 (i32.const 0))) + (set_local 0x21e (i64.load offset=0x21e align=1 (i32.const 0))) + (set_local 0x21f (i64.load offset=0x21f align=1 (i32.const 0))) + (set_local 0x220 (i64.load offset=0x220 align=1 (i32.const 0))) + (set_local 0x221 (i64.load offset=0x221 align=1 (i32.const 0))) + (set_local 0x222 (i64.load offset=0x222 align=1 (i32.const 0))) + (set_local 0x223 (i64.load offset=0x223 align=1 (i32.const 0))) + (set_local 0x224 (i64.load offset=0x224 align=1 (i32.const 0))) + (set_local 0x225 (i64.load offset=0x225 align=1 (i32.const 0))) + (set_local 0x226 (i64.load offset=0x226 align=1 (i32.const 0))) + (set_local 0x227 (i64.load offset=0x227 align=1 (i32.const 0))) + (set_local 0x228 (i64.load offset=0x228 align=1 (i32.const 0))) + (set_local 0x229 (i64.load offset=0x229 align=1 (i32.const 0))) + (set_local 0x22a (i64.load offset=0x22a align=1 (i32.const 0))) + (set_local 0x22b (i64.load offset=0x22b align=1 (i32.const 0))) + (set_local 0x22c (i64.load offset=0x22c align=1 (i32.const 0))) + (set_local 0x22d (i64.load offset=0x22d align=1 (i32.const 0))) + (set_local 0x22e (i64.load offset=0x22e align=1 (i32.const 0))) + (set_local 0x22f (i64.load offset=0x22f align=1 (i32.const 0))) + (set_local 0x230 (i64.load offset=0x230 align=1 (i32.const 0))) + (set_local 0x231 (i64.load offset=0x231 align=1 (i32.const 0))) + (set_local 0x232 (i64.load offset=0x232 align=1 (i32.const 0))) + (set_local 0x233 (i64.load offset=0x233 align=1 (i32.const 0))) + (set_local 0x234 (i64.load offset=0x234 align=1 (i32.const 0))) + (set_local 0x235 (i64.load offset=0x235 align=1 (i32.const 0))) + (set_local 0x236 (i64.load offset=0x236 align=1 (i32.const 0))) + (set_local 0x237 (i64.load offset=0x237 align=1 (i32.const 0))) + (set_local 0x238 (i64.load offset=0x238 align=1 (i32.const 0))) + (set_local 0x239 (i64.load offset=0x239 align=1 (i32.const 0))) + (set_local 0x23a (i64.load offset=0x23a align=1 (i32.const 0))) + (set_local 0x23b (i64.load offset=0x23b align=1 (i32.const 0))) + (set_local 0x23c (i64.load offset=0x23c align=1 (i32.const 0))) + (set_local 0x23d (i64.load offset=0x23d align=1 (i32.const 0))) + (set_local 0x23e (i64.load offset=0x23e align=1 (i32.const 0))) + (set_local 0x23f (i64.load offset=0x23f align=1 (i32.const 0))) + (set_local 0x240 (i64.load offset=0x240 align=1 (i32.const 0))) + (set_local 0x241 (i64.load offset=0x241 align=1 (i32.const 0))) + (set_local 0x242 (i64.load offset=0x242 align=1 (i32.const 0))) + (set_local 0x243 (i64.load offset=0x243 align=1 (i32.const 0))) + (set_local 0x244 (i64.load offset=0x244 align=1 (i32.const 0))) + (set_local 0x245 (i64.load offset=0x245 align=1 (i32.const 0))) + (set_local 0x246 (i64.load offset=0x246 align=1 (i32.const 0))) + (set_local 0x247 (i64.load offset=0x247 align=1 (i32.const 0))) + (set_local 0x248 (i64.load offset=0x248 align=1 (i32.const 0))) + (set_local 0x249 (i64.load offset=0x249 align=1 (i32.const 0))) + (set_local 0x24a (i64.load offset=0x24a align=1 (i32.const 0))) + (set_local 0x24b (i64.load offset=0x24b align=1 (i32.const 0))) + (set_local 0x24c (i64.load offset=0x24c align=1 (i32.const 0))) + (set_local 0x24d (i64.load offset=0x24d align=1 (i32.const 0))) + (set_local 0x24e (i64.load offset=0x24e align=1 (i32.const 0))) + (set_local 0x24f (i64.load offset=0x24f align=1 (i32.const 0))) + (set_local 0x250 (i64.load offset=0x250 align=1 (i32.const 0))) + (set_local 0x251 (i64.load offset=0x251 align=1 (i32.const 0))) + (set_local 0x252 (i64.load offset=0x252 align=1 (i32.const 0))) + (set_local 0x253 (i64.load offset=0x253 align=1 (i32.const 0))) + (set_local 0x254 (i64.load offset=0x254 align=1 (i32.const 0))) + (set_local 0x255 (i64.load offset=0x255 align=1 (i32.const 0))) + (set_local 0x256 (i64.load offset=0x256 align=1 (i32.const 0))) + (set_local 0x257 (i64.load offset=0x257 align=1 (i32.const 0))) + (set_local 0x258 (i64.load offset=0x258 align=1 (i32.const 0))) + (set_local 0x259 (i64.load offset=0x259 align=1 (i32.const 0))) + (set_local 0x25a (i64.load offset=0x25a align=1 (i32.const 0))) + (set_local 0x25b (i64.load offset=0x25b align=1 (i32.const 0))) + (set_local 0x25c (i64.load offset=0x25c align=1 (i32.const 0))) + (set_local 0x25d (i64.load offset=0x25d align=1 (i32.const 0))) + (set_local 0x25e (i64.load offset=0x25e align=1 (i32.const 0))) + (set_local 0x25f (i64.load offset=0x25f align=1 (i32.const 0))) + (set_local 0x260 (i64.load offset=0x260 align=1 (i32.const 0))) + (set_local 0x261 (i64.load offset=0x261 align=1 (i32.const 0))) + (set_local 0x262 (i64.load offset=0x262 align=1 (i32.const 0))) + (set_local 0x263 (i64.load offset=0x263 align=1 (i32.const 0))) + (set_local 0x264 (i64.load offset=0x264 align=1 (i32.const 0))) + (set_local 0x265 (i64.load offset=0x265 align=1 (i32.const 0))) + (set_local 0x266 (i64.load offset=0x266 align=1 (i32.const 0))) + (set_local 0x267 (i64.load offset=0x267 align=1 (i32.const 0))) + (set_local 0x268 (i64.load offset=0x268 align=1 (i32.const 0))) + (set_local 0x269 (i64.load offset=0x269 align=1 (i32.const 0))) + (set_local 0x26a (i64.load offset=0x26a align=1 (i32.const 0))) + (set_local 0x26b (i64.load offset=0x26b align=1 (i32.const 0))) + (set_local 0x26c (i64.load offset=0x26c align=1 (i32.const 0))) + (set_local 0x26d (i64.load offset=0x26d align=1 (i32.const 0))) + (set_local 0x26e (i64.load offset=0x26e align=1 (i32.const 0))) + (set_local 0x26f (i64.load offset=0x26f align=1 (i32.const 0))) + (set_local 0x270 (i64.load offset=0x270 align=1 (i32.const 0))) + (set_local 0x271 (i64.load offset=0x271 align=1 (i32.const 0))) + (set_local 0x272 (i64.load offset=0x272 align=1 (i32.const 0))) + (set_local 0x273 (i64.load offset=0x273 align=1 (i32.const 0))) + (set_local 0x274 (i64.load offset=0x274 align=1 (i32.const 0))) + (set_local 0x275 (i64.load offset=0x275 align=1 (i32.const 0))) + (set_local 0x276 (i64.load offset=0x276 align=1 (i32.const 0))) + (set_local 0x277 (i64.load offset=0x277 align=1 (i32.const 0))) + (set_local 0x278 (i64.load offset=0x278 align=1 (i32.const 0))) + (set_local 0x279 (i64.load offset=0x279 align=1 (i32.const 0))) + (set_local 0x27a (i64.load offset=0x27a align=1 (i32.const 0))) + (set_local 0x27b (i64.load offset=0x27b align=1 (i32.const 0))) + (set_local 0x27c (i64.load offset=0x27c align=1 (i32.const 0))) + (set_local 0x27d (i64.load offset=0x27d align=1 (i32.const 0))) + (set_local 0x27e (i64.load offset=0x27e align=1 (i32.const 0))) + (set_local 0x27f (i64.load offset=0x27f align=1 (i32.const 0))) + (set_local 0x280 (i64.load offset=0x280 align=1 (i32.const 0))) + (set_local 0x281 (i64.load offset=0x281 align=1 (i32.const 0))) + (set_local 0x282 (i64.load offset=0x282 align=1 (i32.const 0))) + (set_local 0x283 (i64.load offset=0x283 align=1 (i32.const 0))) + (set_local 0x284 (i64.load offset=0x284 align=1 (i32.const 0))) + (set_local 0x285 (i64.load offset=0x285 align=1 (i32.const 0))) + (set_local 0x286 (i64.load offset=0x286 align=1 (i32.const 0))) + (set_local 0x287 (i64.load offset=0x287 align=1 (i32.const 0))) + (set_local 0x288 (i64.load offset=0x288 align=1 (i32.const 0))) + (set_local 0x289 (i64.load offset=0x289 align=1 (i32.const 0))) + (set_local 0x28a (i64.load offset=0x28a align=1 (i32.const 0))) + (set_local 0x28b (i64.load offset=0x28b align=1 (i32.const 0))) + (set_local 0x28c (i64.load offset=0x28c align=1 (i32.const 0))) + (set_local 0x28d (i64.load offset=0x28d align=1 (i32.const 0))) + (set_local 0x28e (i64.load offset=0x28e align=1 (i32.const 0))) + (set_local 0x28f (i64.load offset=0x28f align=1 (i32.const 0))) + (set_local 0x290 (i64.load offset=0x290 align=1 (i32.const 0))) + (set_local 0x291 (i64.load offset=0x291 align=1 (i32.const 0))) + (set_local 0x292 (i64.load offset=0x292 align=1 (i32.const 0))) + (set_local 0x293 (i64.load offset=0x293 align=1 (i32.const 0))) + (set_local 0x294 (i64.load offset=0x294 align=1 (i32.const 0))) + (set_local 0x295 (i64.load offset=0x295 align=1 (i32.const 0))) + (set_local 0x296 (i64.load offset=0x296 align=1 (i32.const 0))) + (set_local 0x297 (i64.load offset=0x297 align=1 (i32.const 0))) + (set_local 0x298 (i64.load offset=0x298 align=1 (i32.const 0))) + (set_local 0x299 (i64.load offset=0x299 align=1 (i32.const 0))) + (set_local 0x29a (i64.load offset=0x29a align=1 (i32.const 0))) + (set_local 0x29b (i64.load offset=0x29b align=1 (i32.const 0))) + (set_local 0x29c (i64.load offset=0x29c align=1 (i32.const 0))) + (set_local 0x29d (i64.load offset=0x29d align=1 (i32.const 0))) + (set_local 0x29e (i64.load offset=0x29e align=1 (i32.const 0))) + (set_local 0x29f (i64.load offset=0x29f align=1 (i32.const 0))) + (set_local 0x2a0 (i64.load offset=0x2a0 align=1 (i32.const 0))) + (set_local 0x2a1 (i64.load offset=0x2a1 align=1 (i32.const 0))) + (set_local 0x2a2 (i64.load offset=0x2a2 align=1 (i32.const 0))) + (set_local 0x2a3 (i64.load offset=0x2a3 align=1 (i32.const 0))) + (set_local 0x2a4 (i64.load offset=0x2a4 align=1 (i32.const 0))) + (set_local 0x2a5 (i64.load offset=0x2a5 align=1 (i32.const 0))) + (set_local 0x2a6 (i64.load offset=0x2a6 align=1 (i32.const 0))) + (set_local 0x2a7 (i64.load offset=0x2a7 align=1 (i32.const 0))) + (set_local 0x2a8 (i64.load offset=0x2a8 align=1 (i32.const 0))) + (set_local 0x2a9 (i64.load offset=0x2a9 align=1 (i32.const 0))) + (set_local 0x2aa (i64.load offset=0x2aa align=1 (i32.const 0))) + (set_local 0x2ab (i64.load offset=0x2ab align=1 (i32.const 0))) + (set_local 0x2ac (i64.load offset=0x2ac align=1 (i32.const 0))) + (set_local 0x2ad (i64.load offset=0x2ad align=1 (i32.const 0))) + (set_local 0x2ae (i64.load offset=0x2ae align=1 (i32.const 0))) + (set_local 0x2af (i64.load offset=0x2af align=1 (i32.const 0))) + (set_local 0x2b0 (i64.load offset=0x2b0 align=1 (i32.const 0))) + (set_local 0x2b1 (i64.load offset=0x2b1 align=1 (i32.const 0))) + (set_local 0x2b2 (i64.load offset=0x2b2 align=1 (i32.const 0))) + (set_local 0x2b3 (i64.load offset=0x2b3 align=1 (i32.const 0))) + (set_local 0x2b4 (i64.load offset=0x2b4 align=1 (i32.const 0))) + (set_local 0x2b5 (i64.load offset=0x2b5 align=1 (i32.const 0))) + (set_local 0x2b6 (i64.load offset=0x2b6 align=1 (i32.const 0))) + (set_local 0x2b7 (i64.load offset=0x2b7 align=1 (i32.const 0))) + (set_local 0x2b8 (i64.load offset=0x2b8 align=1 (i32.const 0))) + (set_local 0x2b9 (i64.load offset=0x2b9 align=1 (i32.const 0))) + (set_local 0x2ba (i64.load offset=0x2ba align=1 (i32.const 0))) + (set_local 0x2bb (i64.load offset=0x2bb align=1 (i32.const 0))) + (set_local 0x2bc (i64.load offset=0x2bc align=1 (i32.const 0))) + (set_local 0x2bd (i64.load offset=0x2bd align=1 (i32.const 0))) + (set_local 0x2be (i64.load offset=0x2be align=1 (i32.const 0))) + (set_local 0x2bf (i64.load offset=0x2bf align=1 (i32.const 0))) + (set_local 0x2c0 (i64.load offset=0x2c0 align=1 (i32.const 0))) + (set_local 0x2c1 (i64.load offset=0x2c1 align=1 (i32.const 0))) + (set_local 0x2c2 (i64.load offset=0x2c2 align=1 (i32.const 0))) + (set_local 0x2c3 (i64.load offset=0x2c3 align=1 (i32.const 0))) + (set_local 0x2c4 (i64.load offset=0x2c4 align=1 (i32.const 0))) + (set_local 0x2c5 (i64.load offset=0x2c5 align=1 (i32.const 0))) + (set_local 0x2c6 (i64.load offset=0x2c6 align=1 (i32.const 0))) + (set_local 0x2c7 (i64.load offset=0x2c7 align=1 (i32.const 0))) + (set_local 0x2c8 (i64.load offset=0x2c8 align=1 (i32.const 0))) + (set_local 0x2c9 (i64.load offset=0x2c9 align=1 (i32.const 0))) + (set_local 0x2ca (i64.load offset=0x2ca align=1 (i32.const 0))) + (set_local 0x2cb (i64.load offset=0x2cb align=1 (i32.const 0))) + (set_local 0x2cc (i64.load offset=0x2cc align=1 (i32.const 0))) + (set_local 0x2cd (i64.load offset=0x2cd align=1 (i32.const 0))) + (set_local 0x2ce (i64.load offset=0x2ce align=1 (i32.const 0))) + (set_local 0x2cf (i64.load offset=0x2cf align=1 (i32.const 0))) + (set_local 0x2d0 (i64.load offset=0x2d0 align=1 (i32.const 0))) + (set_local 0x2d1 (i64.load offset=0x2d1 align=1 (i32.const 0))) + (set_local 0x2d2 (i64.load offset=0x2d2 align=1 (i32.const 0))) + (set_local 0x2d3 (i64.load offset=0x2d3 align=1 (i32.const 0))) + (set_local 0x2d4 (i64.load offset=0x2d4 align=1 (i32.const 0))) + (set_local 0x2d5 (i64.load offset=0x2d5 align=1 (i32.const 0))) + (set_local 0x2d6 (i64.load offset=0x2d6 align=1 (i32.const 0))) + (set_local 0x2d7 (i64.load offset=0x2d7 align=1 (i32.const 0))) + (set_local 0x2d8 (i64.load offset=0x2d8 align=1 (i32.const 0))) + (set_local 0x2d9 (i64.load offset=0x2d9 align=1 (i32.const 0))) + (set_local 0x2da (i64.load offset=0x2da align=1 (i32.const 0))) + (set_local 0x2db (i64.load offset=0x2db align=1 (i32.const 0))) + (set_local 0x2dc (i64.load offset=0x2dc align=1 (i32.const 0))) + (set_local 0x2dd (i64.load offset=0x2dd align=1 (i32.const 0))) + (set_local 0x2de (i64.load offset=0x2de align=1 (i32.const 0))) + (set_local 0x2df (i64.load offset=0x2df align=1 (i32.const 0))) + (set_local 0x2e0 (i64.load offset=0x2e0 align=1 (i32.const 0))) + (set_local 0x2e1 (i64.load offset=0x2e1 align=1 (i32.const 0))) + (set_local 0x2e2 (i64.load offset=0x2e2 align=1 (i32.const 0))) + (set_local 0x2e3 (i64.load offset=0x2e3 align=1 (i32.const 0))) + (set_local 0x2e4 (i64.load offset=0x2e4 align=1 (i32.const 0))) + (set_local 0x2e5 (i64.load offset=0x2e5 align=1 (i32.const 0))) + (set_local 0x2e6 (i64.load offset=0x2e6 align=1 (i32.const 0))) + (set_local 0x2e7 (i64.load offset=0x2e7 align=1 (i32.const 0))) + (set_local 0x2e8 (i64.load offset=0x2e8 align=1 (i32.const 0))) + (set_local 0x2e9 (i64.load offset=0x2e9 align=1 (i32.const 0))) + (set_local 0x2ea (i64.load offset=0x2ea align=1 (i32.const 0))) + (set_local 0x2eb (i64.load offset=0x2eb align=1 (i32.const 0))) + (set_local 0x2ec (i64.load offset=0x2ec align=1 (i32.const 0))) + (set_local 0x2ed (i64.load offset=0x2ed align=1 (i32.const 0))) + (set_local 0x2ee (i64.load offset=0x2ee align=1 (i32.const 0))) + (set_local 0x2ef (i64.load offset=0x2ef align=1 (i32.const 0))) + (set_local 0x2f0 (i64.load offset=0x2f0 align=1 (i32.const 0))) + (set_local 0x2f1 (i64.load offset=0x2f1 align=1 (i32.const 0))) + (set_local 0x2f2 (i64.load offset=0x2f2 align=1 (i32.const 0))) + (set_local 0x2f3 (i64.load offset=0x2f3 align=1 (i32.const 0))) + (set_local 0x2f4 (i64.load offset=0x2f4 align=1 (i32.const 0))) + (set_local 0x2f5 (i64.load offset=0x2f5 align=1 (i32.const 0))) + (set_local 0x2f6 (i64.load offset=0x2f6 align=1 (i32.const 0))) + (set_local 0x2f7 (i64.load offset=0x2f7 align=1 (i32.const 0))) + (set_local 0x2f8 (i64.load offset=0x2f8 align=1 (i32.const 0))) + (set_local 0x2f9 (i64.load offset=0x2f9 align=1 (i32.const 0))) + (set_local 0x2fa (i64.load offset=0x2fa align=1 (i32.const 0))) + (set_local 0x2fb (i64.load offset=0x2fb align=1 (i32.const 0))) + (set_local 0x2fc (i64.load offset=0x2fc align=1 (i32.const 0))) + (set_local 0x2fd (i64.load offset=0x2fd align=1 (i32.const 0))) + (set_local 0x2fe (i64.load offset=0x2fe align=1 (i32.const 0))) + (set_local 0x2ff (i64.load offset=0x2ff align=1 (i32.const 0))) + (set_local 0x300 (i64.load offset=0x300 align=1 (i32.const 0))) + (set_local 0x301 (i64.load offset=0x301 align=1 (i32.const 0))) + (set_local 0x302 (i64.load offset=0x302 align=1 (i32.const 0))) + (set_local 0x303 (i64.load offset=0x303 align=1 (i32.const 0))) + (set_local 0x304 (i64.load offset=0x304 align=1 (i32.const 0))) + (set_local 0x305 (i64.load offset=0x305 align=1 (i32.const 0))) + (set_local 0x306 (i64.load offset=0x306 align=1 (i32.const 0))) + (set_local 0x307 (i64.load offset=0x307 align=1 (i32.const 0))) + (set_local 0x308 (i64.load offset=0x308 align=1 (i32.const 0))) + (set_local 0x309 (i64.load offset=0x309 align=1 (i32.const 0))) + (set_local 0x30a (i64.load offset=0x30a align=1 (i32.const 0))) + (set_local 0x30b (i64.load offset=0x30b align=1 (i32.const 0))) + (set_local 0x30c (i64.load offset=0x30c align=1 (i32.const 0))) + (set_local 0x30d (i64.load offset=0x30d align=1 (i32.const 0))) + (set_local 0x30e (i64.load offset=0x30e align=1 (i32.const 0))) + (set_local 0x30f (i64.load offset=0x30f align=1 (i32.const 0))) + (set_local 0x310 (i64.load offset=0x310 align=1 (i32.const 0))) + (set_local 0x311 (i64.load offset=0x311 align=1 (i32.const 0))) + (set_local 0x312 (i64.load offset=0x312 align=1 (i32.const 0))) + (set_local 0x313 (i64.load offset=0x313 align=1 (i32.const 0))) + (set_local 0x314 (i64.load offset=0x314 align=1 (i32.const 0))) + (set_local 0x315 (i64.load offset=0x315 align=1 (i32.const 0))) + (set_local 0x316 (i64.load offset=0x316 align=1 (i32.const 0))) + (set_local 0x317 (i64.load offset=0x317 align=1 (i32.const 0))) + (set_local 0x318 (i64.load offset=0x318 align=1 (i32.const 0))) + (set_local 0x319 (i64.load offset=0x319 align=1 (i32.const 0))) + (set_local 0x31a (i64.load offset=0x31a align=1 (i32.const 0))) + (set_local 0x31b (i64.load offset=0x31b align=1 (i32.const 0))) + (set_local 0x31c (i64.load offset=0x31c align=1 (i32.const 0))) + (set_local 0x31d (i64.load offset=0x31d align=1 (i32.const 0))) + (set_local 0x31e (i64.load offset=0x31e align=1 (i32.const 0))) + (set_local 0x31f (i64.load offset=0x31f align=1 (i32.const 0))) + (set_local 0x320 (i64.load offset=0x320 align=1 (i32.const 0))) + (set_local 0x321 (i64.load offset=0x321 align=1 (i32.const 0))) + (set_local 0x322 (i64.load offset=0x322 align=1 (i32.const 0))) + (set_local 0x323 (i64.load offset=0x323 align=1 (i32.const 0))) + (set_local 0x324 (i64.load offset=0x324 align=1 (i32.const 0))) + (set_local 0x325 (i64.load offset=0x325 align=1 (i32.const 0))) + (set_local 0x326 (i64.load offset=0x326 align=1 (i32.const 0))) + (set_local 0x327 (i64.load offset=0x327 align=1 (i32.const 0))) + (set_local 0x328 (i64.load offset=0x328 align=1 (i32.const 0))) + (set_local 0x329 (i64.load offset=0x329 align=1 (i32.const 0))) + (set_local 0x32a (i64.load offset=0x32a align=1 (i32.const 0))) + (set_local 0x32b (i64.load offset=0x32b align=1 (i32.const 0))) + (set_local 0x32c (i64.load offset=0x32c align=1 (i32.const 0))) + (set_local 0x32d (i64.load offset=0x32d align=1 (i32.const 0))) + (set_local 0x32e (i64.load offset=0x32e align=1 (i32.const 0))) + (set_local 0x32f (i64.load offset=0x32f align=1 (i32.const 0))) + (set_local 0x330 (i64.load offset=0x330 align=1 (i32.const 0))) + (set_local 0x331 (i64.load offset=0x331 align=1 (i32.const 0))) + (set_local 0x332 (i64.load offset=0x332 align=1 (i32.const 0))) + (set_local 0x333 (i64.load offset=0x333 align=1 (i32.const 0))) + (set_local 0x334 (i64.load offset=0x334 align=1 (i32.const 0))) + (set_local 0x335 (i64.load offset=0x335 align=1 (i32.const 0))) + (set_local 0x336 (i64.load offset=0x336 align=1 (i32.const 0))) + (set_local 0x337 (i64.load offset=0x337 align=1 (i32.const 0))) + (set_local 0x338 (i64.load offset=0x338 align=1 (i32.const 0))) + (set_local 0x339 (i64.load offset=0x339 align=1 (i32.const 0))) + (set_local 0x33a (i64.load offset=0x33a align=1 (i32.const 0))) + (set_local 0x33b (i64.load offset=0x33b align=1 (i32.const 0))) + (set_local 0x33c (i64.load offset=0x33c align=1 (i32.const 0))) + (set_local 0x33d (i64.load offset=0x33d align=1 (i32.const 0))) + (set_local 0x33e (i64.load offset=0x33e align=1 (i32.const 0))) + (set_local 0x33f (i64.load offset=0x33f align=1 (i32.const 0))) + (set_local 0x340 (i64.load offset=0x340 align=1 (i32.const 0))) + (set_local 0x341 (i64.load offset=0x341 align=1 (i32.const 0))) + (set_local 0x342 (i64.load offset=0x342 align=1 (i32.const 0))) + (set_local 0x343 (i64.load offset=0x343 align=1 (i32.const 0))) + (set_local 0x344 (i64.load offset=0x344 align=1 (i32.const 0))) + (set_local 0x345 (i64.load offset=0x345 align=1 (i32.const 0))) + (set_local 0x346 (i64.load offset=0x346 align=1 (i32.const 0))) + (set_local 0x347 (i64.load offset=0x347 align=1 (i32.const 0))) + (set_local 0x348 (i64.load offset=0x348 align=1 (i32.const 0))) + (set_local 0x349 (i64.load offset=0x349 align=1 (i32.const 0))) + (set_local 0x34a (i64.load offset=0x34a align=1 (i32.const 0))) + (set_local 0x34b (i64.load offset=0x34b align=1 (i32.const 0))) + (set_local 0x34c (i64.load offset=0x34c align=1 (i32.const 0))) + (set_local 0x34d (i64.load offset=0x34d align=1 (i32.const 0))) + (set_local 0x34e (i64.load offset=0x34e align=1 (i32.const 0))) + (set_local 0x34f (i64.load offset=0x34f align=1 (i32.const 0))) + (set_local 0x350 (i64.load offset=0x350 align=1 (i32.const 0))) + (set_local 0x351 (i64.load offset=0x351 align=1 (i32.const 0))) + (set_local 0x352 (i64.load offset=0x352 align=1 (i32.const 0))) + (set_local 0x353 (i64.load offset=0x353 align=1 (i32.const 0))) + (set_local 0x354 (i64.load offset=0x354 align=1 (i32.const 0))) + (set_local 0x355 (i64.load offset=0x355 align=1 (i32.const 0))) + (set_local 0x356 (i64.load offset=0x356 align=1 (i32.const 0))) + (set_local 0x357 (i64.load offset=0x357 align=1 (i32.const 0))) + (set_local 0x358 (i64.load offset=0x358 align=1 (i32.const 0))) + (set_local 0x359 (i64.load offset=0x359 align=1 (i32.const 0))) + (set_local 0x35a (i64.load offset=0x35a align=1 (i32.const 0))) + (set_local 0x35b (i64.load offset=0x35b align=1 (i32.const 0))) + (set_local 0x35c (i64.load offset=0x35c align=1 (i32.const 0))) + (set_local 0x35d (i64.load offset=0x35d align=1 (i32.const 0))) + (set_local 0x35e (i64.load offset=0x35e align=1 (i32.const 0))) + (set_local 0x35f (i64.load offset=0x35f align=1 (i32.const 0))) + (set_local 0x360 (i64.load offset=0x360 align=1 (i32.const 0))) + (set_local 0x361 (i64.load offset=0x361 align=1 (i32.const 0))) + (set_local 0x362 (i64.load offset=0x362 align=1 (i32.const 0))) + (set_local 0x363 (i64.load offset=0x363 align=1 (i32.const 0))) + (set_local 0x364 (i64.load offset=0x364 align=1 (i32.const 0))) + (set_local 0x365 (i64.load offset=0x365 align=1 (i32.const 0))) + (set_local 0x366 (i64.load offset=0x366 align=1 (i32.const 0))) + (set_local 0x367 (i64.load offset=0x367 align=1 (i32.const 0))) + (set_local 0x368 (i64.load offset=0x368 align=1 (i32.const 0))) + (set_local 0x369 (i64.load offset=0x369 align=1 (i32.const 0))) + (set_local 0x36a (i64.load offset=0x36a align=1 (i32.const 0))) + (set_local 0x36b (i64.load offset=0x36b align=1 (i32.const 0))) + (set_local 0x36c (i64.load offset=0x36c align=1 (i32.const 0))) + (set_local 0x36d (i64.load offset=0x36d align=1 (i32.const 0))) + (set_local 0x36e (i64.load offset=0x36e align=1 (i32.const 0))) + (set_local 0x36f (i64.load offset=0x36f align=1 (i32.const 0))) + (set_local 0x370 (i64.load offset=0x370 align=1 (i32.const 0))) + (set_local 0x371 (i64.load offset=0x371 align=1 (i32.const 0))) + (set_local 0x372 (i64.load offset=0x372 align=1 (i32.const 0))) + (set_local 0x373 (i64.load offset=0x373 align=1 (i32.const 0))) + (set_local 0x374 (i64.load offset=0x374 align=1 (i32.const 0))) + (set_local 0x375 (i64.load offset=0x375 align=1 (i32.const 0))) + (set_local 0x376 (i64.load offset=0x376 align=1 (i32.const 0))) + (set_local 0x377 (i64.load offset=0x377 align=1 (i32.const 0))) + (set_local 0x378 (i64.load offset=0x378 align=1 (i32.const 0))) + (set_local 0x379 (i64.load offset=0x379 align=1 (i32.const 0))) + (set_local 0x37a (i64.load offset=0x37a align=1 (i32.const 0))) + (set_local 0x37b (i64.load offset=0x37b align=1 (i32.const 0))) + (set_local 0x37c (i64.load offset=0x37c align=1 (i32.const 0))) + (set_local 0x37d (i64.load offset=0x37d align=1 (i32.const 0))) + (set_local 0x37e (i64.load offset=0x37e align=1 (i32.const 0))) + (set_local 0x37f (i64.load offset=0x37f align=1 (i32.const 0))) + (set_local 0x380 (i64.load offset=0x380 align=1 (i32.const 0))) + (set_local 0x381 (i64.load offset=0x381 align=1 (i32.const 0))) + (set_local 0x382 (i64.load offset=0x382 align=1 (i32.const 0))) + (set_local 0x383 (i64.load offset=0x383 align=1 (i32.const 0))) + (set_local 0x384 (i64.load offset=0x384 align=1 (i32.const 0))) + (set_local 0x385 (i64.load offset=0x385 align=1 (i32.const 0))) + (set_local 0x386 (i64.load offset=0x386 align=1 (i32.const 0))) + (set_local 0x387 (i64.load offset=0x387 align=1 (i32.const 0))) + (set_local 0x388 (i64.load offset=0x388 align=1 (i32.const 0))) + (set_local 0x389 (i64.load offset=0x389 align=1 (i32.const 0))) + (set_local 0x38a (i64.load offset=0x38a align=1 (i32.const 0))) + (set_local 0x38b (i64.load offset=0x38b align=1 (i32.const 0))) + (set_local 0x38c (i64.load offset=0x38c align=1 (i32.const 0))) + (set_local 0x38d (i64.load offset=0x38d align=1 (i32.const 0))) + (set_local 0x38e (i64.load offset=0x38e align=1 (i32.const 0))) + (set_local 0x38f (i64.load offset=0x38f align=1 (i32.const 0))) + (set_local 0x390 (i64.load offset=0x390 align=1 (i32.const 0))) + (set_local 0x391 (i64.load offset=0x391 align=1 (i32.const 0))) + (set_local 0x392 (i64.load offset=0x392 align=1 (i32.const 0))) + (set_local 0x393 (i64.load offset=0x393 align=1 (i32.const 0))) + (set_local 0x394 (i64.load offset=0x394 align=1 (i32.const 0))) + (set_local 0x395 (i64.load offset=0x395 align=1 (i32.const 0))) + (set_local 0x396 (i64.load offset=0x396 align=1 (i32.const 0))) + (set_local 0x397 (i64.load offset=0x397 align=1 (i32.const 0))) + (set_local 0x398 (i64.load offset=0x398 align=1 (i32.const 0))) + (set_local 0x399 (i64.load offset=0x399 align=1 (i32.const 0))) + (set_local 0x39a (i64.load offset=0x39a align=1 (i32.const 0))) + (set_local 0x39b (i64.load offset=0x39b align=1 (i32.const 0))) + (set_local 0x39c (i64.load offset=0x39c align=1 (i32.const 0))) + (set_local 0x39d (i64.load offset=0x39d align=1 (i32.const 0))) + (set_local 0x39e (i64.load offset=0x39e align=1 (i32.const 0))) + (set_local 0x39f (i64.load offset=0x39f align=1 (i32.const 0))) + (set_local 0x3a0 (i64.load offset=0x3a0 align=1 (i32.const 0))) + (set_local 0x3a1 (i64.load offset=0x3a1 align=1 (i32.const 0))) + (set_local 0x3a2 (i64.load offset=0x3a2 align=1 (i32.const 0))) + (set_local 0x3a3 (i64.load offset=0x3a3 align=1 (i32.const 0))) + (set_local 0x3a4 (i64.load offset=0x3a4 align=1 (i32.const 0))) + (set_local 0x3a5 (i64.load offset=0x3a5 align=1 (i32.const 0))) + (set_local 0x3a6 (i64.load offset=0x3a6 align=1 (i32.const 0))) + (set_local 0x3a7 (i64.load offset=0x3a7 align=1 (i32.const 0))) + (set_local 0x3a8 (i64.load offset=0x3a8 align=1 (i32.const 0))) + (set_local 0x3a9 (i64.load offset=0x3a9 align=1 (i32.const 0))) + (set_local 0x3aa (i64.load offset=0x3aa align=1 (i32.const 0))) + (set_local 0x3ab (i64.load offset=0x3ab align=1 (i32.const 0))) + (set_local 0x3ac (i64.load offset=0x3ac align=1 (i32.const 0))) + (set_local 0x3ad (i64.load offset=0x3ad align=1 (i32.const 0))) + (set_local 0x3ae (i64.load offset=0x3ae align=1 (i32.const 0))) + (set_local 0x3af (i64.load offset=0x3af align=1 (i32.const 0))) + (set_local 0x3b0 (i64.load offset=0x3b0 align=1 (i32.const 0))) + (set_local 0x3b1 (i64.load offset=0x3b1 align=1 (i32.const 0))) + (set_local 0x3b2 (i64.load offset=0x3b2 align=1 (i32.const 0))) + (set_local 0x3b3 (i64.load offset=0x3b3 align=1 (i32.const 0))) + (set_local 0x3b4 (i64.load offset=0x3b4 align=1 (i32.const 0))) + (set_local 0x3b5 (i64.load offset=0x3b5 align=1 (i32.const 0))) + (set_local 0x3b6 (i64.load offset=0x3b6 align=1 (i32.const 0))) + (set_local 0x3b7 (i64.load offset=0x3b7 align=1 (i32.const 0))) + (set_local 0x3b8 (i64.load offset=0x3b8 align=1 (i32.const 0))) + (set_local 0x3b9 (i64.load offset=0x3b9 align=1 (i32.const 0))) + (set_local 0x3ba (i64.load offset=0x3ba align=1 (i32.const 0))) + (set_local 0x3bb (i64.load offset=0x3bb align=1 (i32.const 0))) + (set_local 0x3bc (i64.load offset=0x3bc align=1 (i32.const 0))) + (set_local 0x3bd (i64.load offset=0x3bd align=1 (i32.const 0))) + (set_local 0x3be (i64.load offset=0x3be align=1 (i32.const 0))) + (set_local 0x3bf (i64.load offset=0x3bf align=1 (i32.const 0))) + (set_local 0x3c0 (i64.load offset=0x3c0 align=1 (i32.const 0))) + (set_local 0x3c1 (i64.load offset=0x3c1 align=1 (i32.const 0))) + (set_local 0x3c2 (i64.load offset=0x3c2 align=1 (i32.const 0))) + (set_local 0x3c3 (i64.load offset=0x3c3 align=1 (i32.const 0))) + (set_local 0x3c4 (i64.load offset=0x3c4 align=1 (i32.const 0))) + (set_local 0x3c5 (i64.load offset=0x3c5 align=1 (i32.const 0))) + (set_local 0x3c6 (i64.load offset=0x3c6 align=1 (i32.const 0))) + (set_local 0x3c7 (i64.load offset=0x3c7 align=1 (i32.const 0))) + (set_local 0x3c8 (i64.load offset=0x3c8 align=1 (i32.const 0))) + (set_local 0x3c9 (i64.load offset=0x3c9 align=1 (i32.const 0))) + (set_local 0x3ca (i64.load offset=0x3ca align=1 (i32.const 0))) + (set_local 0x3cb (i64.load offset=0x3cb align=1 (i32.const 0))) + (set_local 0x3cc (i64.load offset=0x3cc align=1 (i32.const 0))) + (set_local 0x3cd (i64.load offset=0x3cd align=1 (i32.const 0))) + (set_local 0x3ce (i64.load offset=0x3ce align=1 (i32.const 0))) + (set_local 0x3cf (i64.load offset=0x3cf align=1 (i32.const 0))) + (set_local 0x3d0 (i64.load offset=0x3d0 align=1 (i32.const 0))) + (set_local 0x3d1 (i64.load offset=0x3d1 align=1 (i32.const 0))) + (set_local 0x3d2 (i64.load offset=0x3d2 align=1 (i32.const 0))) + (set_local 0x3d3 (i64.load offset=0x3d3 align=1 (i32.const 0))) + (set_local 0x3d4 (i64.load offset=0x3d4 align=1 (i32.const 0))) + (set_local 0x3d5 (i64.load offset=0x3d5 align=1 (i32.const 0))) + (set_local 0x3d6 (i64.load offset=0x3d6 align=1 (i32.const 0))) + (set_local 0x3d7 (i64.load offset=0x3d7 align=1 (i32.const 0))) + (set_local 0x3d8 (i64.load offset=0x3d8 align=1 (i32.const 0))) + (set_local 0x3d9 (i64.load offset=0x3d9 align=1 (i32.const 0))) + (set_local 0x3da (i64.load offset=0x3da align=1 (i32.const 0))) + (set_local 0x3db (i64.load offset=0x3db align=1 (i32.const 0))) + (set_local 0x3dc (i64.load offset=0x3dc align=1 (i32.const 0))) + (set_local 0x3dd (i64.load offset=0x3dd align=1 (i32.const 0))) + (set_local 0x3de (i64.load offset=0x3de align=1 (i32.const 0))) + (set_local 0x3df (i64.load offset=0x3df align=1 (i32.const 0))) + (set_local 0x3e0 (i64.load offset=0x3e0 align=1 (i32.const 0))) + (set_local 0x3e1 (i64.load offset=0x3e1 align=1 (i32.const 0))) + (set_local 0x3e2 (i64.load offset=0x3e2 align=1 (i32.const 0))) + (set_local 0x3e3 (i64.load offset=0x3e3 align=1 (i32.const 0))) + (set_local 0x3e4 (i64.load offset=0x3e4 align=1 (i32.const 0))) + (set_local 0x3e5 (i64.load offset=0x3e5 align=1 (i32.const 0))) + (set_local 0x3e6 (i64.load offset=0x3e6 align=1 (i32.const 0))) + (set_local 0x3e7 (i64.load offset=0x3e7 align=1 (i32.const 0))) + (set_local 0x3e8 (i64.load offset=0x3e8 align=1 (i32.const 0))) + (set_local 0x3e9 (i64.load offset=0x3e9 align=1 (i32.const 0))) + (set_local 0x3ea (i64.load offset=0x3ea align=1 (i32.const 0))) + (set_local 0x3eb (i64.load offset=0x3eb align=1 (i32.const 0))) + (set_local 0x3ec (i64.load offset=0x3ec align=1 (i32.const 0))) + (set_local 0x3ed (i64.load offset=0x3ed align=1 (i32.const 0))) + (set_local 0x3ee (i64.load offset=0x3ee align=1 (i32.const 0))) + (set_local 0x3ef (i64.load offset=0x3ef align=1 (i32.const 0))) + (set_local 0x3f0 (i64.load offset=0x3f0 align=1 (i32.const 0))) + (set_local 0x3f1 (i64.load offset=0x3f1 align=1 (i32.const 0))) + (set_local 0x3f2 (i64.load offset=0x3f2 align=1 (i32.const 0))) + (set_local 0x3f3 (i64.load offset=0x3f3 align=1 (i32.const 0))) + (set_local 0x3f4 (i64.load offset=0x3f4 align=1 (i32.const 0))) + (set_local 0x3f5 (i64.load offset=0x3f5 align=1 (i32.const 0))) + (set_local 0x3f6 (i64.load offset=0x3f6 align=1 (i32.const 0))) + (set_local 0x3f7 (i64.load offset=0x3f7 align=1 (i32.const 0))) + (set_local 0x3f8 (i64.load offset=0x3f8 align=1 (i32.const 0))) + (set_local 0x3f9 (i64.load offset=0x3f9 align=1 (i32.const 0))) + (set_local 0x3fa (i64.load offset=0x3fa align=1 (i32.const 0))) + (set_local 0x3fb (i64.load offset=0x3fb align=1 (i32.const 0))) + (set_local 0x3fc (i64.load offset=0x3fc align=1 (i32.const 0))) + (set_local 0x3fd (i64.load offset=0x3fd align=1 (i32.const 0))) + (set_local 0x3fe (i64.load offset=0x3fe align=1 (i32.const 0))) + (set_local 0x3ff (i64.load offset=0x3ff align=1 (i32.const 0))) + (set_local 0x400 (i64.load offset=0x400 align=1 (i32.const 0))) + (set_local 0x401 (i64.load offset=0x401 align=1 (i32.const 0))) + (set_local 0x402 (i64.load offset=0x402 align=1 (i32.const 0))) + (set_local 0x403 (i64.load offset=0x403 align=1 (i32.const 0))) + (set_local 0x404 (i64.load offset=0x404 align=1 (i32.const 0))) + (set_local 0x405 (i64.load offset=0x405 align=1 (i32.const 0))) + (set_local 0x406 (i64.load offset=0x406 align=1 (i32.const 0))) + (set_local 0x407 (i64.load offset=0x407 align=1 (i32.const 0))) + (set_local 0x408 (i64.load offset=0x408 align=1 (i32.const 0))) + (set_local 0x409 (i64.load offset=0x409 align=1 (i32.const 0))) + (set_local 0x40a (i64.load offset=0x40a align=1 (i32.const 0))) + (set_local 0x40b (i64.load offset=0x40b align=1 (i32.const 0))) + (set_local 0x40c (i64.load offset=0x40c align=1 (i32.const 0))) + (set_local 0x40d (i64.load offset=0x40d align=1 (i32.const 0))) + (set_local 0x40e (i64.load offset=0x40e align=1 (i32.const 0))) + (set_local 0x40f (i64.load offset=0x40f align=1 (i32.const 0))) + (set_local 0x410 (i64.load offset=0x410 align=1 (i32.const 0))) + (set_local 0x411 (i64.load offset=0x411 align=1 (i32.const 0))) + (set_local 0x412 (i64.load offset=0x412 align=1 (i32.const 0))) + (set_local 0x413 (i64.load offset=0x413 align=1 (i32.const 0))) + (set_local 0x414 (i64.load offset=0x414 align=1 (i32.const 0))) + (set_local 0x415 (i64.load offset=0x415 align=1 (i32.const 0))) + (set_local 0x416 (i64.load offset=0x416 align=1 (i32.const 0))) + (set_local 0x417 (i64.load offset=0x417 align=1 (i32.const 0))) + (set_local 0x418 (i64.load offset=0x418 align=1 (i32.const 0))) + (set_local 0x419 (i64.load offset=0x419 align=1 (i32.const 0))) + (set_local 0x41a (i64.load offset=0x41a align=1 (i32.const 0))) + (set_local 0x41b (i64.load offset=0x41b align=1 (i32.const 0))) + (set_local 0x41c (i64.load offset=0x41c align=1 (i32.const 0))) + (set_local 0x41d (i64.load offset=0x41d align=1 (i32.const 0))) + (set_local 0x41e (i64.load offset=0x41e align=1 (i32.const 0))) + (set_local 0x41f (i64.load offset=0x41f align=1 (i32.const 0))) + + (i64.store offset=0x000 align=1 (i32.const 0) (get_local 0x000)) + (i64.store offset=0x001 align=1 (i32.const 0) (get_local 0x001)) + (i64.store offset=0x002 align=1 (i32.const 0) (get_local 0x002)) + (i64.store offset=0x003 align=1 (i32.const 0) (get_local 0x003)) + (i64.store offset=0x004 align=1 (i32.const 0) (get_local 0x004)) + (i64.store offset=0x005 align=1 (i32.const 0) (get_local 0x005)) + (i64.store offset=0x006 align=1 (i32.const 0) (get_local 0x006)) + (i64.store offset=0x007 align=1 (i32.const 0) (get_local 0x007)) + (i64.store offset=0x008 align=1 (i32.const 0) (get_local 0x008)) + (i64.store offset=0x009 align=1 (i32.const 0) (get_local 0x009)) + (i64.store offset=0x00a align=1 (i32.const 0) (get_local 0x00a)) + (i64.store offset=0x00b align=1 (i32.const 0) (get_local 0x00b)) + (i64.store offset=0x00c align=1 (i32.const 0) (get_local 0x00c)) + (i64.store offset=0x00d align=1 (i32.const 0) (get_local 0x00d)) + (i64.store offset=0x00e align=1 (i32.const 0) (get_local 0x00e)) + (i64.store offset=0x00f align=1 (i32.const 0) (get_local 0x00f)) + (i64.store offset=0x010 align=1 (i32.const 0) (get_local 0x010)) + (i64.store offset=0x011 align=1 (i32.const 0) (get_local 0x011)) + (i64.store offset=0x012 align=1 (i32.const 0) (get_local 0x012)) + (i64.store offset=0x013 align=1 (i32.const 0) (get_local 0x013)) + (i64.store offset=0x014 align=1 (i32.const 0) (get_local 0x014)) + (i64.store offset=0x015 align=1 (i32.const 0) (get_local 0x015)) + (i64.store offset=0x016 align=1 (i32.const 0) (get_local 0x016)) + (i64.store offset=0x017 align=1 (i32.const 0) (get_local 0x017)) + (i64.store offset=0x018 align=1 (i32.const 0) (get_local 0x018)) + (i64.store offset=0x019 align=1 (i32.const 0) (get_local 0x019)) + (i64.store offset=0x01a align=1 (i32.const 0) (get_local 0x01a)) + (i64.store offset=0x01b align=1 (i32.const 0) (get_local 0x01b)) + (i64.store offset=0x01c align=1 (i32.const 0) (get_local 0x01c)) + (i64.store offset=0x01d align=1 (i32.const 0) (get_local 0x01d)) + (i64.store offset=0x01e align=1 (i32.const 0) (get_local 0x01e)) + (i64.store offset=0x01f align=1 (i32.const 0) (get_local 0x01f)) + (i64.store offset=0x020 align=1 (i32.const 0) (get_local 0x020)) + (i64.store offset=0x021 align=1 (i32.const 0) (get_local 0x021)) + (i64.store offset=0x022 align=1 (i32.const 0) (get_local 0x022)) + (i64.store offset=0x023 align=1 (i32.const 0) (get_local 0x023)) + (i64.store offset=0x024 align=1 (i32.const 0) (get_local 0x024)) + (i64.store offset=0x025 align=1 (i32.const 0) (get_local 0x025)) + (i64.store offset=0x026 align=1 (i32.const 0) (get_local 0x026)) + (i64.store offset=0x027 align=1 (i32.const 0) (get_local 0x027)) + (i64.store offset=0x028 align=1 (i32.const 0) (get_local 0x028)) + (i64.store offset=0x029 align=1 (i32.const 0) (get_local 0x029)) + (i64.store offset=0x02a align=1 (i32.const 0) (get_local 0x02a)) + (i64.store offset=0x02b align=1 (i32.const 0) (get_local 0x02b)) + (i64.store offset=0x02c align=1 (i32.const 0) (get_local 0x02c)) + (i64.store offset=0x02d align=1 (i32.const 0) (get_local 0x02d)) + (i64.store offset=0x02e align=1 (i32.const 0) (get_local 0x02e)) + (i64.store offset=0x02f align=1 (i32.const 0) (get_local 0x02f)) + (i64.store offset=0x030 align=1 (i32.const 0) (get_local 0x030)) + (i64.store offset=0x031 align=1 (i32.const 0) (get_local 0x031)) + (i64.store offset=0x032 align=1 (i32.const 0) (get_local 0x032)) + (i64.store offset=0x033 align=1 (i32.const 0) (get_local 0x033)) + (i64.store offset=0x034 align=1 (i32.const 0) (get_local 0x034)) + (i64.store offset=0x035 align=1 (i32.const 0) (get_local 0x035)) + (i64.store offset=0x036 align=1 (i32.const 0) (get_local 0x036)) + (i64.store offset=0x037 align=1 (i32.const 0) (get_local 0x037)) + (i64.store offset=0x038 align=1 (i32.const 0) (get_local 0x038)) + (i64.store offset=0x039 align=1 (i32.const 0) (get_local 0x039)) + (i64.store offset=0x03a align=1 (i32.const 0) (get_local 0x03a)) + (i64.store offset=0x03b align=1 (i32.const 0) (get_local 0x03b)) + (i64.store offset=0x03c align=1 (i32.const 0) (get_local 0x03c)) + (i64.store offset=0x03d align=1 (i32.const 0) (get_local 0x03d)) + (i64.store offset=0x03e align=1 (i32.const 0) (get_local 0x03e)) + (i64.store offset=0x03f align=1 (i32.const 0) (get_local 0x03f)) + (i64.store offset=0x040 align=1 (i32.const 0) (get_local 0x040)) + (i64.store offset=0x041 align=1 (i32.const 0) (get_local 0x041)) + (i64.store offset=0x042 align=1 (i32.const 0) (get_local 0x042)) + (i64.store offset=0x043 align=1 (i32.const 0) (get_local 0x043)) + (i64.store offset=0x044 align=1 (i32.const 0) (get_local 0x044)) + (i64.store offset=0x045 align=1 (i32.const 0) (get_local 0x045)) + (i64.store offset=0x046 align=1 (i32.const 0) (get_local 0x046)) + (i64.store offset=0x047 align=1 (i32.const 0) (get_local 0x047)) + (i64.store offset=0x048 align=1 (i32.const 0) (get_local 0x048)) + (i64.store offset=0x049 align=1 (i32.const 0) (get_local 0x049)) + (i64.store offset=0x04a align=1 (i32.const 0) (get_local 0x04a)) + (i64.store offset=0x04b align=1 (i32.const 0) (get_local 0x04b)) + (i64.store offset=0x04c align=1 (i32.const 0) (get_local 0x04c)) + (i64.store offset=0x04d align=1 (i32.const 0) (get_local 0x04d)) + (i64.store offset=0x04e align=1 (i32.const 0) (get_local 0x04e)) + (i64.store offset=0x04f align=1 (i32.const 0) (get_local 0x04f)) + (i64.store offset=0x050 align=1 (i32.const 0) (get_local 0x050)) + (i64.store offset=0x051 align=1 (i32.const 0) (get_local 0x051)) + (i64.store offset=0x052 align=1 (i32.const 0) (get_local 0x052)) + (i64.store offset=0x053 align=1 (i32.const 0) (get_local 0x053)) + (i64.store offset=0x054 align=1 (i32.const 0) (get_local 0x054)) + (i64.store offset=0x055 align=1 (i32.const 0) (get_local 0x055)) + (i64.store offset=0x056 align=1 (i32.const 0) (get_local 0x056)) + (i64.store offset=0x057 align=1 (i32.const 0) (get_local 0x057)) + (i64.store offset=0x058 align=1 (i32.const 0) (get_local 0x058)) + (i64.store offset=0x059 align=1 (i32.const 0) (get_local 0x059)) + (i64.store offset=0x05a align=1 (i32.const 0) (get_local 0x05a)) + (i64.store offset=0x05b align=1 (i32.const 0) (get_local 0x05b)) + (i64.store offset=0x05c align=1 (i32.const 0) (get_local 0x05c)) + (i64.store offset=0x05d align=1 (i32.const 0) (get_local 0x05d)) + (i64.store offset=0x05e align=1 (i32.const 0) (get_local 0x05e)) + (i64.store offset=0x05f align=1 (i32.const 0) (get_local 0x05f)) + (i64.store offset=0x060 align=1 (i32.const 0) (get_local 0x060)) + (i64.store offset=0x061 align=1 (i32.const 0) (get_local 0x061)) + (i64.store offset=0x062 align=1 (i32.const 0) (get_local 0x062)) + (i64.store offset=0x063 align=1 (i32.const 0) (get_local 0x063)) + (i64.store offset=0x064 align=1 (i32.const 0) (get_local 0x064)) + (i64.store offset=0x065 align=1 (i32.const 0) (get_local 0x065)) + (i64.store offset=0x066 align=1 (i32.const 0) (get_local 0x066)) + (i64.store offset=0x067 align=1 (i32.const 0) (get_local 0x067)) + (i64.store offset=0x068 align=1 (i32.const 0) (get_local 0x068)) + (i64.store offset=0x069 align=1 (i32.const 0) (get_local 0x069)) + (i64.store offset=0x06a align=1 (i32.const 0) (get_local 0x06a)) + (i64.store offset=0x06b align=1 (i32.const 0) (get_local 0x06b)) + (i64.store offset=0x06c align=1 (i32.const 0) (get_local 0x06c)) + (i64.store offset=0x06d align=1 (i32.const 0) (get_local 0x06d)) + (i64.store offset=0x06e align=1 (i32.const 0) (get_local 0x06e)) + (i64.store offset=0x06f align=1 (i32.const 0) (get_local 0x06f)) + (i64.store offset=0x070 align=1 (i32.const 0) (get_local 0x070)) + (i64.store offset=0x071 align=1 (i32.const 0) (get_local 0x071)) + (i64.store offset=0x072 align=1 (i32.const 0) (get_local 0x072)) + (i64.store offset=0x073 align=1 (i32.const 0) (get_local 0x073)) + (i64.store offset=0x074 align=1 (i32.const 0) (get_local 0x074)) + (i64.store offset=0x075 align=1 (i32.const 0) (get_local 0x075)) + (i64.store offset=0x076 align=1 (i32.const 0) (get_local 0x076)) + (i64.store offset=0x077 align=1 (i32.const 0) (get_local 0x077)) + (i64.store offset=0x078 align=1 (i32.const 0) (get_local 0x078)) + (i64.store offset=0x079 align=1 (i32.const 0) (get_local 0x079)) + (i64.store offset=0x07a align=1 (i32.const 0) (get_local 0x07a)) + (i64.store offset=0x07b align=1 (i32.const 0) (get_local 0x07b)) + (i64.store offset=0x07c align=1 (i32.const 0) (get_local 0x07c)) + (i64.store offset=0x07d align=1 (i32.const 0) (get_local 0x07d)) + (i64.store offset=0x07e align=1 (i32.const 0) (get_local 0x07e)) + (i64.store offset=0x07f align=1 (i32.const 0) (get_local 0x07f)) + (i64.store offset=0x080 align=1 (i32.const 0) (get_local 0x080)) + (i64.store offset=0x081 align=1 (i32.const 0) (get_local 0x081)) + (i64.store offset=0x082 align=1 (i32.const 0) (get_local 0x082)) + (i64.store offset=0x083 align=1 (i32.const 0) (get_local 0x083)) + (i64.store offset=0x084 align=1 (i32.const 0) (get_local 0x084)) + (i64.store offset=0x085 align=1 (i32.const 0) (get_local 0x085)) + (i64.store offset=0x086 align=1 (i32.const 0) (get_local 0x086)) + (i64.store offset=0x087 align=1 (i32.const 0) (get_local 0x087)) + (i64.store offset=0x088 align=1 (i32.const 0) (get_local 0x088)) + (i64.store offset=0x089 align=1 (i32.const 0) (get_local 0x089)) + (i64.store offset=0x08a align=1 (i32.const 0) (get_local 0x08a)) + (i64.store offset=0x08b align=1 (i32.const 0) (get_local 0x08b)) + (i64.store offset=0x08c align=1 (i32.const 0) (get_local 0x08c)) + (i64.store offset=0x08d align=1 (i32.const 0) (get_local 0x08d)) + (i64.store offset=0x08e align=1 (i32.const 0) (get_local 0x08e)) + (i64.store offset=0x08f align=1 (i32.const 0) (get_local 0x08f)) + (i64.store offset=0x090 align=1 (i32.const 0) (get_local 0x090)) + (i64.store offset=0x091 align=1 (i32.const 0) (get_local 0x091)) + (i64.store offset=0x092 align=1 (i32.const 0) (get_local 0x092)) + (i64.store offset=0x093 align=1 (i32.const 0) (get_local 0x093)) + (i64.store offset=0x094 align=1 (i32.const 0) (get_local 0x094)) + (i64.store offset=0x095 align=1 (i32.const 0) (get_local 0x095)) + (i64.store offset=0x096 align=1 (i32.const 0) (get_local 0x096)) + (i64.store offset=0x097 align=1 (i32.const 0) (get_local 0x097)) + (i64.store offset=0x098 align=1 (i32.const 0) (get_local 0x098)) + (i64.store offset=0x099 align=1 (i32.const 0) (get_local 0x099)) + (i64.store offset=0x09a align=1 (i32.const 0) (get_local 0x09a)) + (i64.store offset=0x09b align=1 (i32.const 0) (get_local 0x09b)) + (i64.store offset=0x09c align=1 (i32.const 0) (get_local 0x09c)) + (i64.store offset=0x09d align=1 (i32.const 0) (get_local 0x09d)) + (i64.store offset=0x09e align=1 (i32.const 0) (get_local 0x09e)) + (i64.store offset=0x09f align=1 (i32.const 0) (get_local 0x09f)) + (i64.store offset=0x0a0 align=1 (i32.const 0) (get_local 0x0a0)) + (i64.store offset=0x0a1 align=1 (i32.const 0) (get_local 0x0a1)) + (i64.store offset=0x0a2 align=1 (i32.const 0) (get_local 0x0a2)) + (i64.store offset=0x0a3 align=1 (i32.const 0) (get_local 0x0a3)) + (i64.store offset=0x0a4 align=1 (i32.const 0) (get_local 0x0a4)) + (i64.store offset=0x0a5 align=1 (i32.const 0) (get_local 0x0a5)) + (i64.store offset=0x0a6 align=1 (i32.const 0) (get_local 0x0a6)) + (i64.store offset=0x0a7 align=1 (i32.const 0) (get_local 0x0a7)) + (i64.store offset=0x0a8 align=1 (i32.const 0) (get_local 0x0a8)) + (i64.store offset=0x0a9 align=1 (i32.const 0) (get_local 0x0a9)) + (i64.store offset=0x0aa align=1 (i32.const 0) (get_local 0x0aa)) + (i64.store offset=0x0ab align=1 (i32.const 0) (get_local 0x0ab)) + (i64.store offset=0x0ac align=1 (i32.const 0) (get_local 0x0ac)) + (i64.store offset=0x0ad align=1 (i32.const 0) (get_local 0x0ad)) + (i64.store offset=0x0ae align=1 (i32.const 0) (get_local 0x0ae)) + (i64.store offset=0x0af align=1 (i32.const 0) (get_local 0x0af)) + (i64.store offset=0x0b0 align=1 (i32.const 0) (get_local 0x0b0)) + (i64.store offset=0x0b1 align=1 (i32.const 0) (get_local 0x0b1)) + (i64.store offset=0x0b2 align=1 (i32.const 0) (get_local 0x0b2)) + (i64.store offset=0x0b3 align=1 (i32.const 0) (get_local 0x0b3)) + (i64.store offset=0x0b4 align=1 (i32.const 0) (get_local 0x0b4)) + (i64.store offset=0x0b5 align=1 (i32.const 0) (get_local 0x0b5)) + (i64.store offset=0x0b6 align=1 (i32.const 0) (get_local 0x0b6)) + (i64.store offset=0x0b7 align=1 (i32.const 0) (get_local 0x0b7)) + (i64.store offset=0x0b8 align=1 (i32.const 0) (get_local 0x0b8)) + (i64.store offset=0x0b9 align=1 (i32.const 0) (get_local 0x0b9)) + (i64.store offset=0x0ba align=1 (i32.const 0) (get_local 0x0ba)) + (i64.store offset=0x0bb align=1 (i32.const 0) (get_local 0x0bb)) + (i64.store offset=0x0bc align=1 (i32.const 0) (get_local 0x0bc)) + (i64.store offset=0x0bd align=1 (i32.const 0) (get_local 0x0bd)) + (i64.store offset=0x0be align=1 (i32.const 0) (get_local 0x0be)) + (i64.store offset=0x0bf align=1 (i32.const 0) (get_local 0x0bf)) + (i64.store offset=0x0c0 align=1 (i32.const 0) (get_local 0x0c0)) + (i64.store offset=0x0c1 align=1 (i32.const 0) (get_local 0x0c1)) + (i64.store offset=0x0c2 align=1 (i32.const 0) (get_local 0x0c2)) + (i64.store offset=0x0c3 align=1 (i32.const 0) (get_local 0x0c3)) + (i64.store offset=0x0c4 align=1 (i32.const 0) (get_local 0x0c4)) + (i64.store offset=0x0c5 align=1 (i32.const 0) (get_local 0x0c5)) + (i64.store offset=0x0c6 align=1 (i32.const 0) (get_local 0x0c6)) + (i64.store offset=0x0c7 align=1 (i32.const 0) (get_local 0x0c7)) + (i64.store offset=0x0c8 align=1 (i32.const 0) (get_local 0x0c8)) + (i64.store offset=0x0c9 align=1 (i32.const 0) (get_local 0x0c9)) + (i64.store offset=0x0ca align=1 (i32.const 0) (get_local 0x0ca)) + (i64.store offset=0x0cb align=1 (i32.const 0) (get_local 0x0cb)) + (i64.store offset=0x0cc align=1 (i32.const 0) (get_local 0x0cc)) + (i64.store offset=0x0cd align=1 (i32.const 0) (get_local 0x0cd)) + (i64.store offset=0x0ce align=1 (i32.const 0) (get_local 0x0ce)) + (i64.store offset=0x0cf align=1 (i32.const 0) (get_local 0x0cf)) + (i64.store offset=0x0d0 align=1 (i32.const 0) (get_local 0x0d0)) + (i64.store offset=0x0d1 align=1 (i32.const 0) (get_local 0x0d1)) + (i64.store offset=0x0d2 align=1 (i32.const 0) (get_local 0x0d2)) + (i64.store offset=0x0d3 align=1 (i32.const 0) (get_local 0x0d3)) + (i64.store offset=0x0d4 align=1 (i32.const 0) (get_local 0x0d4)) + (i64.store offset=0x0d5 align=1 (i32.const 0) (get_local 0x0d5)) + (i64.store offset=0x0d6 align=1 (i32.const 0) (get_local 0x0d6)) + (i64.store offset=0x0d7 align=1 (i32.const 0) (get_local 0x0d7)) + (i64.store offset=0x0d8 align=1 (i32.const 0) (get_local 0x0d8)) + (i64.store offset=0x0d9 align=1 (i32.const 0) (get_local 0x0d9)) + (i64.store offset=0x0da align=1 (i32.const 0) (get_local 0x0da)) + (i64.store offset=0x0db align=1 (i32.const 0) (get_local 0x0db)) + (i64.store offset=0x0dc align=1 (i32.const 0) (get_local 0x0dc)) + (i64.store offset=0x0dd align=1 (i32.const 0) (get_local 0x0dd)) + (i64.store offset=0x0de align=1 (i32.const 0) (get_local 0x0de)) + (i64.store offset=0x0df align=1 (i32.const 0) (get_local 0x0df)) + (i64.store offset=0x0e0 align=1 (i32.const 0) (get_local 0x0e0)) + (i64.store offset=0x0e1 align=1 (i32.const 0) (get_local 0x0e1)) + (i64.store offset=0x0e2 align=1 (i32.const 0) (get_local 0x0e2)) + (i64.store offset=0x0e3 align=1 (i32.const 0) (get_local 0x0e3)) + (i64.store offset=0x0e4 align=1 (i32.const 0) (get_local 0x0e4)) + (i64.store offset=0x0e5 align=1 (i32.const 0) (get_local 0x0e5)) + (i64.store offset=0x0e6 align=1 (i32.const 0) (get_local 0x0e6)) + (i64.store offset=0x0e7 align=1 (i32.const 0) (get_local 0x0e7)) + (i64.store offset=0x0e8 align=1 (i32.const 0) (get_local 0x0e8)) + (i64.store offset=0x0e9 align=1 (i32.const 0) (get_local 0x0e9)) + (i64.store offset=0x0ea align=1 (i32.const 0) (get_local 0x0ea)) + (i64.store offset=0x0eb align=1 (i32.const 0) (get_local 0x0eb)) + (i64.store offset=0x0ec align=1 (i32.const 0) (get_local 0x0ec)) + (i64.store offset=0x0ed align=1 (i32.const 0) (get_local 0x0ed)) + (i64.store offset=0x0ee align=1 (i32.const 0) (get_local 0x0ee)) + (i64.store offset=0x0ef align=1 (i32.const 0) (get_local 0x0ef)) + (i64.store offset=0x0f0 align=1 (i32.const 0) (get_local 0x0f0)) + (i64.store offset=0x0f1 align=1 (i32.const 0) (get_local 0x0f1)) + (i64.store offset=0x0f2 align=1 (i32.const 0) (get_local 0x0f2)) + (i64.store offset=0x0f3 align=1 (i32.const 0) (get_local 0x0f3)) + (i64.store offset=0x0f4 align=1 (i32.const 0) (get_local 0x0f4)) + (i64.store offset=0x0f5 align=1 (i32.const 0) (get_local 0x0f5)) + (i64.store offset=0x0f6 align=1 (i32.const 0) (get_local 0x0f6)) + (i64.store offset=0x0f7 align=1 (i32.const 0) (get_local 0x0f7)) + (i64.store offset=0x0f8 align=1 (i32.const 0) (get_local 0x0f8)) + (i64.store offset=0x0f9 align=1 (i32.const 0) (get_local 0x0f9)) + (i64.store offset=0x0fa align=1 (i32.const 0) (get_local 0x0fa)) + (i64.store offset=0x0fb align=1 (i32.const 0) (get_local 0x0fb)) + (i64.store offset=0x0fc align=1 (i32.const 0) (get_local 0x0fc)) + (i64.store offset=0x0fd align=1 (i32.const 0) (get_local 0x0fd)) + (i64.store offset=0x0fe align=1 (i32.const 0) (get_local 0x0fe)) + (i64.store offset=0x0ff align=1 (i32.const 0) (get_local 0x0ff)) + (i64.store offset=0x100 align=1 (i32.const 0) (get_local 0x100)) + (i64.store offset=0x101 align=1 (i32.const 0) (get_local 0x101)) + (i64.store offset=0x102 align=1 (i32.const 0) (get_local 0x102)) + (i64.store offset=0x103 align=1 (i32.const 0) (get_local 0x103)) + (i64.store offset=0x104 align=1 (i32.const 0) (get_local 0x104)) + (i64.store offset=0x105 align=1 (i32.const 0) (get_local 0x105)) + (i64.store offset=0x106 align=1 (i32.const 0) (get_local 0x106)) + (i64.store offset=0x107 align=1 (i32.const 0) (get_local 0x107)) + (i64.store offset=0x108 align=1 (i32.const 0) (get_local 0x108)) + (i64.store offset=0x109 align=1 (i32.const 0) (get_local 0x109)) + (i64.store offset=0x10a align=1 (i32.const 0) (get_local 0x10a)) + (i64.store offset=0x10b align=1 (i32.const 0) (get_local 0x10b)) + (i64.store offset=0x10c align=1 (i32.const 0) (get_local 0x10c)) + (i64.store offset=0x10d align=1 (i32.const 0) (get_local 0x10d)) + (i64.store offset=0x10e align=1 (i32.const 0) (get_local 0x10e)) + (i64.store offset=0x10f align=1 (i32.const 0) (get_local 0x10f)) + (i64.store offset=0x110 align=1 (i32.const 0) (get_local 0x110)) + (i64.store offset=0x111 align=1 (i32.const 0) (get_local 0x111)) + (i64.store offset=0x112 align=1 (i32.const 0) (get_local 0x112)) + (i64.store offset=0x113 align=1 (i32.const 0) (get_local 0x113)) + (i64.store offset=0x114 align=1 (i32.const 0) (get_local 0x114)) + (i64.store offset=0x115 align=1 (i32.const 0) (get_local 0x115)) + (i64.store offset=0x116 align=1 (i32.const 0) (get_local 0x116)) + (i64.store offset=0x117 align=1 (i32.const 0) (get_local 0x117)) + (i64.store offset=0x118 align=1 (i32.const 0) (get_local 0x118)) + (i64.store offset=0x119 align=1 (i32.const 0) (get_local 0x119)) + (i64.store offset=0x11a align=1 (i32.const 0) (get_local 0x11a)) + (i64.store offset=0x11b align=1 (i32.const 0) (get_local 0x11b)) + (i64.store offset=0x11c align=1 (i32.const 0) (get_local 0x11c)) + (i64.store offset=0x11d align=1 (i32.const 0) (get_local 0x11d)) + (i64.store offset=0x11e align=1 (i32.const 0) (get_local 0x11e)) + (i64.store offset=0x11f align=1 (i32.const 0) (get_local 0x11f)) + (i64.store offset=0x120 align=1 (i32.const 0) (get_local 0x120)) + (i64.store offset=0x121 align=1 (i32.const 0) (get_local 0x121)) + (i64.store offset=0x122 align=1 (i32.const 0) (get_local 0x122)) + (i64.store offset=0x123 align=1 (i32.const 0) (get_local 0x123)) + (i64.store offset=0x124 align=1 (i32.const 0) (get_local 0x124)) + (i64.store offset=0x125 align=1 (i32.const 0) (get_local 0x125)) + (i64.store offset=0x126 align=1 (i32.const 0) (get_local 0x126)) + (i64.store offset=0x127 align=1 (i32.const 0) (get_local 0x127)) + (i64.store offset=0x128 align=1 (i32.const 0) (get_local 0x128)) + (i64.store offset=0x129 align=1 (i32.const 0) (get_local 0x129)) + (i64.store offset=0x12a align=1 (i32.const 0) (get_local 0x12a)) + (i64.store offset=0x12b align=1 (i32.const 0) (get_local 0x12b)) + (i64.store offset=0x12c align=1 (i32.const 0) (get_local 0x12c)) + (i64.store offset=0x12d align=1 (i32.const 0) (get_local 0x12d)) + (i64.store offset=0x12e align=1 (i32.const 0) (get_local 0x12e)) + (i64.store offset=0x12f align=1 (i32.const 0) (get_local 0x12f)) + (i64.store offset=0x130 align=1 (i32.const 0) (get_local 0x130)) + (i64.store offset=0x131 align=1 (i32.const 0) (get_local 0x131)) + (i64.store offset=0x132 align=1 (i32.const 0) (get_local 0x132)) + (i64.store offset=0x133 align=1 (i32.const 0) (get_local 0x133)) + (i64.store offset=0x134 align=1 (i32.const 0) (get_local 0x134)) + (i64.store offset=0x135 align=1 (i32.const 0) (get_local 0x135)) + (i64.store offset=0x136 align=1 (i32.const 0) (get_local 0x136)) + (i64.store offset=0x137 align=1 (i32.const 0) (get_local 0x137)) + (i64.store offset=0x138 align=1 (i32.const 0) (get_local 0x138)) + (i64.store offset=0x139 align=1 (i32.const 0) (get_local 0x139)) + (i64.store offset=0x13a align=1 (i32.const 0) (get_local 0x13a)) + (i64.store offset=0x13b align=1 (i32.const 0) (get_local 0x13b)) + (i64.store offset=0x13c align=1 (i32.const 0) (get_local 0x13c)) + (i64.store offset=0x13d align=1 (i32.const 0) (get_local 0x13d)) + (i64.store offset=0x13e align=1 (i32.const 0) (get_local 0x13e)) + (i64.store offset=0x13f align=1 (i32.const 0) (get_local 0x13f)) + (i64.store offset=0x140 align=1 (i32.const 0) (get_local 0x140)) + (i64.store offset=0x141 align=1 (i32.const 0) (get_local 0x141)) + (i64.store offset=0x142 align=1 (i32.const 0) (get_local 0x142)) + (i64.store offset=0x143 align=1 (i32.const 0) (get_local 0x143)) + (i64.store offset=0x144 align=1 (i32.const 0) (get_local 0x144)) + (i64.store offset=0x145 align=1 (i32.const 0) (get_local 0x145)) + (i64.store offset=0x146 align=1 (i32.const 0) (get_local 0x146)) + (i64.store offset=0x147 align=1 (i32.const 0) (get_local 0x147)) + (i64.store offset=0x148 align=1 (i32.const 0) (get_local 0x148)) + (i64.store offset=0x149 align=1 (i32.const 0) (get_local 0x149)) + (i64.store offset=0x14a align=1 (i32.const 0) (get_local 0x14a)) + (i64.store offset=0x14b align=1 (i32.const 0) (get_local 0x14b)) + (i64.store offset=0x14c align=1 (i32.const 0) (get_local 0x14c)) + (i64.store offset=0x14d align=1 (i32.const 0) (get_local 0x14d)) + (i64.store offset=0x14e align=1 (i32.const 0) (get_local 0x14e)) + (i64.store offset=0x14f align=1 (i32.const 0) (get_local 0x14f)) + (i64.store offset=0x150 align=1 (i32.const 0) (get_local 0x150)) + (i64.store offset=0x151 align=1 (i32.const 0) (get_local 0x151)) + (i64.store offset=0x152 align=1 (i32.const 0) (get_local 0x152)) + (i64.store offset=0x153 align=1 (i32.const 0) (get_local 0x153)) + (i64.store offset=0x154 align=1 (i32.const 0) (get_local 0x154)) + (i64.store offset=0x155 align=1 (i32.const 0) (get_local 0x155)) + (i64.store offset=0x156 align=1 (i32.const 0) (get_local 0x156)) + (i64.store offset=0x157 align=1 (i32.const 0) (get_local 0x157)) + (i64.store offset=0x158 align=1 (i32.const 0) (get_local 0x158)) + (i64.store offset=0x159 align=1 (i32.const 0) (get_local 0x159)) + (i64.store offset=0x15a align=1 (i32.const 0) (get_local 0x15a)) + (i64.store offset=0x15b align=1 (i32.const 0) (get_local 0x15b)) + (i64.store offset=0x15c align=1 (i32.const 0) (get_local 0x15c)) + (i64.store offset=0x15d align=1 (i32.const 0) (get_local 0x15d)) + (i64.store offset=0x15e align=1 (i32.const 0) (get_local 0x15e)) + (i64.store offset=0x15f align=1 (i32.const 0) (get_local 0x15f)) + (i64.store offset=0x160 align=1 (i32.const 0) (get_local 0x160)) + (i64.store offset=0x161 align=1 (i32.const 0) (get_local 0x161)) + (i64.store offset=0x162 align=1 (i32.const 0) (get_local 0x162)) + (i64.store offset=0x163 align=1 (i32.const 0) (get_local 0x163)) + (i64.store offset=0x164 align=1 (i32.const 0) (get_local 0x164)) + (i64.store offset=0x165 align=1 (i32.const 0) (get_local 0x165)) + (i64.store offset=0x166 align=1 (i32.const 0) (get_local 0x166)) + (i64.store offset=0x167 align=1 (i32.const 0) (get_local 0x167)) + (i64.store offset=0x168 align=1 (i32.const 0) (get_local 0x168)) + (i64.store offset=0x169 align=1 (i32.const 0) (get_local 0x169)) + (i64.store offset=0x16a align=1 (i32.const 0) (get_local 0x16a)) + (i64.store offset=0x16b align=1 (i32.const 0) (get_local 0x16b)) + (i64.store offset=0x16c align=1 (i32.const 0) (get_local 0x16c)) + (i64.store offset=0x16d align=1 (i32.const 0) (get_local 0x16d)) + (i64.store offset=0x16e align=1 (i32.const 0) (get_local 0x16e)) + (i64.store offset=0x16f align=1 (i32.const 0) (get_local 0x16f)) + (i64.store offset=0x170 align=1 (i32.const 0) (get_local 0x170)) + (i64.store offset=0x171 align=1 (i32.const 0) (get_local 0x171)) + (i64.store offset=0x172 align=1 (i32.const 0) (get_local 0x172)) + (i64.store offset=0x173 align=1 (i32.const 0) (get_local 0x173)) + (i64.store offset=0x174 align=1 (i32.const 0) (get_local 0x174)) + (i64.store offset=0x175 align=1 (i32.const 0) (get_local 0x175)) + (i64.store offset=0x176 align=1 (i32.const 0) (get_local 0x176)) + (i64.store offset=0x177 align=1 (i32.const 0) (get_local 0x177)) + (i64.store offset=0x178 align=1 (i32.const 0) (get_local 0x178)) + (i64.store offset=0x179 align=1 (i32.const 0) (get_local 0x179)) + (i64.store offset=0x17a align=1 (i32.const 0) (get_local 0x17a)) + (i64.store offset=0x17b align=1 (i32.const 0) (get_local 0x17b)) + (i64.store offset=0x17c align=1 (i32.const 0) (get_local 0x17c)) + (i64.store offset=0x17d align=1 (i32.const 0) (get_local 0x17d)) + (i64.store offset=0x17e align=1 (i32.const 0) (get_local 0x17e)) + (i64.store offset=0x17f align=1 (i32.const 0) (get_local 0x17f)) + (i64.store offset=0x180 align=1 (i32.const 0) (get_local 0x180)) + (i64.store offset=0x181 align=1 (i32.const 0) (get_local 0x181)) + (i64.store offset=0x182 align=1 (i32.const 0) (get_local 0x182)) + (i64.store offset=0x183 align=1 (i32.const 0) (get_local 0x183)) + (i64.store offset=0x184 align=1 (i32.const 0) (get_local 0x184)) + (i64.store offset=0x185 align=1 (i32.const 0) (get_local 0x185)) + (i64.store offset=0x186 align=1 (i32.const 0) (get_local 0x186)) + (i64.store offset=0x187 align=1 (i32.const 0) (get_local 0x187)) + (i64.store offset=0x188 align=1 (i32.const 0) (get_local 0x188)) + (i64.store offset=0x189 align=1 (i32.const 0) (get_local 0x189)) + (i64.store offset=0x18a align=1 (i32.const 0) (get_local 0x18a)) + (i64.store offset=0x18b align=1 (i32.const 0) (get_local 0x18b)) + (i64.store offset=0x18c align=1 (i32.const 0) (get_local 0x18c)) + (i64.store offset=0x18d align=1 (i32.const 0) (get_local 0x18d)) + (i64.store offset=0x18e align=1 (i32.const 0) (get_local 0x18e)) + (i64.store offset=0x18f align=1 (i32.const 0) (get_local 0x18f)) + (i64.store offset=0x190 align=1 (i32.const 0) (get_local 0x190)) + (i64.store offset=0x191 align=1 (i32.const 0) (get_local 0x191)) + (i64.store offset=0x192 align=1 (i32.const 0) (get_local 0x192)) + (i64.store offset=0x193 align=1 (i32.const 0) (get_local 0x193)) + (i64.store offset=0x194 align=1 (i32.const 0) (get_local 0x194)) + (i64.store offset=0x195 align=1 (i32.const 0) (get_local 0x195)) + (i64.store offset=0x196 align=1 (i32.const 0) (get_local 0x196)) + (i64.store offset=0x197 align=1 (i32.const 0) (get_local 0x197)) + (i64.store offset=0x198 align=1 (i32.const 0) (get_local 0x198)) + (i64.store offset=0x199 align=1 (i32.const 0) (get_local 0x199)) + (i64.store offset=0x19a align=1 (i32.const 0) (get_local 0x19a)) + (i64.store offset=0x19b align=1 (i32.const 0) (get_local 0x19b)) + (i64.store offset=0x19c align=1 (i32.const 0) (get_local 0x19c)) + (i64.store offset=0x19d align=1 (i32.const 0) (get_local 0x19d)) + (i64.store offset=0x19e align=1 (i32.const 0) (get_local 0x19e)) + (i64.store offset=0x19f align=1 (i32.const 0) (get_local 0x19f)) + (i64.store offset=0x1a0 align=1 (i32.const 0) (get_local 0x1a0)) + (i64.store offset=0x1a1 align=1 (i32.const 0) (get_local 0x1a1)) + (i64.store offset=0x1a2 align=1 (i32.const 0) (get_local 0x1a2)) + (i64.store offset=0x1a3 align=1 (i32.const 0) (get_local 0x1a3)) + (i64.store offset=0x1a4 align=1 (i32.const 0) (get_local 0x1a4)) + (i64.store offset=0x1a5 align=1 (i32.const 0) (get_local 0x1a5)) + (i64.store offset=0x1a6 align=1 (i32.const 0) (get_local 0x1a6)) + (i64.store offset=0x1a7 align=1 (i32.const 0) (get_local 0x1a7)) + (i64.store offset=0x1a8 align=1 (i32.const 0) (get_local 0x1a8)) + (i64.store offset=0x1a9 align=1 (i32.const 0) (get_local 0x1a9)) + (i64.store offset=0x1aa align=1 (i32.const 0) (get_local 0x1aa)) + (i64.store offset=0x1ab align=1 (i32.const 0) (get_local 0x1ab)) + (i64.store offset=0x1ac align=1 (i32.const 0) (get_local 0x1ac)) + (i64.store offset=0x1ad align=1 (i32.const 0) (get_local 0x1ad)) + (i64.store offset=0x1ae align=1 (i32.const 0) (get_local 0x1ae)) + (i64.store offset=0x1af align=1 (i32.const 0) (get_local 0x1af)) + (i64.store offset=0x1b0 align=1 (i32.const 0) (get_local 0x1b0)) + (i64.store offset=0x1b1 align=1 (i32.const 0) (get_local 0x1b1)) + (i64.store offset=0x1b2 align=1 (i32.const 0) (get_local 0x1b2)) + (i64.store offset=0x1b3 align=1 (i32.const 0) (get_local 0x1b3)) + (i64.store offset=0x1b4 align=1 (i32.const 0) (get_local 0x1b4)) + (i64.store offset=0x1b5 align=1 (i32.const 0) (get_local 0x1b5)) + (i64.store offset=0x1b6 align=1 (i32.const 0) (get_local 0x1b6)) + (i64.store offset=0x1b7 align=1 (i32.const 0) (get_local 0x1b7)) + (i64.store offset=0x1b8 align=1 (i32.const 0) (get_local 0x1b8)) + (i64.store offset=0x1b9 align=1 (i32.const 0) (get_local 0x1b9)) + (i64.store offset=0x1ba align=1 (i32.const 0) (get_local 0x1ba)) + (i64.store offset=0x1bb align=1 (i32.const 0) (get_local 0x1bb)) + (i64.store offset=0x1bc align=1 (i32.const 0) (get_local 0x1bc)) + (i64.store offset=0x1bd align=1 (i32.const 0) (get_local 0x1bd)) + (i64.store offset=0x1be align=1 (i32.const 0) (get_local 0x1be)) + (i64.store offset=0x1bf align=1 (i32.const 0) (get_local 0x1bf)) + (i64.store offset=0x1c0 align=1 (i32.const 0) (get_local 0x1c0)) + (i64.store offset=0x1c1 align=1 (i32.const 0) (get_local 0x1c1)) + (i64.store offset=0x1c2 align=1 (i32.const 0) (get_local 0x1c2)) + (i64.store offset=0x1c3 align=1 (i32.const 0) (get_local 0x1c3)) + (i64.store offset=0x1c4 align=1 (i32.const 0) (get_local 0x1c4)) + (i64.store offset=0x1c5 align=1 (i32.const 0) (get_local 0x1c5)) + (i64.store offset=0x1c6 align=1 (i32.const 0) (get_local 0x1c6)) + (i64.store offset=0x1c7 align=1 (i32.const 0) (get_local 0x1c7)) + (i64.store offset=0x1c8 align=1 (i32.const 0) (get_local 0x1c8)) + (i64.store offset=0x1c9 align=1 (i32.const 0) (get_local 0x1c9)) + (i64.store offset=0x1ca align=1 (i32.const 0) (get_local 0x1ca)) + (i64.store offset=0x1cb align=1 (i32.const 0) (get_local 0x1cb)) + (i64.store offset=0x1cc align=1 (i32.const 0) (get_local 0x1cc)) + (i64.store offset=0x1cd align=1 (i32.const 0) (get_local 0x1cd)) + (i64.store offset=0x1ce align=1 (i32.const 0) (get_local 0x1ce)) + (i64.store offset=0x1cf align=1 (i32.const 0) (get_local 0x1cf)) + (i64.store offset=0x1d0 align=1 (i32.const 0) (get_local 0x1d0)) + (i64.store offset=0x1d1 align=1 (i32.const 0) (get_local 0x1d1)) + (i64.store offset=0x1d2 align=1 (i32.const 0) (get_local 0x1d2)) + (i64.store offset=0x1d3 align=1 (i32.const 0) (get_local 0x1d3)) + (i64.store offset=0x1d4 align=1 (i32.const 0) (get_local 0x1d4)) + (i64.store offset=0x1d5 align=1 (i32.const 0) (get_local 0x1d5)) + (i64.store offset=0x1d6 align=1 (i32.const 0) (get_local 0x1d6)) + (i64.store offset=0x1d7 align=1 (i32.const 0) (get_local 0x1d7)) + (i64.store offset=0x1d8 align=1 (i32.const 0) (get_local 0x1d8)) + (i64.store offset=0x1d9 align=1 (i32.const 0) (get_local 0x1d9)) + (i64.store offset=0x1da align=1 (i32.const 0) (get_local 0x1da)) + (i64.store offset=0x1db align=1 (i32.const 0) (get_local 0x1db)) + (i64.store offset=0x1dc align=1 (i32.const 0) (get_local 0x1dc)) + (i64.store offset=0x1dd align=1 (i32.const 0) (get_local 0x1dd)) + (i64.store offset=0x1de align=1 (i32.const 0) (get_local 0x1de)) + (i64.store offset=0x1df align=1 (i32.const 0) (get_local 0x1df)) + (i64.store offset=0x1e0 align=1 (i32.const 0) (get_local 0x1e0)) + (i64.store offset=0x1e1 align=1 (i32.const 0) (get_local 0x1e1)) + (i64.store offset=0x1e2 align=1 (i32.const 0) (get_local 0x1e2)) + (i64.store offset=0x1e3 align=1 (i32.const 0) (get_local 0x1e3)) + (i64.store offset=0x1e4 align=1 (i32.const 0) (get_local 0x1e4)) + (i64.store offset=0x1e5 align=1 (i32.const 0) (get_local 0x1e5)) + (i64.store offset=0x1e6 align=1 (i32.const 0) (get_local 0x1e6)) + (i64.store offset=0x1e7 align=1 (i32.const 0) (get_local 0x1e7)) + (i64.store offset=0x1e8 align=1 (i32.const 0) (get_local 0x1e8)) + (i64.store offset=0x1e9 align=1 (i32.const 0) (get_local 0x1e9)) + (i64.store offset=0x1ea align=1 (i32.const 0) (get_local 0x1ea)) + (i64.store offset=0x1eb align=1 (i32.const 0) (get_local 0x1eb)) + (i64.store offset=0x1ec align=1 (i32.const 0) (get_local 0x1ec)) + (i64.store offset=0x1ed align=1 (i32.const 0) (get_local 0x1ed)) + (i64.store offset=0x1ee align=1 (i32.const 0) (get_local 0x1ee)) + (i64.store offset=0x1ef align=1 (i32.const 0) (get_local 0x1ef)) + (i64.store offset=0x1f0 align=1 (i32.const 0) (get_local 0x1f0)) + (i64.store offset=0x1f1 align=1 (i32.const 0) (get_local 0x1f1)) + (i64.store offset=0x1f2 align=1 (i32.const 0) (get_local 0x1f2)) + (i64.store offset=0x1f3 align=1 (i32.const 0) (get_local 0x1f3)) + (i64.store offset=0x1f4 align=1 (i32.const 0) (get_local 0x1f4)) + (i64.store offset=0x1f5 align=1 (i32.const 0) (get_local 0x1f5)) + (i64.store offset=0x1f6 align=1 (i32.const 0) (get_local 0x1f6)) + (i64.store offset=0x1f7 align=1 (i32.const 0) (get_local 0x1f7)) + (i64.store offset=0x1f8 align=1 (i32.const 0) (get_local 0x1f8)) + (i64.store offset=0x1f9 align=1 (i32.const 0) (get_local 0x1f9)) + (i64.store offset=0x1fa align=1 (i32.const 0) (get_local 0x1fa)) + (i64.store offset=0x1fb align=1 (i32.const 0) (get_local 0x1fb)) + (i64.store offset=0x1fc align=1 (i32.const 0) (get_local 0x1fc)) + (i64.store offset=0x1fd align=1 (i32.const 0) (get_local 0x1fd)) + (i64.store offset=0x1fe align=1 (i32.const 0) (get_local 0x1fe)) + (i64.store offset=0x1ff align=1 (i32.const 0) (get_local 0x1ff)) + (i64.store offset=0x200 align=1 (i32.const 0) (get_local 0x200)) + (i64.store offset=0x201 align=1 (i32.const 0) (get_local 0x201)) + (i64.store offset=0x202 align=1 (i32.const 0) (get_local 0x202)) + (i64.store offset=0x203 align=1 (i32.const 0) (get_local 0x203)) + (i64.store offset=0x204 align=1 (i32.const 0) (get_local 0x204)) + (i64.store offset=0x205 align=1 (i32.const 0) (get_local 0x205)) + (i64.store offset=0x206 align=1 (i32.const 0) (get_local 0x206)) + (i64.store offset=0x207 align=1 (i32.const 0) (get_local 0x207)) + (i64.store offset=0x208 align=1 (i32.const 0) (get_local 0x208)) + (i64.store offset=0x209 align=1 (i32.const 0) (get_local 0x209)) + (i64.store offset=0x20a align=1 (i32.const 0) (get_local 0x20a)) + (i64.store offset=0x20b align=1 (i32.const 0) (get_local 0x20b)) + (i64.store offset=0x20c align=1 (i32.const 0) (get_local 0x20c)) + (i64.store offset=0x20d align=1 (i32.const 0) (get_local 0x20d)) + (i64.store offset=0x20e align=1 (i32.const 0) (get_local 0x20e)) + (i64.store offset=0x20f align=1 (i32.const 0) (get_local 0x20f)) + (i64.store offset=0x210 align=1 (i32.const 0) (get_local 0x210)) + (i64.store offset=0x211 align=1 (i32.const 0) (get_local 0x211)) + (i64.store offset=0x212 align=1 (i32.const 0) (get_local 0x212)) + (i64.store offset=0x213 align=1 (i32.const 0) (get_local 0x213)) + (i64.store offset=0x214 align=1 (i32.const 0) (get_local 0x214)) + (i64.store offset=0x215 align=1 (i32.const 0) (get_local 0x215)) + (i64.store offset=0x216 align=1 (i32.const 0) (get_local 0x216)) + (i64.store offset=0x217 align=1 (i32.const 0) (get_local 0x217)) + (i64.store offset=0x218 align=1 (i32.const 0) (get_local 0x218)) + (i64.store offset=0x219 align=1 (i32.const 0) (get_local 0x219)) + (i64.store offset=0x21a align=1 (i32.const 0) (get_local 0x21a)) + (i64.store offset=0x21b align=1 (i32.const 0) (get_local 0x21b)) + (i64.store offset=0x21c align=1 (i32.const 0) (get_local 0x21c)) + (i64.store offset=0x21d align=1 (i32.const 0) (get_local 0x21d)) + (i64.store offset=0x21e align=1 (i32.const 0) (get_local 0x21e)) + (i64.store offset=0x21f align=1 (i32.const 0) (get_local 0x21f)) + (i64.store offset=0x220 align=1 (i32.const 0) (get_local 0x220)) + (i64.store offset=0x221 align=1 (i32.const 0) (get_local 0x221)) + (i64.store offset=0x222 align=1 (i32.const 0) (get_local 0x222)) + (i64.store offset=0x223 align=1 (i32.const 0) (get_local 0x223)) + (i64.store offset=0x224 align=1 (i32.const 0) (get_local 0x224)) + (i64.store offset=0x225 align=1 (i32.const 0) (get_local 0x225)) + (i64.store offset=0x226 align=1 (i32.const 0) (get_local 0x226)) + (i64.store offset=0x227 align=1 (i32.const 0) (get_local 0x227)) + (i64.store offset=0x228 align=1 (i32.const 0) (get_local 0x228)) + (i64.store offset=0x229 align=1 (i32.const 0) (get_local 0x229)) + (i64.store offset=0x22a align=1 (i32.const 0) (get_local 0x22a)) + (i64.store offset=0x22b align=1 (i32.const 0) (get_local 0x22b)) + (i64.store offset=0x22c align=1 (i32.const 0) (get_local 0x22c)) + (i64.store offset=0x22d align=1 (i32.const 0) (get_local 0x22d)) + (i64.store offset=0x22e align=1 (i32.const 0) (get_local 0x22e)) + (i64.store offset=0x22f align=1 (i32.const 0) (get_local 0x22f)) + (i64.store offset=0x230 align=1 (i32.const 0) (get_local 0x230)) + (i64.store offset=0x231 align=1 (i32.const 0) (get_local 0x231)) + (i64.store offset=0x232 align=1 (i32.const 0) (get_local 0x232)) + (i64.store offset=0x233 align=1 (i32.const 0) (get_local 0x233)) + (i64.store offset=0x234 align=1 (i32.const 0) (get_local 0x234)) + (i64.store offset=0x235 align=1 (i32.const 0) (get_local 0x235)) + (i64.store offset=0x236 align=1 (i32.const 0) (get_local 0x236)) + (i64.store offset=0x237 align=1 (i32.const 0) (get_local 0x237)) + (i64.store offset=0x238 align=1 (i32.const 0) (get_local 0x238)) + (i64.store offset=0x239 align=1 (i32.const 0) (get_local 0x239)) + (i64.store offset=0x23a align=1 (i32.const 0) (get_local 0x23a)) + (i64.store offset=0x23b align=1 (i32.const 0) (get_local 0x23b)) + (i64.store offset=0x23c align=1 (i32.const 0) (get_local 0x23c)) + (i64.store offset=0x23d align=1 (i32.const 0) (get_local 0x23d)) + (i64.store offset=0x23e align=1 (i32.const 0) (get_local 0x23e)) + (i64.store offset=0x23f align=1 (i32.const 0) (get_local 0x23f)) + (i64.store offset=0x240 align=1 (i32.const 0) (get_local 0x240)) + (i64.store offset=0x241 align=1 (i32.const 0) (get_local 0x241)) + (i64.store offset=0x242 align=1 (i32.const 0) (get_local 0x242)) + (i64.store offset=0x243 align=1 (i32.const 0) (get_local 0x243)) + (i64.store offset=0x244 align=1 (i32.const 0) (get_local 0x244)) + (i64.store offset=0x245 align=1 (i32.const 0) (get_local 0x245)) + (i64.store offset=0x246 align=1 (i32.const 0) (get_local 0x246)) + (i64.store offset=0x247 align=1 (i32.const 0) (get_local 0x247)) + (i64.store offset=0x248 align=1 (i32.const 0) (get_local 0x248)) + (i64.store offset=0x249 align=1 (i32.const 0) (get_local 0x249)) + (i64.store offset=0x24a align=1 (i32.const 0) (get_local 0x24a)) + (i64.store offset=0x24b align=1 (i32.const 0) (get_local 0x24b)) + (i64.store offset=0x24c align=1 (i32.const 0) (get_local 0x24c)) + (i64.store offset=0x24d align=1 (i32.const 0) (get_local 0x24d)) + (i64.store offset=0x24e align=1 (i32.const 0) (get_local 0x24e)) + (i64.store offset=0x24f align=1 (i32.const 0) (get_local 0x24f)) + (i64.store offset=0x250 align=1 (i32.const 0) (get_local 0x250)) + (i64.store offset=0x251 align=1 (i32.const 0) (get_local 0x251)) + (i64.store offset=0x252 align=1 (i32.const 0) (get_local 0x252)) + (i64.store offset=0x253 align=1 (i32.const 0) (get_local 0x253)) + (i64.store offset=0x254 align=1 (i32.const 0) (get_local 0x254)) + (i64.store offset=0x255 align=1 (i32.const 0) (get_local 0x255)) + (i64.store offset=0x256 align=1 (i32.const 0) (get_local 0x256)) + (i64.store offset=0x257 align=1 (i32.const 0) (get_local 0x257)) + (i64.store offset=0x258 align=1 (i32.const 0) (get_local 0x258)) + (i64.store offset=0x259 align=1 (i32.const 0) (get_local 0x259)) + (i64.store offset=0x25a align=1 (i32.const 0) (get_local 0x25a)) + (i64.store offset=0x25b align=1 (i32.const 0) (get_local 0x25b)) + (i64.store offset=0x25c align=1 (i32.const 0) (get_local 0x25c)) + (i64.store offset=0x25d align=1 (i32.const 0) (get_local 0x25d)) + (i64.store offset=0x25e align=1 (i32.const 0) (get_local 0x25e)) + (i64.store offset=0x25f align=1 (i32.const 0) (get_local 0x25f)) + (i64.store offset=0x260 align=1 (i32.const 0) (get_local 0x260)) + (i64.store offset=0x261 align=1 (i32.const 0) (get_local 0x261)) + (i64.store offset=0x262 align=1 (i32.const 0) (get_local 0x262)) + (i64.store offset=0x263 align=1 (i32.const 0) (get_local 0x263)) + (i64.store offset=0x264 align=1 (i32.const 0) (get_local 0x264)) + (i64.store offset=0x265 align=1 (i32.const 0) (get_local 0x265)) + (i64.store offset=0x266 align=1 (i32.const 0) (get_local 0x266)) + (i64.store offset=0x267 align=1 (i32.const 0) (get_local 0x267)) + (i64.store offset=0x268 align=1 (i32.const 0) (get_local 0x268)) + (i64.store offset=0x269 align=1 (i32.const 0) (get_local 0x269)) + (i64.store offset=0x26a align=1 (i32.const 0) (get_local 0x26a)) + (i64.store offset=0x26b align=1 (i32.const 0) (get_local 0x26b)) + (i64.store offset=0x26c align=1 (i32.const 0) (get_local 0x26c)) + (i64.store offset=0x26d align=1 (i32.const 0) (get_local 0x26d)) + (i64.store offset=0x26e align=1 (i32.const 0) (get_local 0x26e)) + (i64.store offset=0x26f align=1 (i32.const 0) (get_local 0x26f)) + (i64.store offset=0x270 align=1 (i32.const 0) (get_local 0x270)) + (i64.store offset=0x271 align=1 (i32.const 0) (get_local 0x271)) + (i64.store offset=0x272 align=1 (i32.const 0) (get_local 0x272)) + (i64.store offset=0x273 align=1 (i32.const 0) (get_local 0x273)) + (i64.store offset=0x274 align=1 (i32.const 0) (get_local 0x274)) + (i64.store offset=0x275 align=1 (i32.const 0) (get_local 0x275)) + (i64.store offset=0x276 align=1 (i32.const 0) (get_local 0x276)) + (i64.store offset=0x277 align=1 (i32.const 0) (get_local 0x277)) + (i64.store offset=0x278 align=1 (i32.const 0) (get_local 0x278)) + (i64.store offset=0x279 align=1 (i32.const 0) (get_local 0x279)) + (i64.store offset=0x27a align=1 (i32.const 0) (get_local 0x27a)) + (i64.store offset=0x27b align=1 (i32.const 0) (get_local 0x27b)) + (i64.store offset=0x27c align=1 (i32.const 0) (get_local 0x27c)) + (i64.store offset=0x27d align=1 (i32.const 0) (get_local 0x27d)) + (i64.store offset=0x27e align=1 (i32.const 0) (get_local 0x27e)) + (i64.store offset=0x27f align=1 (i32.const 0) (get_local 0x27f)) + (i64.store offset=0x280 align=1 (i32.const 0) (get_local 0x280)) + (i64.store offset=0x281 align=1 (i32.const 0) (get_local 0x281)) + (i64.store offset=0x282 align=1 (i32.const 0) (get_local 0x282)) + (i64.store offset=0x283 align=1 (i32.const 0) (get_local 0x283)) + (i64.store offset=0x284 align=1 (i32.const 0) (get_local 0x284)) + (i64.store offset=0x285 align=1 (i32.const 0) (get_local 0x285)) + (i64.store offset=0x286 align=1 (i32.const 0) (get_local 0x286)) + (i64.store offset=0x287 align=1 (i32.const 0) (get_local 0x287)) + (i64.store offset=0x288 align=1 (i32.const 0) (get_local 0x288)) + (i64.store offset=0x289 align=1 (i32.const 0) (get_local 0x289)) + (i64.store offset=0x28a align=1 (i32.const 0) (get_local 0x28a)) + (i64.store offset=0x28b align=1 (i32.const 0) (get_local 0x28b)) + (i64.store offset=0x28c align=1 (i32.const 0) (get_local 0x28c)) + (i64.store offset=0x28d align=1 (i32.const 0) (get_local 0x28d)) + (i64.store offset=0x28e align=1 (i32.const 0) (get_local 0x28e)) + (i64.store offset=0x28f align=1 (i32.const 0) (get_local 0x28f)) + (i64.store offset=0x290 align=1 (i32.const 0) (get_local 0x290)) + (i64.store offset=0x291 align=1 (i32.const 0) (get_local 0x291)) + (i64.store offset=0x292 align=1 (i32.const 0) (get_local 0x292)) + (i64.store offset=0x293 align=1 (i32.const 0) (get_local 0x293)) + (i64.store offset=0x294 align=1 (i32.const 0) (get_local 0x294)) + (i64.store offset=0x295 align=1 (i32.const 0) (get_local 0x295)) + (i64.store offset=0x296 align=1 (i32.const 0) (get_local 0x296)) + (i64.store offset=0x297 align=1 (i32.const 0) (get_local 0x297)) + (i64.store offset=0x298 align=1 (i32.const 0) (get_local 0x298)) + (i64.store offset=0x299 align=1 (i32.const 0) (get_local 0x299)) + (i64.store offset=0x29a align=1 (i32.const 0) (get_local 0x29a)) + (i64.store offset=0x29b align=1 (i32.const 0) (get_local 0x29b)) + (i64.store offset=0x29c align=1 (i32.const 0) (get_local 0x29c)) + (i64.store offset=0x29d align=1 (i32.const 0) (get_local 0x29d)) + (i64.store offset=0x29e align=1 (i32.const 0) (get_local 0x29e)) + (i64.store offset=0x29f align=1 (i32.const 0) (get_local 0x29f)) + (i64.store offset=0x2a0 align=1 (i32.const 0) (get_local 0x2a0)) + (i64.store offset=0x2a1 align=1 (i32.const 0) (get_local 0x2a1)) + (i64.store offset=0x2a2 align=1 (i32.const 0) (get_local 0x2a2)) + (i64.store offset=0x2a3 align=1 (i32.const 0) (get_local 0x2a3)) + (i64.store offset=0x2a4 align=1 (i32.const 0) (get_local 0x2a4)) + (i64.store offset=0x2a5 align=1 (i32.const 0) (get_local 0x2a5)) + (i64.store offset=0x2a6 align=1 (i32.const 0) (get_local 0x2a6)) + (i64.store offset=0x2a7 align=1 (i32.const 0) (get_local 0x2a7)) + (i64.store offset=0x2a8 align=1 (i32.const 0) (get_local 0x2a8)) + (i64.store offset=0x2a9 align=1 (i32.const 0) (get_local 0x2a9)) + (i64.store offset=0x2aa align=1 (i32.const 0) (get_local 0x2aa)) + (i64.store offset=0x2ab align=1 (i32.const 0) (get_local 0x2ab)) + (i64.store offset=0x2ac align=1 (i32.const 0) (get_local 0x2ac)) + (i64.store offset=0x2ad align=1 (i32.const 0) (get_local 0x2ad)) + (i64.store offset=0x2ae align=1 (i32.const 0) (get_local 0x2ae)) + (i64.store offset=0x2af align=1 (i32.const 0) (get_local 0x2af)) + (i64.store offset=0x2b0 align=1 (i32.const 0) (get_local 0x2b0)) + (i64.store offset=0x2b1 align=1 (i32.const 0) (get_local 0x2b1)) + (i64.store offset=0x2b2 align=1 (i32.const 0) (get_local 0x2b2)) + (i64.store offset=0x2b3 align=1 (i32.const 0) (get_local 0x2b3)) + (i64.store offset=0x2b4 align=1 (i32.const 0) (get_local 0x2b4)) + (i64.store offset=0x2b5 align=1 (i32.const 0) (get_local 0x2b5)) + (i64.store offset=0x2b6 align=1 (i32.const 0) (get_local 0x2b6)) + (i64.store offset=0x2b7 align=1 (i32.const 0) (get_local 0x2b7)) + (i64.store offset=0x2b8 align=1 (i32.const 0) (get_local 0x2b8)) + (i64.store offset=0x2b9 align=1 (i32.const 0) (get_local 0x2b9)) + (i64.store offset=0x2ba align=1 (i32.const 0) (get_local 0x2ba)) + (i64.store offset=0x2bb align=1 (i32.const 0) (get_local 0x2bb)) + (i64.store offset=0x2bc align=1 (i32.const 0) (get_local 0x2bc)) + (i64.store offset=0x2bd align=1 (i32.const 0) (get_local 0x2bd)) + (i64.store offset=0x2be align=1 (i32.const 0) (get_local 0x2be)) + (i64.store offset=0x2bf align=1 (i32.const 0) (get_local 0x2bf)) + (i64.store offset=0x2c0 align=1 (i32.const 0) (get_local 0x2c0)) + (i64.store offset=0x2c1 align=1 (i32.const 0) (get_local 0x2c1)) + (i64.store offset=0x2c2 align=1 (i32.const 0) (get_local 0x2c2)) + (i64.store offset=0x2c3 align=1 (i32.const 0) (get_local 0x2c3)) + (i64.store offset=0x2c4 align=1 (i32.const 0) (get_local 0x2c4)) + (i64.store offset=0x2c5 align=1 (i32.const 0) (get_local 0x2c5)) + (i64.store offset=0x2c6 align=1 (i32.const 0) (get_local 0x2c6)) + (i64.store offset=0x2c7 align=1 (i32.const 0) (get_local 0x2c7)) + (i64.store offset=0x2c8 align=1 (i32.const 0) (get_local 0x2c8)) + (i64.store offset=0x2c9 align=1 (i32.const 0) (get_local 0x2c9)) + (i64.store offset=0x2ca align=1 (i32.const 0) (get_local 0x2ca)) + (i64.store offset=0x2cb align=1 (i32.const 0) (get_local 0x2cb)) + (i64.store offset=0x2cc align=1 (i32.const 0) (get_local 0x2cc)) + (i64.store offset=0x2cd align=1 (i32.const 0) (get_local 0x2cd)) + (i64.store offset=0x2ce align=1 (i32.const 0) (get_local 0x2ce)) + (i64.store offset=0x2cf align=1 (i32.const 0) (get_local 0x2cf)) + (i64.store offset=0x2d0 align=1 (i32.const 0) (get_local 0x2d0)) + (i64.store offset=0x2d1 align=1 (i32.const 0) (get_local 0x2d1)) + (i64.store offset=0x2d2 align=1 (i32.const 0) (get_local 0x2d2)) + (i64.store offset=0x2d3 align=1 (i32.const 0) (get_local 0x2d3)) + (i64.store offset=0x2d4 align=1 (i32.const 0) (get_local 0x2d4)) + (i64.store offset=0x2d5 align=1 (i32.const 0) (get_local 0x2d5)) + (i64.store offset=0x2d6 align=1 (i32.const 0) (get_local 0x2d6)) + (i64.store offset=0x2d7 align=1 (i32.const 0) (get_local 0x2d7)) + (i64.store offset=0x2d8 align=1 (i32.const 0) (get_local 0x2d8)) + (i64.store offset=0x2d9 align=1 (i32.const 0) (get_local 0x2d9)) + (i64.store offset=0x2da align=1 (i32.const 0) (get_local 0x2da)) + (i64.store offset=0x2db align=1 (i32.const 0) (get_local 0x2db)) + (i64.store offset=0x2dc align=1 (i32.const 0) (get_local 0x2dc)) + (i64.store offset=0x2dd align=1 (i32.const 0) (get_local 0x2dd)) + (i64.store offset=0x2de align=1 (i32.const 0) (get_local 0x2de)) + (i64.store offset=0x2df align=1 (i32.const 0) (get_local 0x2df)) + (i64.store offset=0x2e0 align=1 (i32.const 0) (get_local 0x2e0)) + (i64.store offset=0x2e1 align=1 (i32.const 0) (get_local 0x2e1)) + (i64.store offset=0x2e2 align=1 (i32.const 0) (get_local 0x2e2)) + (i64.store offset=0x2e3 align=1 (i32.const 0) (get_local 0x2e3)) + (i64.store offset=0x2e4 align=1 (i32.const 0) (get_local 0x2e4)) + (i64.store offset=0x2e5 align=1 (i32.const 0) (get_local 0x2e5)) + (i64.store offset=0x2e6 align=1 (i32.const 0) (get_local 0x2e6)) + (i64.store offset=0x2e7 align=1 (i32.const 0) (get_local 0x2e7)) + (i64.store offset=0x2e8 align=1 (i32.const 0) (get_local 0x2e8)) + (i64.store offset=0x2e9 align=1 (i32.const 0) (get_local 0x2e9)) + (i64.store offset=0x2ea align=1 (i32.const 0) (get_local 0x2ea)) + (i64.store offset=0x2eb align=1 (i32.const 0) (get_local 0x2eb)) + (i64.store offset=0x2ec align=1 (i32.const 0) (get_local 0x2ec)) + (i64.store offset=0x2ed align=1 (i32.const 0) (get_local 0x2ed)) + (i64.store offset=0x2ee align=1 (i32.const 0) (get_local 0x2ee)) + (i64.store offset=0x2ef align=1 (i32.const 0) (get_local 0x2ef)) + (i64.store offset=0x2f0 align=1 (i32.const 0) (get_local 0x2f0)) + (i64.store offset=0x2f1 align=1 (i32.const 0) (get_local 0x2f1)) + (i64.store offset=0x2f2 align=1 (i32.const 0) (get_local 0x2f2)) + (i64.store offset=0x2f3 align=1 (i32.const 0) (get_local 0x2f3)) + (i64.store offset=0x2f4 align=1 (i32.const 0) (get_local 0x2f4)) + (i64.store offset=0x2f5 align=1 (i32.const 0) (get_local 0x2f5)) + (i64.store offset=0x2f6 align=1 (i32.const 0) (get_local 0x2f6)) + (i64.store offset=0x2f7 align=1 (i32.const 0) (get_local 0x2f7)) + (i64.store offset=0x2f8 align=1 (i32.const 0) (get_local 0x2f8)) + (i64.store offset=0x2f9 align=1 (i32.const 0) (get_local 0x2f9)) + (i64.store offset=0x2fa align=1 (i32.const 0) (get_local 0x2fa)) + (i64.store offset=0x2fb align=1 (i32.const 0) (get_local 0x2fb)) + (i64.store offset=0x2fc align=1 (i32.const 0) (get_local 0x2fc)) + (i64.store offset=0x2fd align=1 (i32.const 0) (get_local 0x2fd)) + (i64.store offset=0x2fe align=1 (i32.const 0) (get_local 0x2fe)) + (i64.store offset=0x2ff align=1 (i32.const 0) (get_local 0x2ff)) + (i64.store offset=0x300 align=1 (i32.const 0) (get_local 0x300)) + (i64.store offset=0x301 align=1 (i32.const 0) (get_local 0x301)) + (i64.store offset=0x302 align=1 (i32.const 0) (get_local 0x302)) + (i64.store offset=0x303 align=1 (i32.const 0) (get_local 0x303)) + (i64.store offset=0x304 align=1 (i32.const 0) (get_local 0x304)) + (i64.store offset=0x305 align=1 (i32.const 0) (get_local 0x305)) + (i64.store offset=0x306 align=1 (i32.const 0) (get_local 0x306)) + (i64.store offset=0x307 align=1 (i32.const 0) (get_local 0x307)) + (i64.store offset=0x308 align=1 (i32.const 0) (get_local 0x308)) + (i64.store offset=0x309 align=1 (i32.const 0) (get_local 0x309)) + (i64.store offset=0x30a align=1 (i32.const 0) (get_local 0x30a)) + (i64.store offset=0x30b align=1 (i32.const 0) (get_local 0x30b)) + (i64.store offset=0x30c align=1 (i32.const 0) (get_local 0x30c)) + (i64.store offset=0x30d align=1 (i32.const 0) (get_local 0x30d)) + (i64.store offset=0x30e align=1 (i32.const 0) (get_local 0x30e)) + (i64.store offset=0x30f align=1 (i32.const 0) (get_local 0x30f)) + (i64.store offset=0x310 align=1 (i32.const 0) (get_local 0x310)) + (i64.store offset=0x311 align=1 (i32.const 0) (get_local 0x311)) + (i64.store offset=0x312 align=1 (i32.const 0) (get_local 0x312)) + (i64.store offset=0x313 align=1 (i32.const 0) (get_local 0x313)) + (i64.store offset=0x314 align=1 (i32.const 0) (get_local 0x314)) + (i64.store offset=0x315 align=1 (i32.const 0) (get_local 0x315)) + (i64.store offset=0x316 align=1 (i32.const 0) (get_local 0x316)) + (i64.store offset=0x317 align=1 (i32.const 0) (get_local 0x317)) + (i64.store offset=0x318 align=1 (i32.const 0) (get_local 0x318)) + (i64.store offset=0x319 align=1 (i32.const 0) (get_local 0x319)) + (i64.store offset=0x31a align=1 (i32.const 0) (get_local 0x31a)) + (i64.store offset=0x31b align=1 (i32.const 0) (get_local 0x31b)) + (i64.store offset=0x31c align=1 (i32.const 0) (get_local 0x31c)) + (i64.store offset=0x31d align=1 (i32.const 0) (get_local 0x31d)) + (i64.store offset=0x31e align=1 (i32.const 0) (get_local 0x31e)) + (i64.store offset=0x31f align=1 (i32.const 0) (get_local 0x31f)) + (i64.store offset=0x320 align=1 (i32.const 0) (get_local 0x320)) + (i64.store offset=0x321 align=1 (i32.const 0) (get_local 0x321)) + (i64.store offset=0x322 align=1 (i32.const 0) (get_local 0x322)) + (i64.store offset=0x323 align=1 (i32.const 0) (get_local 0x323)) + (i64.store offset=0x324 align=1 (i32.const 0) (get_local 0x324)) + (i64.store offset=0x325 align=1 (i32.const 0) (get_local 0x325)) + (i64.store offset=0x326 align=1 (i32.const 0) (get_local 0x326)) + (i64.store offset=0x327 align=1 (i32.const 0) (get_local 0x327)) + (i64.store offset=0x328 align=1 (i32.const 0) (get_local 0x328)) + (i64.store offset=0x329 align=1 (i32.const 0) (get_local 0x329)) + (i64.store offset=0x32a align=1 (i32.const 0) (get_local 0x32a)) + (i64.store offset=0x32b align=1 (i32.const 0) (get_local 0x32b)) + (i64.store offset=0x32c align=1 (i32.const 0) (get_local 0x32c)) + (i64.store offset=0x32d align=1 (i32.const 0) (get_local 0x32d)) + (i64.store offset=0x32e align=1 (i32.const 0) (get_local 0x32e)) + (i64.store offset=0x32f align=1 (i32.const 0) (get_local 0x32f)) + (i64.store offset=0x330 align=1 (i32.const 0) (get_local 0x330)) + (i64.store offset=0x331 align=1 (i32.const 0) (get_local 0x331)) + (i64.store offset=0x332 align=1 (i32.const 0) (get_local 0x332)) + (i64.store offset=0x333 align=1 (i32.const 0) (get_local 0x333)) + (i64.store offset=0x334 align=1 (i32.const 0) (get_local 0x334)) + (i64.store offset=0x335 align=1 (i32.const 0) (get_local 0x335)) + (i64.store offset=0x336 align=1 (i32.const 0) (get_local 0x336)) + (i64.store offset=0x337 align=1 (i32.const 0) (get_local 0x337)) + (i64.store offset=0x338 align=1 (i32.const 0) (get_local 0x338)) + (i64.store offset=0x339 align=1 (i32.const 0) (get_local 0x339)) + (i64.store offset=0x33a align=1 (i32.const 0) (get_local 0x33a)) + (i64.store offset=0x33b align=1 (i32.const 0) (get_local 0x33b)) + (i64.store offset=0x33c align=1 (i32.const 0) (get_local 0x33c)) + (i64.store offset=0x33d align=1 (i32.const 0) (get_local 0x33d)) + (i64.store offset=0x33e align=1 (i32.const 0) (get_local 0x33e)) + (i64.store offset=0x33f align=1 (i32.const 0) (get_local 0x33f)) + (i64.store offset=0x340 align=1 (i32.const 0) (get_local 0x340)) + (i64.store offset=0x341 align=1 (i32.const 0) (get_local 0x341)) + (i64.store offset=0x342 align=1 (i32.const 0) (get_local 0x342)) + (i64.store offset=0x343 align=1 (i32.const 0) (get_local 0x343)) + (i64.store offset=0x344 align=1 (i32.const 0) (get_local 0x344)) + (i64.store offset=0x345 align=1 (i32.const 0) (get_local 0x345)) + (i64.store offset=0x346 align=1 (i32.const 0) (get_local 0x346)) + (i64.store offset=0x347 align=1 (i32.const 0) (get_local 0x347)) + (i64.store offset=0x348 align=1 (i32.const 0) (get_local 0x348)) + (i64.store offset=0x349 align=1 (i32.const 0) (get_local 0x349)) + (i64.store offset=0x34a align=1 (i32.const 0) (get_local 0x34a)) + (i64.store offset=0x34b align=1 (i32.const 0) (get_local 0x34b)) + (i64.store offset=0x34c align=1 (i32.const 0) (get_local 0x34c)) + (i64.store offset=0x34d align=1 (i32.const 0) (get_local 0x34d)) + (i64.store offset=0x34e align=1 (i32.const 0) (get_local 0x34e)) + (i64.store offset=0x34f align=1 (i32.const 0) (get_local 0x34f)) + (i64.store offset=0x350 align=1 (i32.const 0) (get_local 0x350)) + (i64.store offset=0x351 align=1 (i32.const 0) (get_local 0x351)) + (i64.store offset=0x352 align=1 (i32.const 0) (get_local 0x352)) + (i64.store offset=0x353 align=1 (i32.const 0) (get_local 0x353)) + (i64.store offset=0x354 align=1 (i32.const 0) (get_local 0x354)) + (i64.store offset=0x355 align=1 (i32.const 0) (get_local 0x355)) + (i64.store offset=0x356 align=1 (i32.const 0) (get_local 0x356)) + (i64.store offset=0x357 align=1 (i32.const 0) (get_local 0x357)) + (i64.store offset=0x358 align=1 (i32.const 0) (get_local 0x358)) + (i64.store offset=0x359 align=1 (i32.const 0) (get_local 0x359)) + (i64.store offset=0x35a align=1 (i32.const 0) (get_local 0x35a)) + (i64.store offset=0x35b align=1 (i32.const 0) (get_local 0x35b)) + (i64.store offset=0x35c align=1 (i32.const 0) (get_local 0x35c)) + (i64.store offset=0x35d align=1 (i32.const 0) (get_local 0x35d)) + (i64.store offset=0x35e align=1 (i32.const 0) (get_local 0x35e)) + (i64.store offset=0x35f align=1 (i32.const 0) (get_local 0x35f)) + (i64.store offset=0x360 align=1 (i32.const 0) (get_local 0x360)) + (i64.store offset=0x361 align=1 (i32.const 0) (get_local 0x361)) + (i64.store offset=0x362 align=1 (i32.const 0) (get_local 0x362)) + (i64.store offset=0x363 align=1 (i32.const 0) (get_local 0x363)) + (i64.store offset=0x364 align=1 (i32.const 0) (get_local 0x364)) + (i64.store offset=0x365 align=1 (i32.const 0) (get_local 0x365)) + (i64.store offset=0x366 align=1 (i32.const 0) (get_local 0x366)) + (i64.store offset=0x367 align=1 (i32.const 0) (get_local 0x367)) + (i64.store offset=0x368 align=1 (i32.const 0) (get_local 0x368)) + (i64.store offset=0x369 align=1 (i32.const 0) (get_local 0x369)) + (i64.store offset=0x36a align=1 (i32.const 0) (get_local 0x36a)) + (i64.store offset=0x36b align=1 (i32.const 0) (get_local 0x36b)) + (i64.store offset=0x36c align=1 (i32.const 0) (get_local 0x36c)) + (i64.store offset=0x36d align=1 (i32.const 0) (get_local 0x36d)) + (i64.store offset=0x36e align=1 (i32.const 0) (get_local 0x36e)) + (i64.store offset=0x36f align=1 (i32.const 0) (get_local 0x36f)) + (i64.store offset=0x370 align=1 (i32.const 0) (get_local 0x370)) + (i64.store offset=0x371 align=1 (i32.const 0) (get_local 0x371)) + (i64.store offset=0x372 align=1 (i32.const 0) (get_local 0x372)) + (i64.store offset=0x373 align=1 (i32.const 0) (get_local 0x373)) + (i64.store offset=0x374 align=1 (i32.const 0) (get_local 0x374)) + (i64.store offset=0x375 align=1 (i32.const 0) (get_local 0x375)) + (i64.store offset=0x376 align=1 (i32.const 0) (get_local 0x376)) + (i64.store offset=0x377 align=1 (i32.const 0) (get_local 0x377)) + (i64.store offset=0x378 align=1 (i32.const 0) (get_local 0x378)) + (i64.store offset=0x379 align=1 (i32.const 0) (get_local 0x379)) + (i64.store offset=0x37a align=1 (i32.const 0) (get_local 0x37a)) + (i64.store offset=0x37b align=1 (i32.const 0) (get_local 0x37b)) + (i64.store offset=0x37c align=1 (i32.const 0) (get_local 0x37c)) + (i64.store offset=0x37d align=1 (i32.const 0) (get_local 0x37d)) + (i64.store offset=0x37e align=1 (i32.const 0) (get_local 0x37e)) + (i64.store offset=0x37f align=1 (i32.const 0) (get_local 0x37f)) + (i64.store offset=0x380 align=1 (i32.const 0) (get_local 0x380)) + (i64.store offset=0x381 align=1 (i32.const 0) (get_local 0x381)) + (i64.store offset=0x382 align=1 (i32.const 0) (get_local 0x382)) + (i64.store offset=0x383 align=1 (i32.const 0) (get_local 0x383)) + (i64.store offset=0x384 align=1 (i32.const 0) (get_local 0x384)) + (i64.store offset=0x385 align=1 (i32.const 0) (get_local 0x385)) + (i64.store offset=0x386 align=1 (i32.const 0) (get_local 0x386)) + (i64.store offset=0x387 align=1 (i32.const 0) (get_local 0x387)) + (i64.store offset=0x388 align=1 (i32.const 0) (get_local 0x388)) + (i64.store offset=0x389 align=1 (i32.const 0) (get_local 0x389)) + (i64.store offset=0x38a align=1 (i32.const 0) (get_local 0x38a)) + (i64.store offset=0x38b align=1 (i32.const 0) (get_local 0x38b)) + (i64.store offset=0x38c align=1 (i32.const 0) (get_local 0x38c)) + (i64.store offset=0x38d align=1 (i32.const 0) (get_local 0x38d)) + (i64.store offset=0x38e align=1 (i32.const 0) (get_local 0x38e)) + (i64.store offset=0x38f align=1 (i32.const 0) (get_local 0x38f)) + (i64.store offset=0x390 align=1 (i32.const 0) (get_local 0x390)) + (i64.store offset=0x391 align=1 (i32.const 0) (get_local 0x391)) + (i64.store offset=0x392 align=1 (i32.const 0) (get_local 0x392)) + (i64.store offset=0x393 align=1 (i32.const 0) (get_local 0x393)) + (i64.store offset=0x394 align=1 (i32.const 0) (get_local 0x394)) + (i64.store offset=0x395 align=1 (i32.const 0) (get_local 0x395)) + (i64.store offset=0x396 align=1 (i32.const 0) (get_local 0x396)) + (i64.store offset=0x397 align=1 (i32.const 0) (get_local 0x397)) + (i64.store offset=0x398 align=1 (i32.const 0) (get_local 0x398)) + (i64.store offset=0x399 align=1 (i32.const 0) (get_local 0x399)) + (i64.store offset=0x39a align=1 (i32.const 0) (get_local 0x39a)) + (i64.store offset=0x39b align=1 (i32.const 0) (get_local 0x39b)) + (i64.store offset=0x39c align=1 (i32.const 0) (get_local 0x39c)) + (i64.store offset=0x39d align=1 (i32.const 0) (get_local 0x39d)) + (i64.store offset=0x39e align=1 (i32.const 0) (get_local 0x39e)) + (i64.store offset=0x39f align=1 (i32.const 0) (get_local 0x39f)) + (i64.store offset=0x3a0 align=1 (i32.const 0) (get_local 0x3a0)) + (i64.store offset=0x3a1 align=1 (i32.const 0) (get_local 0x3a1)) + (i64.store offset=0x3a2 align=1 (i32.const 0) (get_local 0x3a2)) + (i64.store offset=0x3a3 align=1 (i32.const 0) (get_local 0x3a3)) + (i64.store offset=0x3a4 align=1 (i32.const 0) (get_local 0x3a4)) + (i64.store offset=0x3a5 align=1 (i32.const 0) (get_local 0x3a5)) + (i64.store offset=0x3a6 align=1 (i32.const 0) (get_local 0x3a6)) + (i64.store offset=0x3a7 align=1 (i32.const 0) (get_local 0x3a7)) + (i64.store offset=0x3a8 align=1 (i32.const 0) (get_local 0x3a8)) + (i64.store offset=0x3a9 align=1 (i32.const 0) (get_local 0x3a9)) + (i64.store offset=0x3aa align=1 (i32.const 0) (get_local 0x3aa)) + (i64.store offset=0x3ab align=1 (i32.const 0) (get_local 0x3ab)) + (i64.store offset=0x3ac align=1 (i32.const 0) (get_local 0x3ac)) + (i64.store offset=0x3ad align=1 (i32.const 0) (get_local 0x3ad)) + (i64.store offset=0x3ae align=1 (i32.const 0) (get_local 0x3ae)) + (i64.store offset=0x3af align=1 (i32.const 0) (get_local 0x3af)) + (i64.store offset=0x3b0 align=1 (i32.const 0) (get_local 0x3b0)) + (i64.store offset=0x3b1 align=1 (i32.const 0) (get_local 0x3b1)) + (i64.store offset=0x3b2 align=1 (i32.const 0) (get_local 0x3b2)) + (i64.store offset=0x3b3 align=1 (i32.const 0) (get_local 0x3b3)) + (i64.store offset=0x3b4 align=1 (i32.const 0) (get_local 0x3b4)) + (i64.store offset=0x3b5 align=1 (i32.const 0) (get_local 0x3b5)) + (i64.store offset=0x3b6 align=1 (i32.const 0) (get_local 0x3b6)) + (i64.store offset=0x3b7 align=1 (i32.const 0) (get_local 0x3b7)) + (i64.store offset=0x3b8 align=1 (i32.const 0) (get_local 0x3b8)) + (i64.store offset=0x3b9 align=1 (i32.const 0) (get_local 0x3b9)) + (i64.store offset=0x3ba align=1 (i32.const 0) (get_local 0x3ba)) + (i64.store offset=0x3bb align=1 (i32.const 0) (get_local 0x3bb)) + (i64.store offset=0x3bc align=1 (i32.const 0) (get_local 0x3bc)) + (i64.store offset=0x3bd align=1 (i32.const 0) (get_local 0x3bd)) + (i64.store offset=0x3be align=1 (i32.const 0) (get_local 0x3be)) + (i64.store offset=0x3bf align=1 (i32.const 0) (get_local 0x3bf)) + (i64.store offset=0x3c0 align=1 (i32.const 0) (get_local 0x3c0)) + (i64.store offset=0x3c1 align=1 (i32.const 0) (get_local 0x3c1)) + (i64.store offset=0x3c2 align=1 (i32.const 0) (get_local 0x3c2)) + (i64.store offset=0x3c3 align=1 (i32.const 0) (get_local 0x3c3)) + (i64.store offset=0x3c4 align=1 (i32.const 0) (get_local 0x3c4)) + (i64.store offset=0x3c5 align=1 (i32.const 0) (get_local 0x3c5)) + (i64.store offset=0x3c6 align=1 (i32.const 0) (get_local 0x3c6)) + (i64.store offset=0x3c7 align=1 (i32.const 0) (get_local 0x3c7)) + (i64.store offset=0x3c8 align=1 (i32.const 0) (get_local 0x3c8)) + (i64.store offset=0x3c9 align=1 (i32.const 0) (get_local 0x3c9)) + (i64.store offset=0x3ca align=1 (i32.const 0) (get_local 0x3ca)) + (i64.store offset=0x3cb align=1 (i32.const 0) (get_local 0x3cb)) + (i64.store offset=0x3cc align=1 (i32.const 0) (get_local 0x3cc)) + (i64.store offset=0x3cd align=1 (i32.const 0) (get_local 0x3cd)) + (i64.store offset=0x3ce align=1 (i32.const 0) (get_local 0x3ce)) + (i64.store offset=0x3cf align=1 (i32.const 0) (get_local 0x3cf)) + (i64.store offset=0x3d0 align=1 (i32.const 0) (get_local 0x3d0)) + (i64.store offset=0x3d1 align=1 (i32.const 0) (get_local 0x3d1)) + (i64.store offset=0x3d2 align=1 (i32.const 0) (get_local 0x3d2)) + (i64.store offset=0x3d3 align=1 (i32.const 0) (get_local 0x3d3)) + (i64.store offset=0x3d4 align=1 (i32.const 0) (get_local 0x3d4)) + (i64.store offset=0x3d5 align=1 (i32.const 0) (get_local 0x3d5)) + (i64.store offset=0x3d6 align=1 (i32.const 0) (get_local 0x3d6)) + (i64.store offset=0x3d7 align=1 (i32.const 0) (get_local 0x3d7)) + (i64.store offset=0x3d8 align=1 (i32.const 0) (get_local 0x3d8)) + (i64.store offset=0x3d9 align=1 (i32.const 0) (get_local 0x3d9)) + (i64.store offset=0x3da align=1 (i32.const 0) (get_local 0x3da)) + (i64.store offset=0x3db align=1 (i32.const 0) (get_local 0x3db)) + (i64.store offset=0x3dc align=1 (i32.const 0) (get_local 0x3dc)) + (i64.store offset=0x3dd align=1 (i32.const 0) (get_local 0x3dd)) + (i64.store offset=0x3de align=1 (i32.const 0) (get_local 0x3de)) + (i64.store offset=0x3df align=1 (i32.const 0) (get_local 0x3df)) + (i64.store offset=0x3e0 align=1 (i32.const 0) (get_local 0x3e0)) + (i64.store offset=0x3e1 align=1 (i32.const 0) (get_local 0x3e1)) + (i64.store offset=0x3e2 align=1 (i32.const 0) (get_local 0x3e2)) + (i64.store offset=0x3e3 align=1 (i32.const 0) (get_local 0x3e3)) + (i64.store offset=0x3e4 align=1 (i32.const 0) (get_local 0x3e4)) + (i64.store offset=0x3e5 align=1 (i32.const 0) (get_local 0x3e5)) + (i64.store offset=0x3e6 align=1 (i32.const 0) (get_local 0x3e6)) + (i64.store offset=0x3e7 align=1 (i32.const 0) (get_local 0x3e7)) + (i64.store offset=0x3e8 align=1 (i32.const 0) (get_local 0x3e8)) + (i64.store offset=0x3e9 align=1 (i32.const 0) (get_local 0x3e9)) + (i64.store offset=0x3ea align=1 (i32.const 0) (get_local 0x3ea)) + (i64.store offset=0x3eb align=1 (i32.const 0) (get_local 0x3eb)) + (i64.store offset=0x3ec align=1 (i32.const 0) (get_local 0x3ec)) + (i64.store offset=0x3ed align=1 (i32.const 0) (get_local 0x3ed)) + (i64.store offset=0x3ee align=1 (i32.const 0) (get_local 0x3ee)) + (i64.store offset=0x3ef align=1 (i32.const 0) (get_local 0x3ef)) + (i64.store offset=0x3f0 align=1 (i32.const 0) (get_local 0x3f0)) + (i64.store offset=0x3f1 align=1 (i32.const 0) (get_local 0x3f1)) + (i64.store offset=0x3f2 align=1 (i32.const 0) (get_local 0x3f2)) + (i64.store offset=0x3f3 align=1 (i32.const 0) (get_local 0x3f3)) + (i64.store offset=0x3f4 align=1 (i32.const 0) (get_local 0x3f4)) + (i64.store offset=0x3f5 align=1 (i32.const 0) (get_local 0x3f5)) + (i64.store offset=0x3f6 align=1 (i32.const 0) (get_local 0x3f6)) + (i64.store offset=0x3f7 align=1 (i32.const 0) (get_local 0x3f7)) + (i64.store offset=0x3f8 align=1 (i32.const 0) (get_local 0x3f8)) + (i64.store offset=0x3f9 align=1 (i32.const 0) (get_local 0x3f9)) + (i64.store offset=0x3fa align=1 (i32.const 0) (get_local 0x3fa)) + (i64.store offset=0x3fb align=1 (i32.const 0) (get_local 0x3fb)) + (i64.store offset=0x3fc align=1 (i32.const 0) (get_local 0x3fc)) + (i64.store offset=0x3fd align=1 (i32.const 0) (get_local 0x3fd)) + (i64.store offset=0x3fe align=1 (i32.const 0) (get_local 0x3fe)) + (i64.store offset=0x3ff align=1 (i32.const 0) (get_local 0x3ff)) + (i64.store offset=0x400 align=1 (i32.const 0) (get_local 0x400)) + (i64.store offset=0x401 align=1 (i32.const 0) (get_local 0x401)) + (i64.store offset=0x402 align=1 (i32.const 0) (get_local 0x402)) + (i64.store offset=0x403 align=1 (i32.const 0) (get_local 0x403)) + (i64.store offset=0x404 align=1 (i32.const 0) (get_local 0x404)) + (i64.store offset=0x405 align=1 (i32.const 0) (get_local 0x405)) + (i64.store offset=0x406 align=1 (i32.const 0) (get_local 0x406)) + (i64.store offset=0x407 align=1 (i32.const 0) (get_local 0x407)) + (i64.store offset=0x408 align=1 (i32.const 0) (get_local 0x408)) + (i64.store offset=0x409 align=1 (i32.const 0) (get_local 0x409)) + (i64.store offset=0x40a align=1 (i32.const 0) (get_local 0x40a)) + (i64.store offset=0x40b align=1 (i32.const 0) (get_local 0x40b)) + (i64.store offset=0x40c align=1 (i32.const 0) (get_local 0x40c)) + (i64.store offset=0x40d align=1 (i32.const 0) (get_local 0x40d)) + (i64.store offset=0x40e align=1 (i32.const 0) (get_local 0x40e)) + (i64.store offset=0x40f align=1 (i32.const 0) (get_local 0x40f)) + (i64.store offset=0x410 align=1 (i32.const 0) (get_local 0x410)) + (i64.store offset=0x411 align=1 (i32.const 0) (get_local 0x411)) + (i64.store offset=0x412 align=1 (i32.const 0) (get_local 0x412)) + (i64.store offset=0x413 align=1 (i32.const 0) (get_local 0x413)) + (i64.store offset=0x414 align=1 (i32.const 0) (get_local 0x414)) + (i64.store offset=0x415 align=1 (i32.const 0) (get_local 0x415)) + (i64.store offset=0x416 align=1 (i32.const 0) (get_local 0x416)) + (i64.store offset=0x417 align=1 (i32.const 0) (get_local 0x417)) + (i64.store offset=0x418 align=1 (i32.const 0) (get_local 0x418)) + (i64.store offset=0x419 align=1 (i32.const 0) (get_local 0x419)) + (i64.store offset=0x41a align=1 (i32.const 0) (get_local 0x41a)) + (i64.store offset=0x41b align=1 (i32.const 0) (get_local 0x41b)) + (i64.store offset=0x41c align=1 (i32.const 0) (get_local 0x41c)) + (i64.store offset=0x41d align=1 (i32.const 0) (get_local 0x41d)) + (i64.store offset=0x41e align=1 (i32.const 0) (get_local 0x41e)) + (i64.store offset=0x41f align=1 (i32.const 0) (get_local 0x41f)) + ) +) + +(assert_trap (invoke "test-guard-page-skip" (i32.const 0)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 100)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 200)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 300)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 400)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 500)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 600)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 700)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 800)) "call stack exhausted") +(assert_trap (invoke "test-guard-page-skip" (i32.const 900)) "call stack exhausted") \ No newline at end of file diff --git a/libraries/wasm-jit/Test/wast/tee.wast b/libraries/wasm-jit/Test/wast/tee.wast new file mode 100644 index 000000000..bc5a1abab --- /dev/null +++ b/libraries/wasm-jit/Test/wast/tee.wast @@ -0,0 +1,33 @@ +;; poor man's tee +;; Outputs to stderr and stdout whatever comes in stdin + +(module + + (import "env" "memory" (memory 1)) + (import "env" "_fwrite" (func $__fwrite (param i32 i32 i32 i32) (result i32))) + (import "env" "_fread" (func $__fread (param i32 i32 i32 i32) (result i32))) + (import "env" "_stdin" (global $stdinPtr i32)) + (import "env" "_stdout" (global $stdoutPtr i32)) + (import "env" "_stderr" (global $stderrPtr i32)) + (export "main" (func $main)) + + (func $main + (local $stdin i32) + (local $stdout i32) + (local $stderr i32) + (local $nmemb i32) + (set_local $stdin (i32.load align=4 (get_global $stdinPtr))) + (set_local $stdout (i32.load align=4 (get_global $stdoutPtr))) + (set_local $stderr (i32.load align=4 (get_global $stderrPtr))) + + (loop $loop + (block $done + (set_local $nmemb (call $__fread (i32.const 0) (i32.const 1) (i32.const 32) (get_local $stdin))) + (br_if $done (i32.eq (i32.const 0) (get_local $nmemb))) + (drop (call $__fwrite (i32.const 0) (i32.const 1) (get_local $nmemb) (get_local $stdout))) + (drop (call $__fwrite (i32.const 0) (i32.const 1) (get_local $nmemb) (get_local $stderr))) + (br $loop) + ) + ) + ) +) diff --git a/libraries/wasm-jit/Test/zlib/zlib.wast b/libraries/wasm-jit/Test/zlib/zlib.wast new file mode 100644 index 000000000..ce72ced8f --- /dev/null +++ b/libraries/wasm-jit/Test/zlib/zlib.wast @@ -0,0 +1,48532 @@ +(module + (type $FUNCSIG$iii (func (param i32 i32) (result i32))) + (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) + (type $FUNCSIG$vii (func (param i32 i32))) + (type $FUNCSIG$ii (func (param i32) (result i32))) + (type $FUNCSIG$vi (func (param i32))) + (type $FUNCSIG$v (func)) + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32)) + (import "env" "STACK_MAX" (global $STACK_MAX$asm2wasm$import i32)) + (import "env" "tempDoublePtr" (global $tempDoublePtr$asm2wasm$import i32)) + (import "env" "abort" (func $abort (param i32))) + (import "env" "_pthread_cleanup_pop" (func $_pthread_cleanup_pop (param i32))) + (import "env" "_abort" (func $_abort)) + (import "env" "___lock" (func $___lock (param i32))) + (import "env" "___syscall6" (func $___syscall6 (param i32 i32) (result i32))) + (import "env" "_pthread_cleanup_push" (func $_pthread_cleanup_push (param i32 i32))) + (import "env" "_sbrk" (func $_sbrk (param i32) (result i32))) + (import "env" "___syscall140" (func $___syscall140 (param i32 i32) (result i32))) + (import "env" "_emscripten_memcpy_big" (func $_emscripten_memcpy_big (param i32 i32 i32) (result i32))) + (import "env" "___syscall54" (func $___syscall54 (param i32 i32) (result i32))) + (import "env" "___unlock" (func $___unlock (param i32))) + (import "env" "___assert_fail" (func $___assert_fail (param i32 i32 i32 i32))) + (import "env" "___syscall146" (func $___syscall146 (param i32 i32) (result i32))) + (import "env" "memory" (memory $0 256)) + (import "env" "table" (table 18 anyfunc)) + (import "env" "memoryBase" (global $memoryBase i32)) + (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (get_global $STACKTOP$asm2wasm$import)) + (global $STACK_MAX (mut i32) (get_global $STACK_MAX$asm2wasm$import)) + (global $tempDoublePtr (mut i32) (get_global $tempDoublePtr$asm2wasm$import)) + (global $__THREW__ (mut i32) (i32.const 0)) + (global $threwValue (mut i32) (i32.const 0)) + (global $tempRet0 (mut i32) (i32.const 0)) + (elem (get_global $tableBase) $b0 $___stdio_close $b1 $___stdout_write $___stdio_seek $_zcalloc $___stdio_write $b1 $b1 $b1 $b2 $_zcfree $b3 $_deflate_stored $_deflate_fast $_deflate_slow $b4 $_cleanup_522) + (data (get_global $memoryBase) "\00\00\00\00\960\07w,a\0e\ee\baQ\t\99\19\c4m\07\8f\f4jp5\a5c\e9\a3\95d\9e2\88\db\0e\a4\b8\dcy\1e\e9\d5\e0\88\d9\d2\97+L\b6\t\bd|\b1~\07-\b8\e7\91\1d\bf\90d\10\b7\1d\f2 \b0jHq\b9\f3\deA\be\84}\d4\da\1a\eb\e4\ddmQ\b5\d4\f4\c7\85\d3\83V\98l\13\c0\a8kdz\f9b\fd\ec\c9e\8aO\\\01\14\d9l\06cc=\0f\fa\f5\0d\08\8d\c8 n;^\10iL\e4A`\d5rqg\a2\d1\e4\03jm\0d\a8Zjz\0b\cf\0e\e4\9d\ff\t\93\'\ae\00\n\b1\9e\07}D\93\0f\f0\d2\a3\08\87h\f2\01\1e\fe\c2\06i]Wb\f7\cbge\80q6l\19\e7\06knv\1b\d4\fe\e0+\d3\89Zz\da\10\ccJ\ddgo\df\b9\f9\f9\ef\be\8eC\be\b7\17\d5\8e\b0`\e8\a3\d6\d6~\93\d1\a1\c4\c2\d88R\f2\dfO\f1g\bb\d1gW\bc\a6\dd\06\b5?K6\b2H\da+\0d\d8L\1b\n\af\f6J\036`z\04A\c3\ef`\dfU\dfg\a8\ef\8en1y\beiF\8c\b3a\cb\1a\83f\bc\a0\d2o%6\e2hR\95w\0c\cc\03G\0b\bb\b9\16\02\"/&\05U\be;\ba\c5(\0b\bd\b2\92Z\b4+\04j\b3\\\a7\ff\d7\c21\cf\d0\b5\8b\9e\d9,\1d\ae\de[\b0\c2d\9b&\f2c\ec\9c\a3ju\n\93m\02\a9\06\t\9c?6\0e\eb\85g\07r\13W\00\05\82J\bf\95\14z\b8\e2\ae+\b1{8\1b\b6\0c\9b\8e\d2\92\0d\be\d5\e5\b7\ef\dc|!\df\db\0b\d4\d2\d3\86B\e2\d4\f1\f8\b3\ddhn\83\da\1f\cd\16\be\81[&\b9\f6\e1w\b0owG\b7\18\e6Z\08\88pj\0f\ff\ca;\06f\\\0b\01\11\ff\9ee\8fi\aeb\f8\d3\ffkaE\cfl\16x\e2\n\a0\ee\d2\0d\d7T\83\04N\c2\b3\039a&g\a7\f7\16`\d0MGiI\dbwn>Jj\d1\ae\dcZ\d6\d9f\0b\df@\f0;\d87S\ae\bc\a9\c5\9e\bb\de\7f\cf\b2G\e9\ff\b50\1c\f2\bd\bd\8a\c2\ba\ca0\93\b3S\a6\a3\b4$\056\d0\ba\93\06\d7\cd)W\deT\bfg\d9#.zf\b3\b8Ja\c4\02\1bh]\94+o*7\be\0b\b4\a1\8e\0c\c3\1b\df\05Z\8d\ef\02-\00\00\00\00A1\1b\19\82b62\c3S-+\04\c5ldE\f4w}\86\a7ZV\c7\96AO\08\8a\d9\c8I\bb\c2\d1\8a\e8\ef\fa\cb\d9\f4\e3\0cO\b5\acM~\ae\b5\8e-\83\9e\cf\1c\98\87Q\12\c2J\10#\d9S\d3p\f4x\92A\efaU\d7\ae.\14\e6\b57\d7\b5\98\1c\96\84\83\05Y\98\1b\82\18\a9\00\9b\db\fa-\b0\9a\cb6\a9]]w\e6\1cll\ff\df?A\d4\9e\0eZ\cd\a2$\84\95\e3\15\9f\8c F\b2\a7aw\a9\be\a6\e1\e8\f1\e7\d0\f3\e8$\83\de\c3e\b2\c5\da\aa\ae]]\eb\9fFD(\cckoi\fdpv\aek19\efZ* ,\t\07\0bm8\1c\12\f36F\df\b2\07]\c6qTp\ed0ek\f4\f7\f3*\bb\b6\c21\a2u\91\1c\894\a0\07\90\fb\bc\9f\17\ba\8d\84\0ey\de\a9%8\ef\b2<\ffy\f3s\beH\e8j}\1b\c5A<*\deX\05Oy\f0D~b\e9\87-O\c2\c6\1cT\db\01\8a\15\94@\bb\0e\8d\83\e8#\a6\c2\d98\bf\0d\c5\a08L\f4\bb!\8f\a7\96\n\ce\96\8d\13\t\00\cc\\H1\d7E\8bb\fan\caS\e1wT]\bb\ba\15l\a0\a3\d6?\8d\88\97\0e\96\91P\98\d7\de\11\a9\cc\c7\d2\fa\e1\ec\93\cb\fa\f5\\\d7br\1d\e6yk\de\b5T@\9f\84OYX\12\0e\16\19#\15\0f\dap8$\9bA#=\a7k\fde\e6Z\e6|%\t\cbWd8\d0N\a3\ae\91\01\e2\9f\8a\18!\cc\a73`\fd\bc*\af\e1$\ad\ee\d0?\b4-\83\12\9fl\b2\t\86\ab$H\c9\ea\15S\d0)F~\fbhwe\e2\f6y?/\b7H$6t\1b\t\1d5*\12\04\f2\bcSK\b3\8dHRp\deey1\ef~`\fe\f3\e6\e7\bf\c2\fd\fe|\91\d0\d5=\a0\cb\cc\fa6\8a\83\bb\07\91\9axT\bc\b19e\a7\a8K\98\83;\n\a9\98\"\c9\fa\b5\t\88\cb\ae\10O]\ef_\0el\f4F\cd?\d9m\8c\0e\c2tC\12Z\f3\02#A\ea\c1pl\c1\80Aw\d8G\d76\97\06\e6-\8e\c5\b5\00\a5\84\84\1b\bc\1a\8aAq[\bbZh\98\e8wC\d9\d9lZ\1eO-\15_~6\0c\9c-\1b\'\dd\1c\00>\12\00\98\b9S1\83\a0\90b\ae\8b\d1S\b5\92\16\c5\f4\ddW\f4\ef\c4\94\a7\c2\ef\d5\96\d9\f6\e9\bc\07\ae\a8\8d\1c\b7k\de1\9c*\ef*\85\edyk\ca\acHp\d3o\1b]\f8.*F\e1\e16\def\a0\07\c5\7fcT\e8T\"e\f3M\e5\f3\b2\02\a4\c2\a9\1bg\91\840&\a0\9f)\b8\ae\c5\e4\f9\9f\de\fd:\cc\f3\d6{\fd\e8\cf\bck\a9\80\fdZ\b2\99>\t\9f\b2\7f8\84\ab\b0$\1c,\f1\15\0752F*\1esw1\07\b4\e1pH\f5\d0kQ6\83Fzw\b2]cN\d7\fa\cb\0f\e6\e1\d2\cc\b5\cc\f9\8d\84\d7\e0J\12\96\af\0b#\8d\b6\c8p\a0\9d\89A\bb\84F]#\03\07l8\1a\c4?\151\85\0e\0e(B\98Og\03\a9T~\c0\fayU\81\cbbL\1f\c58\81^\f4#\98\9d\a7\0e\b3\dc\96\15\aa\1b\00T\e5Z1O\fc\99bb\d7\d8Sy\ce\17O\e1IV~\faP\95-\d7{\d4\1c\ccb\13\8a\8d-R\bb\964\91\e8\bb\1f\d0\d9\a0\06\ec\f3~^\ad\c2eGn\91Hl/\a0Su\e86\12:\a9\07\t#jT$\08+e?\11\e4y\a7\96\a5H\bc\8ff\1b\91\a4\'*\8a\bd\e0\bc\cb\f2\a1\8d\d0\ebb\de\fd\c0#\ef\e6\d9\bd\e1\bc\14\fc\d0\a7\0d?\83\8a&~\b2\91?\b9$\d0p\f8\15\cbi;F\e6Bzw\fd[\b5ke\dc\f4Z~\c57\tS\eev8H\f7\b1\ae\t\b8\f0\9f\12\a13\cc?\8ar\fd$\93\00\00\00\007j\c2\01n\d4\84\03Y\beF\02\dc\a8\t\07\eb\c2\cb\06\b2|\8d\04\85\16O\05\b8Q\13\0e\8f;\d1\0f\d6\85\97\0d\e1\efU\0cd\f9\1a\tS\93\d8\08\n-\9e\n=G\\\0bp\a3&\1cG\c9\e4\1d\1ew\a2\1f)\1d`\1e\ac\0b/\1b\9ba\ed\1a\c2\df\ab\18\f5\b5i\19\c8\f25\12\ff\98\f7\13\a6&\b1\11\91Ls\10\14Z<\15#0\fe\14z\8e\b8\16M\e4z\17\e0FM8\d7,\8f9\8e\92\c9;\b9\f8\0b:<\eeD?\0b\84\86>R:\c0(\f4\1cq-\c3v\b3,\9a\c8\f5.\ad\a27/\c0\8d\9ap\f7\e7Xq\aeY\1es\993\dcr\1c%\93w+OQvr\f1\17tE\9b\d5ux\dc\89~O\b6K\7f\16\08\0d}!b\cf|\a4t\80y\93\1eBx\ca\a0\04z\fd\ca\c6{\b0.\bcl\87D~m\de\fa8o\e9\90\fanl\86\b5k[\ecwj\02R1h58\f3i\08\7f\afb?\15mcf\ab+aQ\c1\e9`\d4\d7\a6e\e3\bddd\ba\03\"f\8di\e0g \cb\d7H\17\a1\15IN\1fSKyu\91J\fcc\deO\cb\t\1cN\92\b7ZL\a5\dd\98M\98\9a\c4F\af\f0\06G\f6N@E\c1$\82DD2\cdAsX\0f@*\e6IB\1d\8c\8bCPh\f1Tg\023U>\bcuW\t\d6\b7V\8c\c0\f8S\bb\aa:R\e2\14|P\d5~\beQ\e89\e2Z\dfS [\86\edfY\b1\87\a4X4\91\eb]\03\fb)\\ZEo^m/\ad_\80\1b5\e1\b7q\f7\e0\ee\cf\b1\e2\d9\a5s\e3\\\b3<\e6k\d9\fe\e72g\b8\e5\05\0dz\e48J&\ef\0f \e4\eeV\9e\a2\eca\f4`\ed\e4\e2/\e8\d3\88\ed\e9\8a6\ab\eb\bd\\i\ea\f0\b8\13\fd\c7\d2\d1\fc\9el\97\fe\a9\06U\ff,\10\1a\fa\1bz\d8\fbB\c4\9e\f9u\ae\\\f8H\e9\00\f3\7f\83\c2\f2&=\84\f0\11WF\f1\94A\t\f4\a3+\cb\f5\fa\95\8d\f7\cd\ffO\f6`]x\d9W7\ba\d8\0e\89\fc\da9\e3>\db\bc\f5q\de\8b\9f\b3\df\d2!\f5\dd\e5K7\dc\d8\0ck\d7\eff\a9\d6\b6\d8\ef\d4\81\b2-\d5\04\a4b\d03\ce\a0\d1jp\e6\d3]\1a$\d2\10\fe^\c5\'\94\9c\c4~*\da\c6I@\18\c7\ccVW\c2\fb<\95\c3\a2\82\d3\c1\95\e8\11\c0\a8\afM\cb\9f\c5\8f\ca\c6{\c9\c8\f1\11\0b\c9t\07D\ccCm\86\cd\1a\d3\c0\cf-\b9\02\ce@\96\af\91w\fcm\90.B+\92\19(\e9\93\9c>\a6\96\abTd\97\f2\ea\"\95\c5\80\e0\94\f8\c7\bc\9f\cf\ad~\9e\96\138\9c\a1y\fa\9d$o\b5\98\13\05w\99J\bb1\9b}\d1\f3\9a05\89\8d\07_K\8c^\e1\0d\8ei\8b\cf\8f\ec\9d\80\8a\db\f7B\8b\82I\04\89\b5#\c6\88\88d\9a\83\bf\0eX\82\e6\b0\1e\80\d1\da\dc\81T\cc\93\84c\a6Q\85:\18\17\87\0dr\d5\86\a0\d0\e2\a9\97\ba \a8\ce\04f\aa\f9n\a4\ab|x\eb\aeK\12)\af\12\aco\ad%\c6\ad\ac\18\81\f1\a7/\eb3\a6vUu\a4A?\b7\a5\c4)\f8\a0\f3C:\a1\aa\fd|\a3\9d\97\be\a2\d0s\c4\b5\e7\19\06\b4\be\a7@\b6\89\cd\82\b7\0c\db\cd\b2;\b1\0f\b3b\0fI\b1Ue\8b\b0h\"\d7\bb_H\15\ba\06\f6S\b81\9c\91\b9\b4\8a\de\bc\83\e0\1c\bd\da^Z\bf\ed4\98\be\00\00\00\00eg\bc\b8\8b\c8\t\aa\ee\af\b5\12W\97b\8f2\f0\de7\dc_k%\b98\d7\9d\ef(\b4\c5\8aO\08}d\e0\bdo\01\87\01\d7\b8\bf\d6J\dd\d8j\f23w\df\e0V\10cX\9fW\19P\fa0\a5\e8\14\9f\10\faq\f8\acB\c8\c0{\df\ad\a7\c7gC\08ru&o\ce\cdp\7f\ad\95\15\18\11-\fb\b7\a4?\9e\d0\18\87\'\e8\cf\1aB\8fs\a2\ac \c6\b0\c9Gz\08>\af2\a0[\c8\8e\18\b5g;\n\d0\00\87\b2i8P/\0c_\ec\97\e2\f0Y\85\87\97\e5=\d1\87\86e\b4\e0:\ddZO\8f\cf?(3w\86\10\e4\ea\e3wXR\0d\d8\ed@h\bfQ\f8\a1\f8+\f0\c4\9f\97H*0\"ZOW\9e\e2\f6oI\7f\93\08\f5\c7}\a7@\d5\18\c0\fcmN\d0\9f5+\b7#\8d\c5\18\96\9f\a0\7f*\'\19G\fd\ba| A\02\92\8f\f4\10\f7\e8H\a8=X\14\9bX?\a8#\b6\90\1d1\d3\f7\a1\89j\cfv\14\0f\a8\ca\ac\e1\07\7f\be\84`\c3\06\d2p\a0^\b7\17\1c\e6Y\b8\a9\f4<\df\15L\85\e7\c2\d1\e0\80~i\0e/\cb{kHw\c3\a2\0f\0d\cb\c7h\b1s)\c7\04aL\a0\b8\d9\f5\98oD\90\ff\d3\fc~Pf\ee\1b7\daVM\'\b9\0e(@\05\b6\c6\ef\b0\a4\a3\88\0c\1c\1a\b0\db\81\7f\d7g9\91x\d2+\f4\1fn\93\03\f7&;f\90\9a\83\88?/\91\edX\93)T`D\b41\07\f8\0c\df\a8M\1e\ba\cf\f1\a6\ec\df\92\fe\89\b8.Fg\17\9bT\02p\'\ec\bbH\f0q\de/L\c90\80\f9\dbU\e7Ec\9c\a0?k\f9\c7\83\d3\17h6\c1r\0f\8ay\cb7]\e4\aeP\e1\\@\ffTN%\98\e8\f6s\88\8b\ae\16\ef7\16\f8@\82\04\9d\'>\bc$\1f\e9!AxU\99\af\d7\e0\8b\ca\b0\\3;\b6Y\ed^\d1\e5U\b0~PG\d5\19\ec\ffl!;b\tF\87\da\e7\e92\c8\82\8e\8ep\d4\9e\ed(\b1\f9Q\90_V\e4\82:1X:\83\t\8f\a7\e6n3\1f\08\c1\86\0dm\a6:\b5\a4\e1@\bd\c1\86\fc\05/)I\17JN\f5\af\f3v\"2\96\11\9e\8ax\be+\98\1d\d9\97 K\c9\f4x.\aeH\c0\c0\01\fd\d2\a5fAj\1c^\96\f7y9*O\97\96\9f]\f2\f1#\e5\05\19kM`~\d7\f5\8e\d1b\e7\eb\b6\de_R\8e\t\c27\e9\b5z\d9F\00h\bc!\bc\d0\ea1\df\88\8fVc0a\f9\d6\"\04\9ej\9a\bd\a6\bd\07\d8\c1\01\bf6n\b4\adS\t\08\15\9aNr\1d\ff)\ce\a5\11\86{\b7t\e1\c7\0f\cd\d9\10\92\a8\be\ac*F\11\198#v\a5\80uf\c6\d8\10\01z`\fe\ae\cfr\9b\c9s\ca\"\f1\a4WG\96\18\ef\a99\ad\fd\cc^\11E\06\eeMvc\89\f1\ce\8d&D\dc\e8A\f8dQy/\f94\1e\93A\da\b1&S\bf\d6\9a\eb\e9\c6\f9\b3\8c\a1E\0bb\0e\f0\19\07iL\a1\beQ\9b<\db6\'\845\99\92\96P\fe..\99\b9T&\fc\de\e8\9e\12q]\8cw\16\e14\ce.6\a9\abI\8a\11E\e6?\03 \81\83\bbv\91\e0\e3\13\f6\\[\fdY\e9I\98>U\f1!\06\82lDa>\d4\aa\ce\8b\c6\cf\a97~8A\7f\d6]&\c3n\b3\89v|\d6\ee\ca\c4o\d6\1dY\n\b1\a1\e1\e4\1e\14\f3\81y\a8K\d7i\cb\13\b2\0ew\ab\\\a1\c2\b99\c6~\01\80\fe\a9\9c\e5\99\15$\0b6\a06nQ\1c\8e\a7\16f\86\c2q\da>,\deo,I\b9\d3\94\f0\81\04\t\95\e6\b8\b1{I\0d\a3\1e.\b1\1bH>\d2C-Yn\fb\c3\f6\db\e9\a6\91gQ\1f\a9\b0\ccz\ce\0ct\94a\b9f\f1\06\05\de\00\00\00\00w\070\96\ee\0ea,\99\tQ\ba\07m\c4\19pj\f4\8f\e9c\a55\9ed\95\a3\0e\db\882y\dc\b8\a4\e0\d5\e9\1e\97\d2\d9\88\t\b6L+~\b1|\bd\e7\b8-\07\90\bf\1d\91\1d\b7\10dj\b0 \f2\f3\b9qH\84\beA\de\1a\da\d4}m\dd\e4\eb\f4\d4\b5Q\83\d3\85\c7\13l\98Vdk\a8\c0\fdb\f9z\8ae\c9\ec\14\01\\Oc\06l\d9\fa\0f=c\8d\08\0d\f5;n \c8Li\10^\d5`A\e4\a2gqr<\03\e4\d1K\04\d4G\d2\0d\85\fd\a5\n\b5k5\b5\a8\faB\b2\98l\db\bb\c9\d6\ac\bc\f9@2\d8l\e3E\df\\u\dc\d6\0d\cf\ab\d1=Y&\d90\acQ\de\00:\c8\d7Q\80\bf\d0a\16!\b4\f4\b5V\b3\c4#\cf\ba\95\99\b8\bd\a5\0f(\02\b8\9e_\05\88\08\c6\0c\d9\b2\b1\0b\e9$/o|\87XhL\11\c1a\1d\ab\b6f-=v\dcA\90\01\dbq\06\98\d2 \bc\ef\d5\10*q\b1\85\89\06\b6\b5\1f\9f\bf\e4\a5\e8\b8\d43x\07\c9\a2\0f\00\f94\96\t\a8\8e\e1\0e\98\18\7fj\0d\bb\08m=-\91dl\97\e6c\\\01kkQ\f4\1clab\85e0\d8\f2b\00Nl\06\95\ed\1b\01\a5{\82\08\f4\c1\f5\0f\c4We\b0\d9\c6\12\b7\e9P\8b\be\b8\ea\fc\b9\88|b\dd\1d\df\15\da-I\8c\d3|\f3\fb\d4LeM\b2aX:\b5Q\ce\a3\bc\00t\d4\bb0\e2J\df\a5A=\d8\95\d7\a4\d1\c4m\d3\d6\f4\fbCi\e9j4n\d9\fc\adg\88F\da`\b8\d0D\04-s3\03\1d\e5\aa\nL_\dd\0d|\c9P\05q<\'\02A\aa\be\0b\10\10\c9\0c \86Wh\b5% o\85\b3\b9f\d4\t\cea\e4\9f^\de\f9\0e)\d9\c9\98\b0\d0\98\"\c7\d7\a8\b4Y\b3=\17.\b4\0d\81\b7\bd\\;\c0\bal\ad\ed\b8\83 \9a\bf\b3\b6\03\b6\e2\0ct\b1\d2\9a\ea\d5G9\9d\d2w\af\04\db&\15s\dc\16\83\e3c\0b\12\94d;\84\0dmj>zjZ\a8\e4\0e\cf\0b\93\t\ff\9d\n\00\ae\'}\07\9e\b1\f0\0f\93D\87\08\a3\d2\1e\01\f2hi\06\c2\fe\f7bW]\80eg\cb\19l6qnk\06\e7\fe\d4\1bv\89\d3+\e0\10\dazZg\ddJ\cc\f9\b9\dfo\8e\be\ef\f9\17\b7\beC`\b0\8e\d5\d6\d6\a3\e8\a1\d1\93~8\d8\c2\c4O\df\f2R\d1\bbg\f1\a6\bcWg?\b5\06\ddH\b26K\d8\0d+\da\af\n\1bL6\03J\f6A\04z`\df`\ef\c3\a8g\dfU1n\8e\efFi\bey\cba\b3\8c\bcf\83\1a%o\d2\a0Rh\e26\cc\0cw\95\bb\0bG\03\"\02\16\b9U\05&/\c5\ba;\be\b2\bd\0b(+\b4Z\92\\\b3j\04\c2\d7\ff\a7\b5\d0\cf1,\d9\9e\8b[\de\ae\1d\9bd\c2\b0\ecc\f2&uj\a3\9c\02m\93\n\9c\t\06\a9\eb\0e6?r\07g\85\05\00W\13\95\bfJ\82\e2\b8z\14{\b1+\ae\0c\b6\1b8\92\d2\8e\9b\e5\d5\be\0d|\dc\ef\b7\0b\db\df!\86\d3\d2\d4\f1\d4\e2Bh\dd\b3\f8\1f\da\83n\81\be\16\cd\f6\b9&[o\b0w\e1\18\b7Gw\88\08Z\e6\ff\0fjpf\06;\ca\11\01\0b\\\8fe\9e\ff\f8b\aeiak\ff\d3\16l\cfE\a0\n\e2x\d7\0d\d2\eeN\04\83T9\03\b3\c2\a7g&a\d0`\16\f7IiGM>nw\db\ae\d1jJ\d9\d6Z\dc@\df\0bf7\d8;\f0\a9\bc\aeS\de\bb\9e\c5G\b2\cf\7f0\b5\ff\e9\bd\bd\f2\1c\ca\ba\c2\8aS\b3\930$\b4\a3\a6\ba\d06\05\cd\d7\06\93T\deW)#\d9g\bf\b3fz.\c4aJ\b8]h\1b\02*o+\94\b4\0b\be7\c3\0c\8e\a1Z\05\df\1b-\02\ef\8d\00\00\00\00\19\1b1A26b\82+-S\c3dl\c5\04}w\f4EVZ\a7\86OA\96\c7\c8\d9\8a\08\d1\c2\bbI\fa\ef\e8\8a\e3\f4\d9\cb\ac\b5O\0c\b5\ae~M\9e\83-\8e\87\98\1c\cfJ\c2\12QS\d9#\10x\f4p\d3a\efA\92.\ae\d7U7\b5\e6\14\1c\98\b5\d7\05\83\84\96\82\1b\98Y\9b\00\a9\18\b0-\fa\db\a96\cb\9a\e6w]]\ffll\1c\d4A?\df\cdZ\0e\9e\95\84$\a2\8c\9f\15\e3\a7\b2F \be\a9wa\f1\e8\e1\a6\e8\f3\d0\e7\c3\de\83$\da\c5\b2e]]\ae\aaDF\9f\ebok\cc(vp\fdi91k\ae *Z\ef\0b\07\t,\12\1c8m\dfF6\f3\c6]\07\b2\edpTq\f4ke0\bb*\f3\f7\a21\c2\b6\89\1c\91u\90\07\a04\17\9f\bc\fb\0e\84\8d\ba%\a9\dey<\b2\ef8s\f3y\ffj\e8H\beA\c5\1b}X\de*<\f0yO\05\e9b~D\c2O-\87\dbT\1c\c6\94\15\8a\01\8d\0e\bb@\a6#\e8\83\bf8\d9\c28\a0\c5\0d!\bb\f4L\n\96\a7\8f\13\8d\96\ce\\\cc\00\tE\d71Hn\fab\8bw\e1S\ca\ba\bb]T\a3\a0l\15\88\8d?\d6\91\96\0e\97\de\d7\98P\c7\cc\a9\11\ec\e1\fa\d2\f5\fa\cb\93rb\d7\\ky\e6\1d@T\b5\deYO\84\9f\16\0e\12X\0f\15#\19$8p\da=#A\9be\fdk\a7|\e6Z\e6W\cb\t%N\d08d\01\91\ae\a3\18\8a\9f\e23\a7\cc!*\bc\fd`\ad$\e1\af\b4?\d0\ee\9f\12\83-\86\t\b2l\c9H$\ab\d0S\15\ea\fb~F)\e2ewh/?y\f66$H\b7\1d\t\1bt\04\12*5KS\bc\f2RH\8d\b3ye\dep`~\ef1\e7\e6\f3\fe\fe\fd\c2\bf\d5\d0\91|\cc\cb\a0=\83\8a6\fa\9a\91\07\bb\b1\bcTx\a8\a7e9;\83\98K\"\98\a9\n\t\b5\fa\c9\10\ae\cb\88_\ef]OF\f4l\0em\d9?\cdt\c2\0e\8c\f3Z\12C\eaA#\02\c1lp\c1\d8wA\80\976\d7G\8e-\e6\06\a5\00\b5\c5\bc\1b\84\84qA\8a\1ahZ\bb[Cw\e8\98Zl\d9\d9\15-O\1e\0c6~_\'\1b-\9c>\00\1c\dd\b9\98\00\12\a0\831S\8b\aeb\90\92\b5S\d1\dd\f4\c5\16\c4\ef\f4W\ef\c2\a7\94\f6\d9\96\d5\ae\07\bc\e9\b7\1c\8d\a8\9c1\dek\85*\ef*\caky\ed\d3pH\ac\f8]\1bo\e1F*.f\de6\e1\7f\c5\07\a0T\e8TcM\f3e\"\02\b2\f3\e5\1b\a9\c2\a40\84\91g)\9f\a0&\e4\c5\ae\b8\fd\de\9f\f9\d6\f3\cc:\cf\e8\fd{\80\a9k\bc\99\b2Z\fd\b2\9f\t>\ab\848\7f,\1c$\b05\07\15\f1\1e*F2\071wsHp\e1\b4Qk\d0\f5zF\836c]\b2w\cb\fa\d7N\d2\e1\e6\0f\f9\cc\b5\cc\e0\d7\84\8d\af\96\12J\b6\8d#\0b\9d\a0p\c8\84\bbA\89\03#]F\1a8l\071\15?\c4(\0e\0e\85gO\98B~T\a9\03Uy\fa\c0Lb\cb\81\818\c5\1f\98#\f4^\b3\0e\a7\9d\aa\15\96\dc\e5T\00\1b\fcO1Z\d7bb\99\ceyS\d8I\e1O\17P\fa~V{\d7-\95b\cc\1c\d4-\8d\8a\134\96\bbR\1f\bb\e8\91\06\a0\d9\d0^~\f3\ecGe\c2\adlH\91nuS\a0/:\126\e8#\t\07\a9\08$Tj\11?e+\96\a7y\e4\8f\bcH\a5\a4\91\1bf\bd\8a*\'\f2\cb\bc\e0\eb\d0\8d\a1\c0\fd\deb\d9\e6\ef#\14\bc\e1\bd\0d\a7\d0\fc&\8a\83??\91\b2~p\d0$\b9i\cb\15\f8B\e6F;[\fdwz\dcek\b5\c5~Z\f4\eeS\t7\f7H8v\b8\t\ae\b1\a1\12\9f\f0\8a?\cc3\93$\fdr\00\00\00\00\01\c2j7\03\84\d4n\02F\beY\07\t\a8\dc\06\cb\c2\eb\04\8d|\b2\05O\16\85\0e\13Q\b8\0f\d1;\8f\0d\97\85\d6\0cU\ef\e1\t\1a\f9d\08\d8\93S\n\9e-\n\0b\\G=\1c&\a3p\1d\e4\c9G\1f\a2w\1e\1e`\1d)\1b/\0b\ac\1a\eda\9b\18\ab\df\c2\19i\b5\f5\125\f2\c8\13\f7\98\ff\11\b1&\a6\10sL\91\15\86\84\0b<\c0:R=\02Pe6^\17X7\9c}o5\da\c364\18\a9\011W\bf\840\95\d5\b32\d3k\ea3\11\01\dd$k\e5\90%\a9\8f\a7\'\ef1\fe&-[\c9#bML\"\a0\'{ \e6\99\"!$\f3\15*x\b4(+\ba\de\1f)\fc`F(>\nq-q\1c\f4,\b3v\c3.\f5\c8\9a/7\a2\adp\9a\8d\c0qX\e7\f7s\1eY\aer\dc3\99w\93%\1cvQO+t\17\f1ru\d5\9bE~\89\dcx\7fK\b6O}\0d\08\16|\cfb!y\80t\a4xB\1e\93z\04\a0\ca{\c6\ca\fdl\bc.\b0m~D\87o8\fa\den\fa\90\e9k\b5\86ljw\ec[h1R\02i\f385b\af\7f\08cm\15?a+\abf`\e9\c1Qe\a6\d7\d4dd\bd\e3f\"\03\bag\e0i\8dH\d7\cb I\15\a1\17KS\1fNJ\91uyO\dec\fcN\1c\t\cbLZ\b7\92M\98\dd\a5F\c4\9a\98G\06\f0\afE@N\f6D\82$\c1A\cd2D@\0fXsBI\e6*C\8b\8c\1dT\f1hPU3\02gWu\bc>V\b7\d6\tS\f8\c0\8cR:\aa\bbP|\14\e2Q\be~\d5Z\e29\e8[ S\dfYf\ed\86X\a4\87\b1]\eb\914\\)\fb\03^oEZ_\ad/m\e15\1b\80\e0\f7q\b7\e2\b1\cf\ee\e3s\a5\d9\e6<\b3\\\e7\fe\d9k\e5\b8g2\e4z\0d\05\ef&J8\ee\e4 \0f\ec\a2\9eV\ed`\f4a\e8/\e2\e4\e9\ed\88\d3\eb\ab6\8a\eai\\\bd\fd\13\b8\f0\fc\d1\d2\c7\fe\97l\9e\ffU\06\a9\fa\1a\10,\fb\d8z\1b\f9\9e\c4B\f8\\\aeu\f3\00\e9H\f2\c2\83\7f\f0\84=&\f1FW\11\f4\tA\94\f5\cb+\a3\f7\8d\95\fa\f6O\ff\cd\d9x]`\d8\ba7W\da\fc\89\0e\db>\e39\deq\f5\bc\df\b3\9f\8b\dd\f5!\d2\dc7K\e5\d7k\0c\d8\d6\a9f\ef\d4\ef\d8\b6\d5-\b2\81\d0b\a4\04\d1\a0\ce3\d3\e6pj\d2$\1a]\c5^\fe\10\c4\9c\94\'\c6\da*~\c7\18@I\c2WV\cc\c3\95<\fb\c1\d3\82\a2\c0\11\e8\95\cbM\af\a8\ca\8f\c5\9f\c8\c9{\c6\c9\0b\11\f1\ccD\07t\cd\86mC\cf\c0\d3\1a\ce\02\b9-\91\af\96@\90m\fcw\92+B.\93\e9(\19\96\a6>\9c\97dT\ab\95\"\ea\f2\94\e0\80\c5\9f\bc\c7\f8\9e~\ad\cf\9c8\13\96\9d\fay\a1\98\b5o$\99w\05\13\9b1\bbJ\9a\f3\d1}\8d\8950\8cK_\07\8e\0d\e1^\8f\cf\8bi\8a\80\9d\ec\8bB\f7\db\89\04I\82\88\c6#\b5\83\9ad\88\82X\0e\bf\80\1e\b0\e6\81\dc\da\d1\84\93\ccT\85Q\a6c\87\17\18:\86\d5r\0d\a9\e2\d0\a0\a8 \ba\97\aaf\04\ce\ab\a4n\f9\ae\ebx|\af)\12K\ado\ac\12\ac\ad\c6%\a7\f1\81\18\a63\eb/\a4uUv\a5\b7?A\a0\f8)\c4\a1:C\f3\a3|\fd\aa\a2\be\97\9d\b5\c4s\d0\b4\06\19\e7\b6@\a7\be\b7\82\cd\89\b2\cd\db\0c\b3\0f\b1;\b1I\0fb\b0\8beU\bb\d7\"h\ba\15H_\b8S\f6\06\b9\91\9c1\bc\de\8a\b4\bd\1c\e0\83\bfZ^\da\be\984\ed\00\00\00\00\b8\bcge\aa\t\c8\8b\12\b5\af\ee\8fb\97W7\de\f02%k_\dc\9d\d78\b9\c5\b4(\ef}\08O\8ao\bd\e0d\d7\01\87\01J\d6\bf\b8\f2j\d8\dd\e0\dfw3Xc\10VP\19W\9f\e8\a50\fa\fa\10\9f\14B\ac\f8q\df{\c0\c8g\c7\a7\adur\08C\cd\ceo&\95\ad\7fp-\11\18\15?\a4\b7\fb\87\18\d0\9e\1a\cf\e8\'\a2s\8fB\b0\c6 \ac\08zG\c9\a02\af>\18\8e\c8[\n;g\b5\b2\87\00\d0/P8i\97\ec_\0c\85Y\f0\e2=\e5\97\87e\86\87\d1\dd:\e0\b4\cf\8fOZw3(?\ea\e4\10\86RXw\e3@\ed\d8\0d\f8Q\bfh\f0+\f8\a1H\97\9f\c4Z\"0*\e2\9eWO\7fIo\f6\c7\f5\08\93\d5@\a7}m\fc\c0\185\9f\d0N\8d#\b7+\9f\96\18\c5\'*\7f\a0\ba\fdG\19\02A |\10\f4\8f\92\a8H\e8\f7\9b\14X=#\a8?X1\1d\90\b6\89\a1\f7\d3\14v\cfj\ac\ca\a8\0f\be\7f\07\e1\06\c3`\84^\a0p\d2\e6\1c\17\b7\f4\a9\b8YL\15\df<\d1\c2\e7\85i~\80\e0{\cb/\0e\c3wHk\cb\0d\0f\a2s\b1h\c7a\04\c7)\d9\b8\a0LDo\98\f5\fc\d3\ff\90\eefP~V\da7\1b\0e\b9\'M\b6\05@(\a4\b0\ef\c6\1c\0c\88\a3\81\db\b0\1a9g\d7\7f+\d2x\91\93n\1f\f4;&\f7\03\83\9a\90f\91/?\88)\93X\ed\b4D`T\0c\f8\071\1eM\a8\df\a6\f1\cf\ba\fe\92\df\ecF.\b8\89T\9b\17g\ec\'p\02q\f0H\bb\c9L/\de\db\f9\800cE\e7Uk?\a0\9c\d3\83\c7\f9\c16h\17y\8a\0fr\e4]7\cb\\\e1P\aeNT\ff@\f6\e8\98%\ae\8b\88s\167\ef\16\04\82@\f8\bc>\'\9d!\e9\1f$\99UxA\8b\e0\d7\af3\\\b0\ca\edY\b6;U\e5\d1^GP~\b0\ff\ec\19\d5b;!l\da\87F\t\c82\e9\e7p\8e\8e\82(\ed\9e\d4\90Q\f9\b1\82\e4V_:X1:\a7\8f\t\83\1f3n\e6\0d\86\c1\08\b5:\a6m\bd@\e1\a4\05\fc\86\c1\17I)/\af\f5NJ2\"v\f3\8a\9e\11\96\98+\bex \97\d9\1dx\f4\c9K\c0H\ae.\d2\fd\01\c0jAf\a5\f7\96^\1cO*9y]\9f\96\97\e5#\f1\f2Mk\19\05\f5\d7~`\e7b\d1\8e_\de\b6\eb\c2\t\8eRz\b5\e97h\00F\d9\d0\bc!\bc\88\df1\ea0cV\8f\"\d6\f9a\9aj\9e\04\07\bd\a6\bd\bf\01\c1\d8\ad\b4n6\15\08\tS\1drN\9a\a5\ce)\ff\b7{\86\11\0f\c7\e1t\92\10\d9\cd*\ac\be\a88\19\11F\80\a5v#\d8\c6fu`z\01\10r\cf\ae\fe\cas\c9\9bW\a4\f1\"\ef\18\96G\fd\ad9\a9E\11^\ccvM\ee\06\ce\f1\89c\dcD&\8dd\f8A\e8\f9/yQA\93\1e4S&\b1\da\eb\9a\d6\bf\b3\f9\c6\e9\0bE\a1\8c\19\f0\0eb\a1Li\07<\9bQ\be\84\'6\db\96\92\995..\feP&T\b9\99\9e\e8\de\fc\8c]q\124\e1\16w\a96.\ce\11\8aI\ab\03?\e6E\bb\83\81 \e3\e0\91v[\\\f6\13I\e9Y\fd\f1U>\98l\82\06!\d4>aD\c6\8b\ce\aa~7\a9\cf\d6\7fA8n\c3&]|v\89\b3\c4\ca\ee\d6Y\1d\d6o\e1\a1\b1\n\f3\14\1e\e4K\a8y\81\13\cbi\d7\abw\0e\b2\b9\c2\a1\\\01~\c69\9c\a9\fe\80$\15\99\e56\a06\0b\8e\1cQn\86f\16\a7>\daq\c2,o\de,\94\d3\b9I\t\04\81\f0\b1\b8\e6\95\a3\0dI{\1b\b1.\1eC\d2>H\fbnY-\e9\db\f6\c3Qg\91\a6\cc\b0\a9\1ft\0c\cezf\b9a\94\de\05\06\f1\00\00\00\00\00\00\00\00\01\00\00\00\04\00\04\00\08\00\04\00\02\00\00\00\04\00\05\00\10\00\08\00\02\00\00\00\04\00\06\00 \00 \00\02\00\00\00\04\00\04\00\10\00\10\00\03\00\00\00\08\00\10\00 \00 \00\03\00\00\00\08\00\10\00\80\00\80\00\03\00\00\00\08\00 \00\80\00\00\01\03\00\00\00 \00\80\00\02\01\00\04\03\00\00\00 \00\02\01\02\01\00\10\03\00\00\00\1a1\00\00\8c$\00\00\01\01\00\00\1e\01\00\00\0f\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00\03\00\00\00\03\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00\05\00\00\00\05\00\00\00\00\00\00\00\9a5\00\00\14%\00\00\00\00\00\00\1e\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00\02\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00\06\00\00\00\06\00\00\00\07\00\00\00\07\00\00\00\08\00\00\00\08\00\00\00\t\00\00\00\t\00\00\00\n\00\00\00\n\00\00\00\0b\00\00\00\0b\00\00\00\0c\00\00\00\0c\00\00\00\0d\00\00\00\0d\00\00\00\00\00\00\00\a0%\00\00\00\00\00\00\13\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\03\00\00\00\07\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\06\00\00\00\07\00\00\00\08\00\00\00\n\00\00\00\0c\00\00\00\0e\00\00\00\10\00\00\00\14\00\00\00\18\00\00\00\1c\00\00\00 \00\00\00(\00\00\000\00\00\008\00\00\00@\00\00\00P\00\00\00`\00\00\00p\00\00\00\80\00\00\00\a0\00\00\00\c0\00\00\00\e0\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\06\00\00\00\08\00\00\00\0c\00\00\00\10\00\00\00\18\00\00\00 \00\00\000\00\00\00@\00\00\00`\00\00\00\80\00\00\00\c0\00\00\00\00\01\00\00\80\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\06\00\00\00\08\00\00\00\0c\00\00\00\10\00\00\00\18\00\00\00 \00\00\000\00\00\00@\00\00\00`\00\00\f8:\00\00\08;\00\00tG\00\00\13;\00\00\1e;\00\00+;\00\006;\00\00J;\00\00W;\00\00tG\00\00\04\'\00\00\05\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00}G\00\00\00\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\n\ff\ff\ff\ff\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04\'\00\00`\07\00\00\00\08P\00\00\08\10\00\14\08s\00\12\07\1f\00\00\08p\00\00\080\00\00\t\c0\00\10\07\n\00\00\08`\00\00\08 \00\00\t\a0\00\00\08\00\00\00\08\80\00\00\08@\00\00\t\e0\00\10\07\06\00\00\08X\00\00\08\18\00\00\t\90\00\13\07;\00\00\08x\00\00\088\00\00\t\d0\00\11\07\11\00\00\08h\00\00\08(\00\00\t\b0\00\00\08\08\00\00\08\88\00\00\08H\00\00\t\f0\00\10\07\04\00\00\08T\00\00\08\14\00\15\08\e3\00\13\07+\00\00\08t\00\00\084\00\00\t\c8\00\11\07\0d\00\00\08d\00\00\08$\00\00\t\a8\00\00\08\04\00\00\08\84\00\00\08D\00\00\t\e8\00\10\07\08\00\00\08\\\00\00\08\1c\00\00\t\98\00\14\07S\00\00\08|\00\00\08<\00\00\t\d8\00\12\07\17\00\00\08l\00\00\08,\00\00\t\b8\00\00\08\0c\00\00\08\8c\00\00\08L\00\00\t\f8\00\10\07\03\00\00\08R\00\00\08\12\00\15\08\a3\00\13\07#\00\00\08r\00\00\082\00\00\t\c4\00\11\07\0b\00\00\08b\00\00\08\"\00\00\t\a4\00\00\08\02\00\00\08\82\00\00\08B\00\00\t\e4\00\10\07\07\00\00\08Z\00\00\08\1a\00\00\t\94\00\14\07C\00\00\08z\00\00\08:\00\00\t\d4\00\12\07\13\00\00\08j\00\00\08*\00\00\t\b4\00\00\08\n\00\00\08\8a\00\00\08J\00\00\t\f4\00\10\07\05\00\00\08V\00\00\08\16\00@\08\00\00\13\073\00\00\08v\00\00\086\00\00\t\cc\00\11\07\0f\00\00\08f\00\00\08&\00\00\t\ac\00\00\08\06\00\00\08\86\00\00\08F\00\00\t\ec\00\10\07\t\00\00\08^\00\00\08\1e\00\00\t\9c\00\14\07c\00\00\08~\00\00\08>\00\00\t\dc\00\12\07\1b\00\00\08n\00\00\08.\00\00\t\bc\00\00\08\0e\00\00\08\8e\00\00\08N\00\00\t\fc\00`\07\00\00\00\08Q\00\00\08\11\00\15\08\83\00\12\07\1f\00\00\08q\00\00\081\00\00\t\c2\00\10\07\n\00\00\08a\00\00\08!\00\00\t\a2\00\00\08\01\00\00\08\81\00\00\08A\00\00\t\e2\00\10\07\06\00\00\08Y\00\00\08\19\00\00\t\92\00\13\07;\00\00\08y\00\00\089\00\00\t\d2\00\11\07\11\00\00\08i\00\00\08)\00\00\t\b2\00\00\08\t\00\00\08\89\00\00\08I\00\00\t\f2\00\10\07\04\00\00\08U\00\00\08\15\00\10\08\02\01\13\07+\00\00\08u\00\00\085\00\00\t\ca\00\11\07\0d\00\00\08e\00\00\08%\00\00\t\aa\00\00\08\05\00\00\08\85\00\00\08E\00\00\t\ea\00\10\07\08\00\00\08]\00\00\08\1d\00\00\t\9a\00\14\07S\00\00\08}\00\00\08=\00\00\t\da\00\12\07\17\00\00\08m\00\00\08-\00\00\t\ba\00\00\08\0d\00\00\08\8d\00\00\08M\00\00\t\fa\00\10\07\03\00\00\08S\00\00\08\13\00\15\08\c3\00\13\07#\00\00\08s\00\00\083\00\00\t\c6\00\11\07\0b\00\00\08c\00\00\08#\00\00\t\a6\00\00\08\03\00\00\08\83\00\00\08C\00\00\t\e6\00\10\07\07\00\00\08[\00\00\08\1b\00\00\t\96\00\14\07C\00\00\08{\00\00\08;\00\00\t\d6\00\12\07\13\00\00\08k\00\00\08+\00\00\t\b6\00\00\08\0b\00\00\08\8b\00\00\08K\00\00\t\f6\00\10\07\05\00\00\08W\00\00\08\17\00@\08\00\00\13\073\00\00\08w\00\00\087\00\00\t\ce\00\11\07\0f\00\00\08g\00\00\08\'\00\00\t\ae\00\00\08\07\00\00\08\87\00\00\08G\00\00\t\ee\00\10\07\t\00\00\08_\00\00\08\1f\00\00\t\9e\00\14\07c\00\00\08\7f\00\00\08?\00\00\t\de\00\12\07\1b\00\00\08o\00\00\08/\00\00\t\be\00\00\08\0f\00\00\08\8f\00\00\08O\00\00\t\fe\00`\07\00\00\00\08P\00\00\08\10\00\14\08s\00\12\07\1f\00\00\08p\00\00\080\00\00\t\c1\00\10\07\n\00\00\08`\00\00\08 \00\00\t\a1\00\00\08\00\00\00\08\80\00\00\08@\00\00\t\e1\00\10\07\06\00\00\08X\00\00\08\18\00\00\t\91\00\13\07;\00\00\08x\00\00\088\00\00\t\d1\00\11\07\11\00\00\08h\00\00\08(\00\00\t\b1\00\00\08\08\00\00\08\88\00\00\08H\00\00\t\f1\00\10\07\04\00\00\08T\00\00\08\14\00\15\08\e3\00\13\07+\00\00\08t\00\00\084\00\00\t\c9\00\11\07\0d\00\00\08d\00\00\08$\00\00\t\a9\00\00\08\04\00\00\08\84\00\00\08D\00\00\t\e9\00\10\07\08\00\00\08\\\00\00\08\1c\00\00\t\99\00\14\07S\00\00\08|\00\00\08<\00\00\t\d9\00\12\07\17\00\00\08l\00\00\08,\00\00\t\b9\00\00\08\0c\00\00\08\8c\00\00\08L\00\00\t\f9\00\10\07\03\00\00\08R\00\00\08\12\00\15\08\a3\00\13\07#\00\00\08r\00\00\082\00\00\t\c5\00\11\07\0b\00\00\08b\00\00\08\"\00\00\t\a5\00\00\08\02\00\00\08\82\00\00\08B\00\00\t\e5\00\10\07\07\00\00\08Z\00\00\08\1a\00\00\t\95\00\14\07C\00\00\08z\00\00\08:\00\00\t\d5\00\12\07\13\00\00\08j\00\00\08*\00\00\t\b5\00\00\08\n\00\00\08\8a\00\00\08J\00\00\t\f5\00\10\07\05\00\00\08V\00\00\08\16\00@\08\00\00\13\073\00\00\08v\00\00\086\00\00\t\cd\00\11\07\0f\00\00\08f\00\00\08&\00\00\t\ad\00\00\08\06\00\00\08\86\00\00\08F\00\00\t\ed\00\10\07\t\00\00\08^\00\00\08\1e\00\00\t\9d\00\14\07c\00\00\08~\00\00\08>\00\00\t\dd\00\12\07\1b\00\00\08n\00\00\08.\00\00\t\bd\00\00\08\0e\00\00\08\8e\00\00\08N\00\00\t\fd\00`\07\00\00\00\08Q\00\00\08\11\00\15\08\83\00\12\07\1f\00\00\08q\00\00\081\00\00\t\c3\00\10\07\n\00\00\08a\00\00\08!\00\00\t\a3\00\00\08\01\00\00\08\81\00\00\08A\00\00\t\e3\00\10\07\06\00\00\08Y\00\00\08\19\00\00\t\93\00\13\07;\00\00\08y\00\00\089\00\00\t\d3\00\11\07\11\00\00\08i\00\00\08)\00\00\t\b3\00\00\08\t\00\00\08\89\00\00\08I\00\00\t\f3\00\10\07\04\00\00\08U\00\00\08\15\00\10\08\02\01\13\07+\00\00\08u\00\00\085\00\00\t\cb\00\11\07\0d\00\00\08e\00\00\08%\00\00\t\ab\00\00\08\05\00\00\08\85\00\00\08E\00\00\t\eb\00\10\07\08\00\00\08]\00\00\08\1d\00\00\t\9b\00\14\07S\00\00\08}\00\00\08=\00\00\t\db\00\12\07\17\00\00\08m\00\00\08-\00\00\t\bb\00\00\08\0d\00\00\08\8d\00\00\08M\00\00\t\fb\00\10\07\03\00\00\08S\00\00\08\13\00\15\08\c3\00\13\07#\00\00\08s\00\00\083\00\00\t\c7\00\11\07\0b\00\00\08c\00\00\08#\00\00\t\a7\00\00\08\03\00\00\08\83\00\00\08C\00\00\t\e7\00\10\07\07\00\00\08[\00\00\08\1b\00\00\t\97\00\14\07C\00\00\08{\00\00\08;\00\00\t\d7\00\12\07\13\00\00\08k\00\00\08+\00\00\t\b7\00\00\08\0b\00\00\08\8b\00\00\08K\00\00\t\f7\00\10\07\05\00\00\08W\00\00\08\17\00@\08\00\00\13\073\00\00\08w\00\00\087\00\00\t\cf\00\11\07\0f\00\00\08g\00\00\08\'\00\00\t\af\00\00\08\07\00\00\08\87\00\00\08G\00\00\t\ef\00\10\07\t\00\00\08_\00\00\08\1f\00\00\t\9f\00\14\07c\00\00\08\7f\00\00\08?\00\00\t\df\00\12\07\1b\00\00\08o\00\00\08/\00\00\t\bf\00\00\08\0f\00\00\08\8f\00\00\08O\00\00\t\ff\00\10\05\01\00\17\05\01\01\13\05\11\00\1b\05\01\10\11\05\05\00\19\05\01\04\15\05A\00\1d\05\01@\10\05\03\00\18\05\01\02\14\05!\00\1c\05\01 \12\05\t\00\1a\05\01\08\16\05\81\00@\05\00\00\10\05\02\00\17\05\81\01\13\05\19\00\1b\05\01\18\11\05\07\00\19\05\01\06\15\05a\00\1d\05\01`\10\05\04\00\18\05\01\03\14\051\00\1c\05\010\12\05\0d\00\1a\05\01\0c\16\05\c1\00@\05\00\00\10\00\11\00\12\00\00\00\08\00\07\00\t\00\06\00\n\00\05\00\0b\00\04\00\0c\00\03\00\0d\00\02\00\0e\00\01\00\0f\00\01\00\02\00\03\00\04\00\05\00\07\00\t\00\0d\00\11\00\19\00!\001\00A\00a\00\81\00\c1\00\01\01\81\01\01\02\01\03\01\04\01\06\01\08\01\0c\01\10\01\18\01 \010\01@\01`\00\00\00\00\03\00\04\00\05\00\06\00\07\00\08\00\t\00\n\00\0b\00\0d\00\0f\00\11\00\13\00\17\00\1b\00\1f\00#\00+\003\00;\00C\00S\00c\00s\00\83\00\a3\00\c3\00\e3\00\02\01\00\00\00\00\10\00\10\00\10\00\10\00\11\00\11\00\12\00\12\00\13\00\13\00\14\00\14\00\15\00\15\00\16\00\16\00\17\00\17\00\18\00\18\00\19\00\19\00\1a\00\1a\00\1b\00\1b\00\1c\00\1c\00\1d\00\1d\00@\00@\00\10\00\10\00\10\00\10\00\10\00\10\00\10\00\10\00\11\00\11\00\11\00\11\00\12\00\12\00\12\00\12\00\13\00\13\00\13\00\13\00\14\00\14\00\14\00\14\00\15\00\15\00\15\00\15\00\10\00I\00\c3\00\0c\00\08\00\8c\00\08\00L\00\08\00\cc\00\08\00,\00\08\00\ac\00\08\00l\00\08\00\ec\00\08\00\1c\00\08\00\9c\00\08\00\\\00\08\00\dc\00\08\00<\00\08\00\bc\00\08\00|\00\08\00\fc\00\08\00\02\00\08\00\82\00\08\00B\00\08\00\c2\00\08\00\"\00\08\00\a2\00\08\00b\00\08\00\e2\00\08\00\12\00\08\00\92\00\08\00R\00\08\00\d2\00\08\002\00\08\00\b2\00\08\00r\00\08\00\f2\00\08\00\n\00\08\00\8a\00\08\00J\00\08\00\ca\00\08\00*\00\08\00\aa\00\08\00j\00\08\00\ea\00\08\00\1a\00\08\00\9a\00\08\00Z\00\08\00\da\00\08\00:\00\08\00\ba\00\08\00z\00\08\00\fa\00\08\00\06\00\08\00\86\00\08\00F\00\08\00\c6\00\08\00&\00\08\00\a6\00\08\00f\00\08\00\e6\00\08\00\16\00\08\00\96\00\08\00V\00\08\00\d6\00\08\006\00\08\00\b6\00\08\00v\00\08\00\f6\00\08\00\0e\00\08\00\8e\00\08\00N\00\08\00\ce\00\08\00.\00\08\00\ae\00\08\00n\00\08\00\ee\00\08\00\1e\00\08\00\9e\00\08\00^\00\08\00\de\00\08\00>\00\08\00\be\00\08\00~\00\08\00\fe\00\08\00\01\00\08\00\81\00\08\00A\00\08\00\c1\00\08\00!\00\08\00\a1\00\08\00a\00\08\00\e1\00\08\00\11\00\08\00\91\00\08\00Q\00\08\00\d1\00\08\001\00\08\00\b1\00\08\00q\00\08\00\f1\00\08\00\t\00\08\00\89\00\08\00I\00\08\00\c9\00\08\00)\00\08\00\a9\00\08\00i\00\08\00\e9\00\08\00\19\00\08\00\99\00\08\00Y\00\08\00\d9\00\08\009\00\08\00\b9\00\08\00y\00\08\00\f9\00\08\00\05\00\08\00\85\00\08\00E\00\08\00\c5\00\08\00%\00\08\00\a5\00\08\00e\00\08\00\e5\00\08\00\15\00\08\00\95\00\08\00U\00\08\00\d5\00\08\005\00\08\00\b5\00\08\00u\00\08\00\f5\00\08\00\0d\00\08\00\8d\00\08\00M\00\08\00\cd\00\08\00-\00\08\00\ad\00\08\00m\00\08\00\ed\00\08\00\1d\00\08\00\9d\00\08\00]\00\08\00\dd\00\08\00=\00\08\00\bd\00\08\00}\00\08\00\fd\00\08\00\13\00\t\00\13\01\t\00\93\00\t\00\93\01\t\00S\00\t\00S\01\t\00\d3\00\t\00\d3\01\t\003\00\t\003\01\t\00\b3\00\t\00\b3\01\t\00s\00\t\00s\01\t\00\f3\00\t\00\f3\01\t\00\0b\00\t\00\0b\01\t\00\8b\00\t\00\8b\01\t\00K\00\t\00K\01\t\00\cb\00\t\00\cb\01\t\00+\00\t\00+\01\t\00\ab\00\t\00\ab\01\t\00k\00\t\00k\01\t\00\eb\00\t\00\eb\01\t\00\1b\00\t\00\1b\01\t\00\9b\00\t\00\9b\01\t\00[\00\t\00[\01\t\00\db\00\t\00\db\01\t\00;\00\t\00;\01\t\00\bb\00\t\00\bb\01\t\00{\00\t\00{\01\t\00\fb\00\t\00\fb\01\t\00\07\00\t\00\07\01\t\00\87\00\t\00\87\01\t\00G\00\t\00G\01\t\00\c7\00\t\00\c7\01\t\00\'\00\t\00\'\01\t\00\a7\00\t\00\a7\01\t\00g\00\t\00g\01\t\00\e7\00\t\00\e7\01\t\00\17\00\t\00\17\01\t\00\97\00\t\00\97\01\t\00W\00\t\00W\01\t\00\d7\00\t\00\d7\01\t\007\00\t\007\01\t\00\b7\00\t\00\b7\01\t\00w\00\t\00w\01\t\00\f7\00\t\00\f7\01\t\00\0f\00\t\00\0f\01\t\00\8f\00\t\00\8f\01\t\00O\00\t\00O\01\t\00\cf\00\t\00\cf\01\t\00/\00\t\00/\01\t\00\af\00\t\00\af\01\t\00o\00\t\00o\01\t\00\ef\00\t\00\ef\01\t\00\1f\00\t\00\1f\01\t\00\9f\00\t\00\9f\01\t\00_\00\t\00_\01\t\00\df\00\t\00\df\01\t\00?\00\t\00?\01\t\00\bf\00\t\00\bf\01\t\00\7f\00\t\00\7f\01\t\00\ff\00\t\00\ff\01\t\00\00\00\07\00@\00\07\00 \00\07\00`\00\07\00\10\00\07\00P\00\07\000\00\07\00p\00\07\00\08\00\07\00H\00\07\00(\00\07\00h\00\07\00\18\00\07\00X\00\07\008\00\07\00x\00\07\00\04\00\07\00D\00\07\00$\00\07\00d\00\07\00\14\00\07\00T\00\07\004\00\07\00t\00\07\00\03\00\08\00\83\00\08\00C\00\08\00\c3\00\08\00#\00\08\00\a3\00\08\00c\00\08\00\e3\00\08\00\00\00\05\00\10\00\05\00\08\00\05\00\18\00\05\00\04\00\05\00\14\00\05\00\0c\00\05\00\1c\00\05\00\02\00\05\00\12\00\05\00\n\00\05\00\1a\00\05\00\06\00\05\00\16\00\05\00\0e\00\05\00\1e\00\05\00\01\00\05\00\11\00\05\00\t\00\05\00\19\00\05\00\05\00\05\00\15\00\05\00\0d\00\05\00\1d\00\05\00\03\00\05\00\13\00\05\00\0b\00\05\00\1b\00\05\00\07\00\05\00\17\00\05\00incorrect header check\00unknown compression method\00invalid window size\00unknown header flags set\00header crc mismatch\00invalid block type\00invalid stored block lengths\00too many length or distance symbols\00invalid code lengths set\00invalid bit length repeat\00invalid code -- missing end-of-block\00invalid literal/lengths set\00invalid distances set\00incorrect data check\00incorrect length check\00invalid distance too far back\00invalid distance code\00invalid literal/length code\00\00\01\02\03\04\04\05\05\06\06\06\06\07\07\07\07\08\08\08\08\08\08\08\08\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0b\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\0f\00\00\10\11\12\12\13\13\14\14\14\14\15\15\15\15\16\16\16\16\16\16\16\16\17\17\17\17\17\17\17\17\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1c\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\1d\00\01\02\03\04\05\06\07\08\08\t\t\n\n\0b\0b\0c\0c\0c\0c\0d\0d\0d\0d\0e\0e\0e\0e\0f\0f\0f\0f\10\10\10\10\10\10\10\10\11\11\11\11\11\11\11\11\12\12\12\12\12\12\12\12\13\13\13\13\13\13\13\13\14\14\14\14\14\14\14\14\14\14\14\14\14\14\14\14\15\15\15\15\15\15\15\15\15\15\15\15\15\15\15\15\16\16\16\16\16\16\16\16\16\16\16\16\16\16\16\16\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\18\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\19\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1a\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1b\1c\10\11\12\00\08\07\t\06\n\05\0b\04\0c\03\0d\02\0e\01\0f1.2.5\00need dictionary\00stream end\00file error\00stream error\00data error\00insufficient memory\00buffer error\00incompatible version\00sizes: %d,%d\n\00decompressedSize == size\00benchmark.c\00doit\00strcmp(buffer, buffer3) == 0\00error: %d\\n\00ok.\00\11\00\n\00\11\11\11\00\00\00\00\05\00\00\00\00\00\00\t\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\0f\n\11\11\11\03\n\07\00\01\13\t\0b\0b\00\00\t\06\0b\00\00\0b\00\06\11\00\00\00\11\11\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\11\00\n\n\11\11\11\00\n\00\00\02\00\t\0b\00\00\00\t\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\04\0d\00\00\00\00\t\0e\00\00\00\00\00\0e\00\00\0e\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\00\0f\00\00\00\00\t\10\00\00\00\00\00\10\00\00\10\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\12\12\12\00\00\00\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\00\n\00\00\00\00\t\0b\00\00\00\00\00\0b\00\00\0b\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\00\0c\00\00\00\00\t\0c\00\00\00\00\00\0c\00\00\0c\00\000123456789ABCDEF-+ 0X0x\00T!\"\19\0d\01\02\03\11K\1c\0c\10\04\0b\1d\12\1e\'hnopqb \05\06\0f\13\14\15\1a\08\16\07($\17\18\t\n\0e\1b\1f%#\83\82}&*+<=>?CGJMXYZ[\\]^_`acdefgijklrstyz{|\00Illegal byte sequence\00Domain error\00Result not representable\00Not a tty\00Permission denied\00Operation not permitted\00No such file or directory\00No such process\00File exists\00Value too large for data type\00No space left on device\00Out of memory\00Resource busy\00Interrupted system call\00Resource temporarily unavailable\00Invalid seek\00Cross-device link\00Read-only file system\00Directory not empty\00Connection reset by peer\00Operation timed out\00Connection refused\00Host is down\00Host is unreachable\00Address in use\00Broken pipe\00I/O error\00No such device or address\00Block device required\00No such device\00Not a directory\00Is a directory\00Text file busy\00Exec format error\00Invalid argument\00Argument list too long\00Symbolic link loop\00Filename too long\00Too many open files in system\00No file descriptors available\00Bad file descriptor\00No child process\00Bad address\00File too large\00Too many links\00No locks available\00Resource deadlock would occur\00State not recoverable\00Previous owner died\00Operation canceled\00Function not implemented\00No message of desired type\00Identifier removed\00Device not a stream\00No data available\00Device timeout\00Out of streams resources\00Link has been severed\00Protocol error\00Bad message\00File descriptor in bad state\00Not a socket\00Destination address required\00Message too large\00Protocol wrong type for socket\00Protocol not available\00Protocol not supported\00Socket type not supported\00Not supported\00Protocol family not supported\00Address family not supported by protocol\00Address not available\00Network is down\00Network unreachable\00Connection reset by network\00Connection aborted\00No buffer space available\00Socket is connected\00Socket not connected\00Cannot send after socket shutdown\00Operation already in progress\00Operation in progress\00Stale file handle\00Remote I/O error\00Quota exceeded\00No medium found\00Wrong medium type\00No error information\00\00(null)\00-0X+0X 0X-0x+0x 0x\00inf\00INF\00nan\00NAN\00.") + (export "_i64Subtract" (func $_i64Subtract)) + (export "_free" (func $_free)) + (export "_main" (func $_main)) + (export "_i64Add" (func $_i64Add)) + (export "_pthread_self" (func $_pthread_self)) + (export "_memset" (func $_memset)) + (export "___udivdi3" (func $___udivdi3)) + (export "_malloc" (func $_malloc)) + (export "_memcpy" (func $_memcpy)) + (export "_llvm_bswap_i32" (func $_llvm_bswap_i32)) + (export "_bitshift64Lshr" (func $_bitshift64Lshr)) + (export "_fflush" (func $_fflush)) + (export "_bitshift64Shl" (func $_bitshift64Shl)) + (export "___uremdi3" (func $___uremdi3)) + (export "___errno_location" (func $___errno_location)) + (export "___udivmoddi4" (func $___udivmoddi4)) + (export "runPostSets" (func $runPostSets)) + (export "stackAlloc" (func $stackAlloc)) + (export "stackSave" (func $stackSave)) + (export "stackRestore" (func $stackRestore)) + (export "establishStackSpace" (func $establishStackSpace)) + (export "setThrew" (func $setThrew)) + (export "setTempRet0" (func $setTempRet0)) + (export "getTempRet0" (func $getTempRet0)) + (export "dynCall_ii" (func $dynCall_ii)) + (export "dynCall_iiii" (func $dynCall_iiii)) + (export "dynCall_vii" (func $dynCall_vii)) + (export "dynCall_iii" (func $dynCall_iii)) + (export "dynCall_vi" (func $dynCall_vi)) + (func $_inflate (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (local $55 i32) + (local $56 i32) + (local $57 i32) + (local $58 i32) + (local $59 i32) + (local $60 i32) + (local $61 i32) + (local $62 i32) + (local $63 i32) + (local $64 i32) + (local $65 i32) + (local $66 i32) + (local $67 i32) + (local $68 i32) + (local $69 i32) + (local $70 i32) + (local $71 i32) + (local $72 i32) + (local $73 i32) + (local $74 i32) + (local $75 i32) + (set_local $34 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (block + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -2) + ) + ) + ) + (if + (i32.eqz + (tee_local $8 + (i32.load offset=28 + (get_local $0) + ) + ) + ) + (block + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -2) + ) + ) + ) + (if + (i32.eqz + (tee_local $14 + (i32.load + (tee_local $38 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + ) + ) + (block + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -2) + ) + ) + ) + (if + (i32.eqz + (tee_local $5 + (i32.load + (get_local $0) + ) + ) + ) + (if + (i32.load offset=4 + (get_local $0) + ) + (block + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -2) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $12 + (i32.load + (get_local $8) + ) + ) + (i32.const 11) + ) + (block + (i32.store + (get_local $8) + (i32.const 12) + ) + (set_local $12 + (i32.const 12) + ) + ) + ) + (set_local $45 + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + (set_local $20 + (i32.add + (get_local $8) + (i32.const 24) + ) + ) + (set_local $39 + (i32.add + (tee_local $30 + (get_local $34) + ) + (i32.const 1) + ) + ) + (set_local $28 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $31 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (set_local $27 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (set_local $58 + (i32.add + (get_local $8) + (i32.const 36) + ) + ) + (set_local $65 + (i32.add + (get_local $8) + (i32.const 20) + ) + ) + (set_local $36 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (set_local $26 + (i32.add + (get_local $8) + (i32.const 64) + ) + ) + (set_local $66 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + (set_local $67 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -5) + ) + (i32.const 2) + ) + ) + (set_local $54 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (set_local $40 + (i32.add + (get_local $8) + (i32.const 76) + ) + ) + (set_local $35 + (i32.add + (get_local $8) + (i32.const 84) + ) + ) + (set_local $55 + (i32.add + (get_local $8) + (i32.const 80) + ) + ) + (set_local $46 + (i32.add + (get_local $8) + (i32.const 88) + ) + ) + (set_local $56 + (i32.eq + (get_local $1) + (i32.const 6) + ) + ) + (set_local $29 + (i32.add + (get_local $8) + (i32.const 7108) + ) + ) + (set_local $47 + (i32.add + (get_local $8) + (i32.const 72) + ) + ) + (set_local $68 + (i32.add + (get_local $8) + (i32.const 7112) + ) + ) + (set_local $48 + (i32.add + (get_local $8) + (i32.const 68) + ) + ) + (set_local $69 + (i32.add + (get_local $8) + (i32.const 44) + ) + ) + (set_local $70 + (i32.add + (get_local $8) + (i32.const 7104) + ) + ) + (set_local $71 + (i32.add + (get_local $8) + (i32.const 48) + ) + ) + (set_local $59 + (i32.add + (get_local $8) + (i32.const 52) + ) + ) + (set_local $60 + (i32.add + (get_local $8) + (i32.const 40) + ) + ) + (set_local $49 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $41 + (i32.add + (get_local $8) + (i32.const 28) + ) + ) + (set_local $72 + (i32.add + (get_local $30) + (i32.const 2) + ) + ) + (set_local $73 + (i32.add + (get_local $30) + (i32.const 3) + ) + ) + (set_local $33 + (i32.add + (get_local $8) + (i32.const 104) + ) + ) + (set_local $50 + (i32.add + (get_local $8) + (i32.const 96) + ) + ) + (set_local $51 + (i32.add + (get_local $8) + (i32.const 100) + ) + ) + (set_local $74 + (i32.add + (get_local $8) + (i32.const 624) + ) + ) + (set_local $52 + (i32.add + (get_local $8) + (i32.const 1328) + ) + ) + (set_local $37 + (i32.add + (get_local $8) + (i32.const 108) + ) + ) + (set_local $61 + (i32.add + (get_local $8) + (i32.const 112) + ) + ) + (set_local $57 + (i32.add + (get_local $8) + (i32.const 752) + ) + ) + (set_local $62 + (i32.add + (get_local $8) + (i32.const 92) + ) + ) + (set_local $7 + (get_local $12) + ) + (set_local $4 + (i32.load + (tee_local $42 + (i32.add + (get_local $8) + (i32.const 60) + ) + ) + ) + ) + (set_local $6 + (tee_local $63 + (i32.load + (tee_local $43 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $53 + (i32.add + (get_local $8) + (i32.const 56) + ) + ) + ) + ) + (set_local $10 + (tee_local $12 + (i32.load + (tee_local $44 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + ) + (set_local $11 + (i32.const 0) + ) + (block $__rjto$33 + (block $__rjti$33 + (block $__rjti$32 + (block $__rjti$31 + (block $__rjti$30 + (block $__rjti$28 + (block $__rjti$27 + (loop $label$continue$L17 + (block $label$break$L17 + (block $do-once96 + (block $__rjti$26 + (block $__rjti$25 + (block $__rjti$24 + (block $__rjti$23 + (block $__rjti$22 + (block $__rjti$21 + (block $__rjti$20 + (block $__rjti$19 + (block $__rjti$18 + (block $__rjti$17 + (block $__rjti$16 + (block $__rjti$15 + (block $__rjti$14 + (block $__rjti$13 + (block $__rjti$12 + (block $__rjti$11 + (block $__rjti$10 + (block $__rjti$9 + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default + (block $switch-case39 + (block $switch-case38 + (block $switch-case35 + (block $switch-case34 + (block $switch-case33 + (block $switch-case32 + (block $switch-case31 + (block $switch-case30 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (block $switch-case26 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case18 + (block $switch-case17 + (block $switch-case16 + (block $switch-case15 + (block $switch-case12 + (block $switch-case11 + (block $switch-case10 + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case2 + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case2 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-case10 $switch-case11 $switch-case12 $switch-case15 $switch-case16 $switch-case17 $switch-case18 $switch-case21 $switch-case22 $switch-case23 $switch-case26 $switch-case27 $switch-case28 $switch-case29 $switch-case30 $switch-case31 $switch-case32 $switch-case33 $switch-case34 $switch-case35 $switch-case38 $switch-case39 $switch-case $switch-case0 $switch-case1 $switch-default + (get_local $7) + ) + ) + (set_local $11 + (i32.const 1) + ) + (br $__rjti$31) + ) + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (get_local $6) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (i32.const -3) + ) + (br $label$break$L17) + ) + (br $__rjti$32) + ) + (if + (i32.eqz + (tee_local $7 + (i32.load + (get_local $45) + ) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 12) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 16) + ) + (loop $while-in + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 16) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (if + (i32.and + (i32.eq + (get_local $3) + (i32.const 35615) + ) + (i32.ne + (i32.and + (get_local $7) + (i32.const 2) + ) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $20) + (call $_crc32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (i32.store8 + (get_local $30) + (i32.const 31) + ) + (i32.store8 + (get_local $39) + (i32.const -117) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $30) + (i32.const 2) + ) + ) + (i32.store + (get_local $8) + (i32.const 1) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (i32.store + (get_local $28) + (i32.const 0) + ) + (if + (tee_local $2 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=48 + (get_local $2) + (i32.const -1) + ) + ) + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (if + (i32.eqz + (i32.rem_u + (i32.add + (i32.and + (i32.shl + (get_local $3) + (i32.const 8) + ) + (i32.const 65280) + ) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.const 31) + ) + ) + (block + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 15) + ) + (i32.const 8) + ) + (block + (i32.store + (get_local $27) + (i32.const 13865) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -4) + ) + ) + (set_local $9 + (i32.add + (i32.and + (tee_local $2 + (i32.shr_u + (get_local $3) + (i32.const 4) + ) + ) + (i32.const 15) + ) + (i32.const 8) + ) + ) + (if + (tee_local $7 + (i32.load + (get_local $58) + ) + ) + (if + (i32.gt_u + (get_local $9) + (get_local $7) + ) + (block + (i32.store + (get_local $27) + (i32.const 13892) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $3 + (get_local $2) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (i32.store + (get_local $58) + (get_local $9) + ) + ) + (i32.store + (get_local $65) + (i32.shl + (i32.const 1) + (get_local $9) + ) + ) + (i32.store + (get_local $20) + (tee_local $4 + (call $_adler32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $4) + ) + (i32.store + (get_local $8) + (i32.xor + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 12) + ) + (i32.const 2) + ) + (i32.const 11) + ) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + ) + (i32.store + (get_local $27) + (i32.const 13842) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 16) + ) + (loop $while-in4 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 16) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in4) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $28) + (get_local $3) + ) + (if + (i32.ne + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 8) + ) + (block + (i32.store + (get_local $27) + (i32.const 13865) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (if + (i32.and + (get_local $3) + (i32.const 57344) + ) + (block + (i32.store + (get_local $27) + (i32.const 13912) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (if + (tee_local $4 + (i32.load + (get_local $31) + ) + ) + (i32.store + (get_local $4) + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.and + (get_local $3) + (i32.const 512) + ) + (block + (i32.store8 + (get_local $30) + (get_local $3) + ) + (i32.store8 + (get_local $39) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $30) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 2) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$3) + ) + (br_if $__rjti$8 + (i32.ge_u + (get_local $4) + (i32.const 32) + ) + ) + (set_local $2 + (get_local $4) + ) + (br $__rjti$3) + ) + (br_if $__rjti$15 + (i32.ge_u + (get_local $4) + (i32.const 16) + ) + ) + (set_local $2 + (get_local $4) + ) + (br $__rjti$12) + ) + (br $__rjti$17) + ) + (br $__rjti$19) + ) + (br $__rjti$21) + ) + (br $__rjti$23) + ) + (br $__rjti$25) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 32) + ) + (block + (set_local $2 + (get_local $4) + ) + (loop $while-in14 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $2) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $2) + ) + (get_local $3) + ) + ) + (if + (i32.ge_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (i32.const 32) + ) + (set_local $5 + (get_local $4) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $while-in14) + ) + ) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $3 + (call $_llvm_bswap_i32 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $3) + ) + (i32.store + (get_local $8) + (i32.const 10) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$4) + ) + (br $__rjti$4) + ) + (br $__rjti$9) + ) + (br $__rjti$13) + ) + (set_local $2 + (i32.shr_u + (get_local $3) + (tee_local $3 + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.sub + (get_local $4) + (get_local $3) + ) + ) + (i32.const 32) + ) + (block + (set_local $7 + (get_local $6) + ) + (set_local $6 + (get_local $2) + ) + (loop $while-in20 + (if + (i32.eqz + (get_local $7) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $6) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $3) + ) + (get_local $6) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (i32.const 32) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $2) + ) + (br $while-in20) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $6 + (get_local $7) + ) + (set_local $3 + (get_local $5) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + ) + ) + (if + (i32.eq + (tee_local $2 + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.xor + (i32.shr_u + (get_local $3) + (i32.const 16) + ) + (i32.const 65535) + ) + ) + (block + (i32.store + (get_local $26) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.const 14) + ) + (if + (get_local $56) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$31) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$5) + ) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 13976) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + ) + (br $__rjti$5) + ) + (br $__rjti$10) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 14) + ) + (loop $while-in25 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 14) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in25) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $50) + (tee_local $7 + (i32.add + (i32.and + (get_local $3) + (i32.const 31) + ) + (i32.const 257) + ) + ) + ) + (i32.store + (get_local $51) + (tee_local $2 + (i32.add + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 5) + ) + (i32.const 31) + ) + (i32.const 1) + ) + ) + ) + (i32.store + (get_local $62) + (tee_local $13 + (i32.add + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 10) + ) + (i32.const 15) + ) + (i32.const 4) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (i32.const 14) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -14) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $7) + (i32.const 286) + ) + (i32.gt_u + (get_local $2) + (i32.const 30) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14005) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + (block + (i32.store + (get_local $33) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 17) + ) + (set_local $9 + (i32.const 0) + ) + (set_local $2 + (get_local $4) + ) + (set_local $7 + (get_local $6) + ) + (set_local $4 + (get_local $3) + ) + (set_local $6 + (get_local $5) + ) + (br $__rjti$6) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $33) + ) + ) + (tee_local $13 + (i32.load + (get_local $62) + ) + ) + ) + (block + (set_local $9 + (get_local $2) + ) + (set_local $2 + (get_local $4) + ) + (set_local $7 + (get_local $6) + ) + (set_local $4 + (get_local $3) + ) + (set_local $6 + (get_local $5) + ) + (br $__rjti$6) + ) + (block + (set_local $11 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + ) + (set_local $13 + (i32.load + (get_local $33) + ) + ) + (set_local $9 + (get_local $3) + ) + (set_local $2 + (get_local $5) + ) + (set_local $7 + (get_local $11) + ) + (br $__rjti$14) + ) + (br $__rjti$16) + ) + (br $__rjti$18) + ) + (set_local $7 + (i32.load + (get_local $47) + ) + ) + (br $__rjti$20) + ) + (br $__rjti$22) + ) + (set_local $7 + (i32.load + (get_local $47) + ) + ) + (br $__rjti$24) + ) + (br $__rjti$26) + ) + (if + (i32.eqz + (get_local $10) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $__rjti$31) + ) + ) + (i32.store8 + (get_local $14) + (i32.load + (get_local $26) + ) + ) + (i32.store + (get_local $8) + (i32.const 20) + ) + (set_local $2 + (i32.add + (get_local $10) + (i32.const -1) + ) + ) + (set_local $14 + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (br $do-once96) + ) + (if + (i32.load + (get_local $45) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.const 32) + ) + (loop $while-in37 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 32) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in37) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $49) + (i32.add + (i32.load + (get_local $49) + ) + (tee_local $7 + (i32.sub + (get_local $12) + (get_local $10) + ) + ) + ) + ) + (i32.store + (get_local $41) + (i32.add + (i32.load + (get_local $41) + ) + (get_local $7) + ) + ) + (if + (i32.eq + (get_local $12) + (get_local $10) + ) + (set_local $12 + (i32.load + (get_local $20) + ) + ) + (block + (set_local $2 + (i32.load + (get_local $20) + ) + ) + (set_local $12 + (i32.add + (get_local $14) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $12 + (if i32 + (i32.load + (get_local $28) + ) + (call $_crc32 + (get_local $2) + (get_local $12) + (get_local $7) + ) + (call $_adler32 + (get_local $2) + (get_local $12) + (get_local $7) + ) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $12) + ) + ) + ) + (set_local $7 + (i32.eqz + (i32.load + (get_local $28) + ) + ) + ) + (set_local $2 + (call $_llvm_bswap_i32 + (get_local $3) + ) + ) + (if + (i32.eq + (if i32 + (get_local $7) + (get_local $2) + (get_local $3) + ) + (get_local $12) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (set_local $12 + (get_local $10) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14179) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (set_local $12 + (get_local $10) + ) + (br $do-once96) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 27) + ) + (br $__rjti$7) + ) + (br $__rjti$7) + ) + (set_local $19 + (i32.const -2) + ) + (br $__rjti$33) + ) + (loop $while-in41 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $2) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $2) + ) + (get_local $3) + ) + ) + (if + (i32.ge_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (i32.const 32) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $__rjti$8) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $while-in41) + ) + ) + ) + (br $do-once96) + ) + (br_if $__rjti$27 + (i32.eqz + (i32.load + (get_local $66) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $2 + (call $_adler32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.const 11) + ) + (br $__rjti$9) + ) + (i32.store + (get_local $8) + (i32.const 15) + ) + (br $__rjti$10) + ) + (set_local $3 + (get_local $2) + ) + (set_local $5 + (get_local $4) + ) + (loop $while-in43 + (set_local $4 + (if i32 + (i32.lt_u + (get_local $3) + (i32.const 3) + ) + (block i32 + (if + (i32.eqz + (get_local $7) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $23 + (get_local $6) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $6) + ) + (get_local $3) + ) + (get_local $5) + ) + ) + (set_local $2 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block i32 + (set_local $2 + (get_local $6) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $33) + (tee_local $6 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + ) + (i32.store16 + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (i32.load16_u + (i32.add + (i32.shl + (get_local $9) + (i32.const 1) + ) + (i32.const 12280) + ) + ) + (i32.const 1) + ) + ) + (i32.and + (get_local $5) + (i32.const 7) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (set_local $3 + (i32.add + (get_local $4) + (i32.const -3) + ) + ) + (if + (i32.lt_u + (get_local $6) + (get_local $13) + ) + (block + (set_local $9 + (get_local $6) + ) + (set_local $6 + (get_local $2) + ) + (br $while-in43) + ) + (block + (set_local $11 + (get_local $6) + ) + (set_local $4 + (get_local $3) + ) + (set_local $6 + (get_local $7) + ) + (set_local $3 + (get_local $5) + ) + (set_local $5 + (get_local $2) + ) + (br $__rjti$11) + ) + ) + ) + (br $do-once96) + ) + (br_if $__rjti$30 + (i32.eqz + (i32.load + (get_local $45) + ) + ) + ) + (br_if $__rjti$30 + (i32.eqz + (i32.load + (get_local $28) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.const 32) + ) + (loop $while-in45 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 32) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in45) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.load + (get_local $41) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$30) + ) + ) + (i32.store + (get_local $27) + (i32.const 14200) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + (if + (tee_local $4 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=4 + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 512) + ) + (block + (i32.store8 + (get_local $30) + (get_local $3) + ) + (i32.store8 + (get_local $39) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.store8 + (get_local $72) + (i32.shr_u + (get_local $3) + (i32.const 16) + ) + ) + (i32.store8 + (get_local $73) + (i32.shr_u + (get_local $3) + (i32.const 24) + ) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $30) + (i32.const 4) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 3) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$12) + ) + (br_if $__rjti$31 + (get_local $67) + ) + (br $__rjti$13) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (get_local $26) + ) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 11) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (br_if $__rjti$31 + (i32.eqz + (tee_local $7 + (if i32 + (i32.gt_u + (if i32 + (i32.gt_u + (get_local $2) + (get_local $6) + ) + (tee_local $2 + (get_local $6) + ) + (get_local $2) + ) + (get_local $10) + ) + (get_local $10) + (get_local $2) + ) + ) + ) + ) + (drop + (call $_memcpy + (get_local $14) + (get_local $5) + (get_local $7) + ) + ) + (i32.store + (get_local $26) + (i32.sub + (i32.load + (get_local $26) + ) + (get_local $7) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $7) + ) + ) + (set_local $2 + (i32.sub + (get_local $10) + (get_local $7) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (get_local $7) + ) + ) + (set_local $14 + (i32.add + (get_local $14) + (get_local $7) + ) + ) + (br $do-once96) + ) + (if + (i32.lt_u + (get_local $11) + (i32.const 19) + ) + (block + (loop $do-in + (i32.store16 + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (i32.load16_u + (i32.add + (i32.shl + (get_local $11) + (i32.const 1) + ) + (i32.const 12280) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (br_if $do-in + (i32.ne + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (i32.const 19) + ) + ) + ) + (i32.store + (get_local $33) + (i32.const 19) + ) + ) + ) + (i32.store + (get_local $37) + (get_local $52) + ) + (i32.store + (get_local $40) + (get_local $52) + ) + (i32.store + (get_local $35) + (i32.const 7) + ) + (if + (tee_local $11 + (call $_inflate_table + (i32.const 0) + (get_local $61) + (i32.const 19) + (get_local $37) + (get_local $35) + (get_local $57) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14041) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + ) + (block + (i32.store + (get_local $33) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 18) + ) + (set_local $13 + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + (set_local $2 + (get_local $5) + ) + (set_local $7 + (i32.const 0) + ) + (br $__rjti$14) + ) + ) + (br $do-once96) + ) + (loop $while-in49 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $2) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $2) + ) + (get_local $3) + ) + ) + (if + (i32.ge_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (i32.const 16) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $__rjti$15) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $while-in49) + ) + ) + ) + (br $do-once96) + ) + (if + (i32.load + (get_local $54) + ) + (block + (i32.store + (get_local $8) + (i32.const 26) + ) + (set_local $4 + (i32.sub + (get_local $4) + (tee_local $2 + (i32.and + (get_local $4) + (i32.const 7) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (set_local $2 + (if i32 + (i32.lt_u + (get_local $4) + (i32.const 3) + ) + (block i32 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$31) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (get_local $4) + ) + ) + (i32.store + (get_local $54) + (i32.and + (get_local $3) + (i32.const 1) + ) + ) + (block $switch50 + (block $switch-default55 + (block $switch-case54 + (block $switch-case53 + (block $switch-case52 + (block $switch-case51 + (br_table $switch-case51 $switch-case52 $switch-case53 $switch-case54 $switch-default55 + (i32.and + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + (i32.const 3) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 13) + ) + (br $switch50) + ) + (i32.store + (get_local $40) + (i32.const 10104) + ) + (i32.store + (get_local $35) + (i32.const 9) + ) + (i32.store + (get_local $55) + (i32.const 12152) + ) + (i32.store + (get_local $46) + (i32.const 5) + ) + (i32.store + (get_local $8) + (i32.const 19) + ) + (br_if $__rjti$28 + (get_local $56) + ) + (br $switch50) + ) + (i32.store + (get_local $8) + (i32.const 16) + ) + (br $switch50) + ) + (i32.store + (get_local $27) + (i32.const 13957) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (br $switch50) + ) + (br $__rjto$33) + ) + (set_local $4 + (i32.add + (get_local $2) + (i32.const -3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + (if + (i32.lt_u + (get_local $13) + (i32.add + (tee_local $5 + (i32.load + (get_local $51) + ) + ) + (tee_local $11 + (i32.load + (get_local $50) + ) + ) + ) + ) + (block + (set_local $25 + (get_local $13) + ) + (set_local $32 + (get_local $5) + ) + (set_local $13 + (get_local $11) + ) + (set_local $3 + (get_local $4) + ) + (set_local $5 + (get_local $6) + ) + (set_local $4 + (get_local $9) + ) + (set_local $11 + (get_local $2) + ) + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (loop $label$continue$L181 + (if + (i32.gt_u + (tee_local $15 + (i32.load8_u offset=1 + (i32.add + (tee_local $64 + (i32.load + (get_local $40) + ) + ) + (i32.shl + (tee_local $9 + (i32.and + (tee_local $75 + (i32.add + (i32.shl + (i32.const 1) + (i32.load + (get_local $35) + ) + ) + (i32.const -1) + ) + ) + (get_local $4) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (get_local $3) + ) + (block + (set_local $6 + (get_local $5) + ) + (loop $while-in59 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $4) + ) + (set_local $23 + (get_local $11) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $7) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (if + (i32.gt_u + (tee_local $15 + (i32.load8_u offset=1 + (i32.add + (get_local $64) + (i32.shl + (tee_local $9 + (i32.and + (get_local $75) + (tee_local $4 + (i32.add + (i32.shl + (i32.load8_u + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (block + (set_local $11 + (get_local $2) + ) + (br $while-in59) + ) + (block + (set_local $5 + (get_local $4) + ) + (set_local $11 + (get_local $2) + ) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $5) + ) + (set_local $5 + (get_local $4) + ) + ) + ) + (if + (i32.lt_s + (i32.and + (tee_local $9 + (i32.load16_s offset=2 + (i32.add + (get_local $64) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + (i32.const 16) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $15) + ) + (loop $while-in61 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $23 + (get_local $11) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $7) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $11) + ) + (get_local $3) + ) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (get_local $15) + ) + (block + (set_local $11 + (get_local $4) + ) + (br $while-in61) + ) + (block + (set_local $2 + (get_local $5) + ) + (set_local $11 + (get_local $4) + ) + ) + ) + ) + (set_local $2 + (get_local $5) + ) + ) + (i32.store + (get_local $33) + (i32.add + (get_local $25) + (i32.const 1) + ) + ) + (i32.store16 + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (get_local $25) + (i32.const 1) + ) + ) + (get_local $9) + ) + (set_local $3 + (i32.sub + (get_local $3) + (get_local $15) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (get_local $2) + (get_local $15) + ) + ) + ) + (block + (set_local $3 + (block $switch62 i32 + (block $switch-default71 + (block $switch-case68 + (block $switch-case65 + (br_table $switch-case65 $switch-case68 $switch-default71 + (i32.sub + (get_local $9) + (i32.const 16) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $2 + (i32.add + (get_local $15) + (i32.const 2) + ) + ) + ) + (loop $while-in64 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $23 + (get_local $11) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $7) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $11) + ) + (get_local $3) + ) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (get_local $2) + ) + (block + (set_local $11 + (get_local $4) + ) + (br $while-in64) + ) + (set_local $11 + (get_local $4) + ) + ) + ) + ) + (set_local $2 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (set_local $4 + (i32.sub + (get_local $3) + (get_local $15) + ) + ) + (if + (i32.eqz + (get_local $25) + ) + (block + (set_local $3 + (get_local $2) + ) + (br $__rjti$0) + ) + ) + (set_local $9 + (i32.add + (i32.and + (get_local $2) + (i32.const 3) + ) + (i32.const 3) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (get_local $2) + (i32.const 2) + ) + ) + (set_local $2 + (i32.load16_u offset=110 + (i32.add + (get_local $8) + (i32.shl + (get_local $25) + (i32.const 1) + ) + ) + ) + ) + (br $switch62 + (i32.add + (get_local $4) + (i32.const -2) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $2 + (i32.add + (get_local $15) + (i32.const 3) + ) + ) + ) + (loop $while-in67 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $23 + (get_local $11) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $7) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $11) + ) + (get_local $3) + ) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (get_local $2) + ) + (block + (set_local $11 + (get_local $4) + ) + (br $while-in67) + ) + (set_local $11 + (get_local $4) + ) + ) + ) + ) + (set_local $9 + (i32.add + (i32.and + (tee_local $4 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (i32.const 7) + ) + (i32.const 3) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (set_local $2 + (i32.const 0) + ) + (br $switch62 + (i32.add + (i32.sub + (i32.const -3) + (get_local $15) + ) + (get_local $3) + ) + ) + ) + (if + (i32.lt_u + (get_local $3) + (tee_local $2 + (i32.add + (get_local $15) + (i32.const 7) + ) + ) + ) + (loop $while-in70 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $3) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $23 + (get_local $11) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $7) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (set_local $5 + (i32.add + (i32.shl + (i32.load8_u + (get_local $11) + ) + (get_local $3) + ) + (get_local $5) + ) + ) + (if + (i32.lt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (get_local $2) + ) + (block + (set_local $11 + (get_local $4) + ) + (br $while-in70) + ) + (set_local $11 + (get_local $4) + ) + ) + ) + ) + (set_local $9 + (i32.add + (i32.and + (tee_local $4 + (i32.shr_u + (get_local $5) + (get_local $15) + ) + ) + (i32.const 127) + ) + (i32.const 11) + ) + ) + (set_local $5 + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (get_local $4) + (i32.const 7) + ) + ) + (set_local $2 + (i32.const 0) + ) + (i32.add + (i32.sub + (i32.const -7) + (get_local $15) + ) + (get_local $3) + ) + ) + ) + (if + (i32.gt_u + (i32.add + (get_local $25) + (get_local $9) + ) + (i32.add + (get_local $32) + (get_local $13) + ) + ) + (block + (set_local $4 + (get_local $3) + ) + (set_local $3 + (get_local $6) + ) + (br $__rjti$1) + ) + ) + (i32.store + (get_local $33) + (i32.add + (get_local $25) + (i32.const 1) + ) + ) + (i32.store16 + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (get_local $25) + (i32.const 1) + ) + ) + (get_local $2) + ) + (if + (tee_local $4 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (loop $do-in73 + (i32.store + (get_local $33) + (i32.add + (tee_local $9 + (i32.load + (get_local $33) + ) + ) + (i32.const 1) + ) + ) + (i32.store16 + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + (get_local $2) + ) + (br_if $do-in73 + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $25 + (i32.load + (get_local $33) + ) + ) + (i32.add + (tee_local $32 + (i32.load + (get_local $51) + ) + ) + (tee_local $4 + (i32.load + (get_local $50) + ) + ) + ) + ) + (block + (set_local $9 + (get_local $4) + ) + (set_local $4 + (get_local $3) + ) + (set_local $2 + (get_local $5) + ) + (set_local $3 + (get_local $6) + ) + (set_local $5 + (get_local $11) + ) + (br $__rjti$2) + ) + (block + (set_local $13 + (get_local $4) + ) + (set_local $4 + (get_local $6) + ) + (br $label$continue$L181) + ) + ) + ) + ) + (i32.store + (get_local $27) + (i32.const 14066) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (set_local $5 + (get_local $11) + ) + (set_local $11 + (get_local $7) + ) + (br $do-once96) + ) + (i32.store + (get_local $27) + (i32.const 14066) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $6 + (get_local $5) + ) + (set_local $2 + (get_local $10) + ) + (set_local $5 + (get_local $11) + ) + (set_local $11 + (get_local $7) + ) + (br $do-once96) + ) + (if + (i32.eq + (i32.load + (get_local $8) + ) + (i32.const 29) + ) + (block + (set_local $6 + (get_local $2) + ) + (set_local $2 + (get_local $10) + ) + (set_local $11 + (get_local $7) + ) + (br $do-once96) + ) + (block + (set_local $11 + (get_local $9) + ) + (set_local $6 + (get_local $2) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $9) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + (if + (i32.eqz + (i32.load16_s + (get_local $74) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14092) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (set_local $11 + (get_local $7) + ) + (br $do-once96) + ) + ) + (i32.store + (get_local $37) + (get_local $52) + ) + (i32.store + (get_local $40) + (get_local $52) + ) + (i32.store + (get_local $35) + (i32.const 9) + ) + (if + (tee_local $11 + (call $_inflate_table + (i32.const 1) + (get_local $61) + (get_local $11) + (get_local $37) + (get_local $35) + (get_local $57) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14129) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (i32.store + (get_local $55) + (i32.load + (get_local $37) + ) + ) + (i32.store + (get_local $46) + (i32.const 6) + ) + (if + (tee_local $11 + (call $_inflate_table + (i32.const 2) + (i32.add + (i32.add + (get_local $8) + (i32.const 112) + ) + (i32.shl + (i32.load + (get_local $50) + ) + (i32.const 1) + ) + ) + (i32.load + (get_local $51) + ) + (get_local $37) + (get_local $46) + (get_local $57) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 14157) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 19) + ) + (if + (get_local $56) + (block + (set_local $11 + (i32.const 0) + ) + (br $__rjti$31) + ) + (block + (set_local $11 + (i32.const 0) + ) + (br $__rjti$16) + ) + ) + ) + ) + (br $do-once96) + ) + (if + (tee_local $4 + (i32.load + (get_local $31) + ) + ) + (block + (i32.store offset=8 + (get_local $4) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=12 + (get_local $4) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 512) + ) + (block + (i32.store8 + (get_local $30) + (get_local $3) + ) + (i32.store8 + (get_local $39) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $30) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 4) + ) + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + (br $__rjti$17) + ) + (i32.store + (get_local $8) + (i32.const 20) + ) + (br $__rjti$18) + ) + (if + (i32.and + (tee_local $7 + (i32.load + (get_local $28) + ) + ) + (i32.const 1024) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.const 16) + ) + (block + (set_local $2 + (get_local $4) + ) + (loop $while-in77 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $2) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $4 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $2) + ) + (get_local $3) + ) + ) + (if + (i32.ge_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (i32.const 16) + ) + (set_local $5 + (get_local $4) + ) + (block + (set_local $5 + (get_local $4) + ) + (br $while-in77) + ) + ) + ) + ) + ) + (i32.store + (get_local $26) + (get_local $3) + ) + (if + (tee_local $4 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=20 + (get_local $4) + (get_local $3) + ) + ) + (set_local $3 + (if i32 + (i32.and + (get_local $7) + (i32.const 512) + ) + (block i32 + (i32.store8 + (get_local $30) + (get_local $3) + ) + (i32.store8 + (get_local $39) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $30) + (i32.const 2) + ) + ) + (set_local $4 + (i32.const 0) + ) + (i32.const 0) + ) + (block i32 + (set_local $4 + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + ) + (if + (tee_local $2 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 5) + ) + (br $__rjti$19) + ) + (if + (i32.and + (i32.gt_u + (get_local $10) + (i32.const 257) + ) + (i32.gt_u + (get_local $6) + (i32.const 5) + ) + ) + (block + (i32.store + (get_local $38) + (get_local $14) + ) + (i32.store + (get_local $44) + (get_local $10) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store + (get_local $43) + (get_local $6) + ) + (i32.store + (get_local $53) + (get_local $3) + ) + (i32.store + (get_local $42) + (get_local $4) + ) + (call $_inflate_fast + (get_local $0) + (get_local $12) + ) + (set_local $14 + (i32.load + (get_local $38) + ) + ) + (set_local $2 + (i32.load + (get_local $44) + ) + ) + (set_local $5 + (i32.load + (get_local $0) + ) + ) + (set_local $6 + (i32.load + (get_local $43) + ) + ) + (set_local $3 + (i32.load + (get_local $53) + ) + ) + (set_local $4 + (i32.load + (get_local $42) + ) + ) + (br_if $do-once96 + (i32.ne + (i32.load + (get_local $8) + ) + (i32.const 11) + ) + ) + (i32.store + (get_local $29) + (i32.const -1) + ) + (br $do-once96) + ) + ) + (i32.store + (get_local $29) + (i32.const 0) + ) + (if + (i32.gt_u + (tee_local $7 + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (tee_local $25 + (i32.load + (get_local $40) + ) + ) + (i32.shl + (tee_local $13 + (i32.and + (tee_local $15 + (i32.add + (i32.shl + (i32.const 1) + (i32.load + (get_local $35) + ) + ) + (i32.const -1) + ) + ) + (get_local $3) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $4) + ) + (loop $while-in79 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $9 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.gt_u + (tee_local $7 + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $13 + (i32.and + (get_local $15) + (tee_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (block + (set_local $5 + (get_local $9) + ) + (br $while-in79) + ) + (set_local $5 + (get_local $9) + ) + ) + ) + ) + (set_local $15 + (i32.load16_s offset=2 + (i32.add + (get_local $25) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + ) + (set_local $13 + (i32.and + (tee_local $9 + (i32.load8_s + (i32.add + (get_local $25) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (set_local $2 + (if i32 + (i32.and + (i32.ne + (get_local $9) + (i32.const 0) + ) + (i32.eqz + (i32.and + (get_local $13) + (i32.const 240) + ) + ) + ) + (block i32 + (if + (i32.gt_u + (i32.add + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $13 + (i32.add + (i32.shr_u + (i32.and + (get_local $3) + (tee_local $32 + (i32.add + (i32.shl + (i32.const 1) + (i32.add + (get_local $7) + (get_local $13) + ) + ) + (i32.const -1) + ) + ) + ) + (get_local $7) + ) + (tee_local $15 + (i32.and + (get_local $15) + (i32.const 65535) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + (get_local $7) + ) + (get_local $4) + ) + (loop $while-in81 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $9 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.gt_u + (i32.add + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $13 + (i32.add + (i32.shr_u + (i32.and + (tee_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (get_local $32) + ) + (get_local $7) + ) + (get_local $15) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + (get_local $7) + ) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (block + (set_local $5 + (get_local $9) + ) + (br $while-in81) + ) + (set_local $5 + (get_local $9) + ) + ) + ) + ) + (set_local $15 + (i32.load16_s offset=2 + (i32.add + (get_local $25) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + ) + (set_local $9 + (i32.load8_s + (i32.add + (get_local $25) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $29) + (get_local $7) + ) + (set_local $32 + (get_local $7) + ) + (set_local $13 + (i32.sub + (get_local $4) + (get_local $7) + ) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (get_local $7) + ) + ) + (get_local $15) + ) + (block i32 + (set_local $32 + (i32.const 0) + ) + (set_local $13 + (get_local $4) + ) + (set_local $4 + (get_local $2) + ) + (get_local $15) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (tee_local $7 + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + ) + (set_local $4 + (i32.sub + (get_local $13) + (get_local $7) + ) + ) + (i32.store + (get_local $29) + (i32.add + (get_local $32) + (get_local $7) + ) + ) + (i32.store + (get_local $26) + (i32.and + (get_local $2) + (i32.const 65535) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $9) + (i32.const 255) + ) + ) + (block + (i32.store + (get_local $8) + (i32.const 25) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.and + (get_local $9) + (i32.const 255) + ) + ) + (i32.const 32) + ) + (block + (i32.store + (get_local $29) + (i32.const -1) + ) + (i32.store + (get_local $8) + (i32.const 11) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 64) + ) + (block + (i32.store + (get_local $27) + (i32.const 14275) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + ) + (block + (i32.store + (get_local $47) + (tee_local $2 + (i32.and + (get_local $2) + (i32.const 15) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 21) + ) + (set_local $7 + (get_local $2) + ) + (br $__rjti$20) + ) + ) + (br $do-once96) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (get_local $28) + ) + ) + (i32.const 1024) + ) + (block + (if + (tee_local $9 + (if i32 + (i32.gt_u + (tee_local $7 + (i32.load + (get_local $26) + ) + ) + (get_local $6) + ) + (get_local $6) + (get_local $7) + ) + ) + (block + (if + (tee_local $15 + (i32.load + (get_local $31) + ) + ) + (if + (tee_local $13 + (i32.load offset=16 + (get_local $15) + ) + ) + (block + (drop + (call $_memcpy + (i32.add + (get_local $13) + (tee_local $7 + (i32.sub + (i32.load offset=20 + (get_local $15) + ) + (get_local $7) + ) + ) + ) + (get_local $5) + (if i32 + (i32.gt_u + (i32.add + (get_local $7) + (get_local $9) + ) + (tee_local $2 + (i32.load offset=24 + (get_local $15) + ) + ) + ) + (i32.sub + (get_local $2) + (get_local $7) + ) + (get_local $9) + ) + ) + ) + (set_local $2 + (i32.load + (get_local $28) + ) + ) + ) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 512) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $5) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $26) + (tee_local $2 + (i32.sub + (i32.load + (get_local $26) + ) + (get_local $9) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $9) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (get_local $9) + ) + ) + ) + (set_local $2 + (get_local $7) + ) + ) + (br_if $__rjti$31 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $26) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 6) + ) + (br $__rjti$21) + ) + (if + (get_local $7) + (block + (if + (i32.lt_u + (get_local $4) + (get_local $7) + ) + (loop $while-in83 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (get_local $7) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in83) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $26) + (tee_local $2 + (i32.add + (i32.load + (get_local $26) + ) + (i32.and + (i32.add + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $29) + (i32.add + (i32.load + (get_local $29) + ) + (get_local $7) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_local $7) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (get_local $7) + ) + ) + ) + (set_local $2 + (i32.load + (get_local $26) + ) + ) + ) + (i32.store + (get_local $68) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.const 22) + ) + (br $__rjti$22) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 2048) + ) + (block + (if + (get_local $6) + (set_local $2 + (i32.const 0) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$31) + ) + ) + (loop $while-in87 + (set_local $15 + (i32.load8_s + (i32.add + (get_local $5) + (get_local $2) + ) + ) + ) + (if + (tee_local $13 + (i32.load + (get_local $31) + ) + ) + (if + (tee_local $7 + (i32.load offset=28 + (get_local $13) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.load + (get_local $26) + ) + ) + (i32.load offset=32 + (get_local $13) + ) + ) + (block + (i32.store + (get_local $26) + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (get_local $7) + (get_local $9) + ) + (get_local $15) + ) + ) + ) + ) + ) + (br_if $while-in87 + (i32.and + (tee_local $7 + (i32.ne + (get_local $15) + (i32.const 0) + ) + ) + (i32.gt_u + (get_local $6) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + (set_local $2 + (get_local $7) + ) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 512) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $5) + (get_local $9) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $9) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (get_local $9) + ) + ) + (br_if $__rjti$31 + (get_local $2) + ) + ) + (if + (tee_local $2 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=28 + (get_local $2) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $26) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 7) + ) + (br $__rjti$23) + ) + (if + (i32.gt_u + (tee_local $13 + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (tee_local $25 + (i32.load + (get_local $55) + ) + ) + (i32.shl + (tee_local $9 + (i32.and + (tee_local $15 + (i32.add + (i32.shl + (i32.const 1) + (i32.load + (get_local $46) + ) + ) + (i32.const -1) + ) + ) + (get_local $3) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $4) + ) + (loop $while-in89 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.gt_u + (tee_local $13 + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $9 + (i32.and + (get_local $15) + (tee_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in89) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (set_local $15 + (i32.load16_s offset=2 + (i32.add + (get_local $25) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (set_local $2 + (if i32 + (i32.and + (tee_local $9 + (i32.and + (tee_local $7 + (i32.load8_s + (i32.add + (get_local $25) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const 240) + ) + (block i32 + (set_local $25 + (i32.load + (get_local $29) + ) + ) + (set_local $32 + (get_local $4) + ) + (set_local $4 + (get_local $2) + ) + (get_local $15) + ) + (block i32 + (if + (i32.gt_u + (i32.add + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $9 + (i32.add + (i32.shr_u + (i32.and + (get_local $3) + (tee_local $32 + (i32.add + (i32.shl + (i32.const 1) + (i32.add + (get_local $13) + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + ) + (get_local $13) + ) + (tee_local $15 + (i32.and + (get_local $15) + (i32.const 65535) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + (get_local $13) + ) + (get_local $4) + ) + (loop $while-in91 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $7 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (if + (i32.gt_u + (i32.add + (i32.and + (tee_local $2 + (i32.load8_s offset=1 + (i32.add + (get_local $25) + (i32.shl + (tee_local $9 + (i32.add + (i32.shr_u + (i32.and + (tee_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (get_local $32) + ) + (get_local $13) + ) + (get_local $15) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 255) + ) + (get_local $13) + ) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (br $while-in91) + ) + (set_local $5 + (get_local $7) + ) + ) + ) + ) + (set_local $15 + (i32.load16_s offset=2 + (i32.add + (get_local $25) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (set_local $9 + (i32.load8_s + (i32.add + (get_local $25) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $29) + (tee_local $7 + (i32.add + (i32.load + (get_local $29) + ) + (get_local $13) + ) + ) + ) + (set_local $25 + (get_local $7) + ) + (set_local $32 + (i32.sub + (get_local $4) + (get_local $13) + ) + ) + (set_local $7 + (get_local $9) + ) + (set_local $4 + (get_local $2) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (get_local $13) + ) + ) + (get_local $15) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (tee_local $9 + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + ) + ) + (set_local $4 + (i32.sub + (get_local $32) + (get_local $9) + ) + ) + (i32.store + (get_local $29) + (i32.add + (get_local $25) + (get_local $9) + ) + ) + (if + (i32.and + (tee_local $7 + (i32.and + (get_local $7) + (i32.const 255) + ) + ) + (i32.const 64) + ) + (block + (i32.store + (get_local $27) + (i32.const 14253) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + ) + (block + (i32.store + (get_local $48) + (i32.and + (get_local $2) + (i32.const 65535) + ) + ) + (i32.store + (get_local $47) + (tee_local $2 + (i32.and + (get_local $7) + (i32.const 15) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 23) + ) + (set_local $7 + (get_local $2) + ) + (br $__rjti$24) + ) + ) + (br $do-once96) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 4096) + ) + (block + (if + (get_local $6) + (set_local $2 + (i32.const 0) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $__rjti$31) + ) + ) + (loop $while-in93 + (set_local $15 + (i32.load8_s + (i32.add + (get_local $5) + (get_local $2) + ) + ) + ) + (if + (tee_local $13 + (i32.load + (get_local $31) + ) + ) + (if + (tee_local $7 + (i32.load offset=36 + (get_local $13) + ) + ) + (if + (i32.lt_u + (tee_local $9 + (i32.load + (get_local $26) + ) + ) + (i32.load offset=40 + (get_local $13) + ) + ) + (block + (i32.store + (get_local $26) + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (get_local $7) + (get_local $9) + ) + (get_local $15) + ) + ) + ) + ) + ) + (br_if $while-in93 + (i32.and + (tee_local $7 + (i32.ne + (get_local $15) + (i32.const 0) + ) + ) + (i32.gt_u + (get_local $6) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $9 + (get_local $2) + ) + (set_local $2 + (get_local $7) + ) + ) + (if + (i32.and + (i32.load + (get_local $28) + ) + (i32.const 512) + ) + (i32.store + (get_local $20) + (call $_crc32 + (i32.load + (get_local $20) + ) + (get_local $5) + (get_local $9) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $9) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (get_local $9) + ) + ) + (br_if $__rjti$31 + (get_local $2) + ) + ) + (if + (tee_local $2 + (i32.load + (get_local $31) + ) + ) + (i32.store offset=36 + (get_local $2) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 8) + ) + (br $__rjti$25) + ) + (if + (get_local $7) + (block + (if + (i32.lt_u + (get_local $4) + (get_local $7) + ) + (loop $while-in95 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (get_local $7) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in95) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $48) + (i32.add + (i32.load + (get_local $48) + ) + (i32.and + (i32.add + (i32.shl + (i32.const 1) + (get_local $7) + ) + (i32.const -1) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $29) + (i32.add + (i32.load + (get_local $29) + ) + (get_local $7) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_local $7) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (get_local $7) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 24) + ) + (br $__rjti$26) + ) + (if + (i32.and + (tee_local $7 + (i32.load + (get_local $28) + ) + ) + (i32.const 512) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.const 16) + ) + (loop $while-in99 + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (i32.const 0) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $label$break$L17) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (set_local $2 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (get_local $5) + ) + (get_local $4) + ) + (get_local $3) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (i32.const 16) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-in99) + ) + (set_local $5 + (get_local $2) + ) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (i32.and + (i32.load + (get_local $20) + ) + (i32.const 65535) + ) + ) + (block + (set_local $4 + (i32.const 0) + ) + (set_local $3 + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $27) + (i32.const 13937) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + ) + ) + (if + (tee_local $2 + (i32.load + (get_local $31) + ) + ) + (block + (i32.store offset=44 + (get_local $2) + (i32.and + (i32.shr_u + (get_local $7) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.store offset=48 + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $2 + (call $_crc32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.const 11) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + (if + (i32.eqz + (get_local $10) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $__rjti$31) + ) + ) + (if + (i32.gt_u + (tee_local $9 + (i32.load + (get_local $48) + ) + ) + (tee_local $2 + (i32.sub + (get_local $12) + (get_local $10) + ) + ) + ) + (block + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $9) + (get_local $2) + ) + ) + (i32.load + (get_local $69) + ) + ) + (if + (i32.load + (get_local $70) + ) + (block + (i32.store + (get_local $27) + (i32.const 14223) + ) + (i32.store + (get_local $8) + (i32.const 29) + ) + (set_local $2 + (get_local $10) + ) + (br $do-once96) + ) + ) + ) + (set_local $2 + (if i32 + (i32.gt_u + (get_local $2) + (tee_local $7 + (i32.load + (get_local $71) + ) + ) + ) + (block i32 + (set_local $9 + (tee_local $2 + (i32.sub + (get_local $2) + (get_local $7) + ) + ) + ) + (i32.add + (i32.load + (get_local $59) + ) + (i32.sub + (i32.load + (get_local $60) + ) + (get_local $2) + ) + ) + ) + (block i32 + (set_local $9 + (get_local $2) + ) + (i32.add + (i32.load + (get_local $59) + ) + (i32.sub + (get_local $7) + (get_local $2) + ) + ) + ) + ) + ) + (set_local $13 + (tee_local $7 + (i32.load + (get_local $26) + ) + ) + ) + (if + (i32.le_u + (get_local $9) + (get_local $7) + ) + (set_local $7 + (get_local $9) + ) + ) + ) + (block + (set_local $13 + (tee_local $7 + (i32.load + (get_local $26) + ) + ) + ) + (set_local $2 + (i32.add + (get_local $14) + (i32.sub + (i32.const 0) + (get_local $9) + ) + ) + ) + ) + ) + (i32.store + (get_local $26) + (i32.sub + (get_local $13) + (if i32 + (i32.gt_u + (get_local $7) + (get_local $10) + ) + (tee_local $7 + (get_local $10) + ) + (get_local $7) + ) + ) + ) + (set_local $9 + (get_local $7) + ) + (set_local $13 + (get_local $2) + ) + (set_local $2 + (get_local $14) + ) + (loop $while-in101 + (set_local $14 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $2) + (i32.load8_s + (get_local $13) + ) + ) + (if + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (block + (set_local $13 + (i32.add + (get_local $13) + (i32.const 1) + ) + ) + (set_local $2 + (get_local $14) + ) + (br $while-in101) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $10) + (get_local $7) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $26) + ) + ) + (i32.store + (get_local $8) + (i32.const 20) + ) + ) + ) + (set_local $7 + (i32.load + (get_local $8) + ) + ) + (set_local $10 + (get_local $2) + ) + (br $label$continue$L17) + ) + ) + (br $__rjto$33) + ) + (i32.store + (get_local $38) + (get_local $14) + ) + (i32.store + (get_local $44) + (get_local $10) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store + (get_local $43) + (get_local $6) + ) + (i32.store + (get_local $53) + (get_local $3) + ) + (i32.store + (get_local $42) + (get_local $4) + ) + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const 2) + ) + (br $__rjto$33) + ) + (set_local $16 + (get_local $10) + ) + (set_local $21 + (i32.add + (get_local $2) + (i32.const -3) + ) + ) + (set_local $18 + (get_local $6) + ) + (set_local $22 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $__rjto$33) + ) + (i32.store + (get_local $8) + (i32.const 28) + ) + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (get_local $6) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (i32.const 1) + ) + (br $__rjto$33) + ) + (set_local $16 + (get_local $10) + ) + (set_local $21 + (get_local $4) + ) + (set_local $18 + (get_local $6) + ) + (set_local $22 + (get_local $3) + ) + (set_local $23 + (get_local $5) + ) + (set_local $17 + (get_local $12) + ) + (set_local $24 + (get_local $14) + ) + (set_local $19 + (get_local $11) + ) + (br $__rjto$33) + ) + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -4) + ) + (br $__rjto$33) + ) + (set_global $STACKTOP + (get_local $34) + ) + (return + (get_local $19) + ) + ) + (i32.store + (get_local $38) + (get_local $24) + ) + (i32.store + (get_local $44) + (get_local $16) + ) + (i32.store + (get_local $0) + (get_local $23) + ) + (i32.store + (get_local $43) + (get_local $18) + ) + (i32.store + (get_local $53) + (get_local $22) + ) + (i32.store + (get_local $42) + (get_local $21) + ) + (block $do-once102 + (block $__rjti$34 + (br_if $__rjti$34 + (i32.load + (get_local $60) + ) + ) + (br_if $__rjti$34 + (i32.eqz + (i32.or + (i32.gt_u + (i32.load + (get_local $8) + ) + (i32.const 25) + ) + (i32.eq + (get_local $17) + (get_local $16) + ) + ) + ) + ) + (br $do-once102) + ) + (if + (i32.eqz + (call $_updatewindow + (get_local $0) + (get_local $17) + ) + ) + (block + (set_local $18 + (i32.load + (get_local $43) + ) + ) + (set_local $16 + (i32.load + (get_local $44) + ) + ) + (br $do-once102) + ) + ) + (i32.store + (get_local $8) + (i32.const 30) + ) + (set_global $STACKTOP + (get_local $34) + ) + (return + (i32.const -4) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (i32.add + (i32.sub + (get_local $63) + (get_local $18) + ) + (i32.load + (get_local $12) + ) + ) + ) + (i32.store + (get_local $49) + (i32.add + (i32.load + (get_local $49) + ) + (tee_local $10 + (i32.sub + (get_local $17) + (get_local $16) + ) + ) + ) + ) + (i32.store + (get_local $41) + (i32.add + (i32.load + (get_local $41) + ) + (get_local $10) + ) + ) + (if + (i32.and + (i32.ne + (get_local $17) + (get_local $16) + ) + (i32.ne + (i32.load + (get_local $45) + ) + (i32.const 0) + ) + ) + (block + (set_local $14 + (i32.load + (get_local $20) + ) + ) + (set_local $12 + (i32.add + (i32.load + (get_local $38) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (i32.store + (get_local $20) + (tee_local $12 + (if i32 + (i32.load + (get_local $28) + ) + (call $_crc32 + (get_local $14) + (get_local $12) + (get_local $10) + ) + (call $_adler32 + (get_local $14) + (get_local $12) + (get_local $10) + ) + ) + ) + ) + (i32.store + (get_local $36) + (get_local $12) + ) + ) + ) + (set_local $12 + (i32.load + (get_local $8) + ) + ) + (i32.store offset=44 + (get_local $0) + (i32.add + (i32.add + (i32.add + (if i32 + (i32.load + (get_local $54) + ) + (i32.const 64) + (i32.const 0) + ) + (i32.load + (get_local $42) + ) + ) + (if i32 + (i32.eq + (get_local $12) + (i32.const 11) + ) + (i32.const 128) + (i32.const 0) + ) + ) + (if i32 + (i32.or + (i32.eq + (get_local $12) + (i32.const 19) + ) + (i32.eq + (get_local $12) + (i32.const 14) + ) + ) + (i32.const 256) + (i32.const 0) + ) + ) + ) + (set_global $STACKTOP + (get_local $34) + ) + (if i32 + (i32.and + (i32.eqz + (get_local $19) + ) + (i32.or + (i32.eq + (get_local $1) + (i32.const 4) + ) + (i32.and + (i32.eq + (get_local $63) + (get_local $18) + ) + (i32.eq + (get_local $17) + (get_local $16) + ) + ) + ) + ) + (i32.const -5) + (get_local $19) + ) + ) + (func $_malloc (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (set_local $13 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $18 + (get_local $13) + ) + (block $do-once + (if + (i32.lt_u + (get_local $0) + (i32.const 245) + ) + (block + (if + (i32.and + (tee_local $12 + (i32.shr_u + (tee_local $6 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $14 + (i32.shr_u + (tee_local $5 + (if i32 + (i32.lt_u + (get_local $0) + (i32.const 11) + ) + (i32.const 16) + (i32.and + (i32.add + (get_local $0) + (i32.const 11) + ) + (i32.const -8) + ) + ) + ) + (i32.const 3) + ) + ) + ) + ) + (i32.const 3) + ) + (block + (set_local $7 + (i32.load + (tee_local $1 + (i32.add + (tee_local $5 + (i32.load + (tee_local $2 + (i32.add + (tee_local $3 + (i32.add + (i32.shl + (tee_local $4 + (i32.add + (i32.xor + (i32.and + (get_local $12) + (i32.const 1) + ) + (i32.const 1) + ) + (get_local $14) + ) + ) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $7) + ) + (i32.store + (i32.const 17796) + (i32.and + (get_local $6) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $7) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store + (get_local $2) + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $5) + (i32.or + (tee_local $0 + (i32.shl + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $5) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (get_local $1) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (tee_local $0 + (i32.load + (i32.const 17804) + ) + ) + ) + (block + (if + (get_local $12) + (block + (set_local $9 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (tee_local $2 + (i32.and + (i32.shl + (get_local $12) + (get_local $14) + ) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $14) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $8 + (i32.load + (tee_local $7 + (i32.add + (tee_local $10 + (i32.load + (tee_local $2 + (i32.add + (tee_local $9 + (i32.add + (i32.shl + (tee_local $12 + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $2) + (get_local $9) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $9) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $7 + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $7) + (get_local $2) + ) + ) + ) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eq + (get_local $9) + (get_local $8) + ) + (block + (i32.store + (i32.const 17796) + (i32.and + (get_local $6) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $12) + ) + (i32.const -1) + ) + ) + ) + (set_local $4 + (get_local $0) + ) + ) + (block + (if + (i32.lt_u + (get_local $8) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 12) + ) + ) + ) + (get_local $10) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store + (get_local $2) + (get_local $8) + ) + (set_local $4 + (i32.load + (i32.const 17804) + ) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (i32.store offset=4 + (tee_local $9 + (i32.add + (get_local $10) + (get_local $5) + ) + ) + (i32.or + (tee_local $5 + (i32.sub + (i32.shl + (get_local $12) + (i32.const 3) + ) + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $9) + (get_local $5) + ) + (get_local $5) + ) + (if + (get_local $4) + (block + (set_local $12 + (i32.load + (i32.const 17816) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $4) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (set_local $3 + (get_local $2) + ) + (set_local $1 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $2) + (get_local $0) + ) + ) + (set_local $3 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (i32.store + (get_local $3) + (get_local $12) + ) + (i32.store offset=12 + (get_local $1) + (get_local $12) + ) + (i32.store offset=8 + (get_local $12) + (get_local $1) + ) + (i32.store offset=12 + (get_local $12) + (get_local $4) + ) + ) + ) + (i32.store + (i32.const 17804) + (get_local $5) + ) + (i32.store + (i32.const 17816) + (get_local $9) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (get_local $7) + ) + ) + ) + (if + (tee_local $0 + (i32.load + (i32.const 17800) + ) + ) + (block + (set_local $3 + (i32.and + (i32.shr_u + (tee_local $0 + (i32.add + (i32.and + (get_local $0) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $4 + (i32.sub + (i32.and + (i32.load offset=4 + (tee_local $1 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $0) + (get_local $3) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $3) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (tee_local $1 + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $1) + (get_local $0) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $while-in + (block $while-out + (if + (i32.eqz + (tee_local $0 + (i32.load offset=16 + (get_local $3) + ) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (block + (set_local $7 + (get_local $4) + ) + (set_local $9 + (get_local $1) + ) + (br $while-out) + ) + ) + ) + (if + (tee_local $7 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (get_local $4) + ) + ) + (set_local $4 + (get_local $3) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (get_local $7) + (set_local $1 + (get_local $0) + ) + ) + (br $while-in) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $12 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $9) + (tee_local $10 + (i32.add + (get_local $9) + (get_local $5) + ) + ) + ) + (call $_abort) + ) + (set_local $6 + (i32.load offset=24 + (get_local $9) + ) + ) + (block $do-once4 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $9) + ) + ) + (get_local $9) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $8 + (i32.const 0) + ) + (br $do-once4) + ) + ) + ) + (loop $while-in7 + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in7) + ) + ) + (if + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $3) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in7) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $12) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $8 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $9) + ) + ) + (get_local $12) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $9) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $9) + ) + (block + (i32.store + (get_local $3) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $4) + ) + (set_local $8 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once8 + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $9) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $9) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (i32.store + (i32.const 17800) + (i32.and + (i32.load + (i32.const 17800) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once8) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $9) + ) + (i32.store + (get_local $0) + (get_local $8) + ) + (i32.store offset=20 + (get_local $6) + (get_local $8) + ) + ) + (br_if $do-once8 + (i32.eqz + (get_local $8) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $8) + (tee_local $0 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $8) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $9) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $8) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $8) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $9) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $9) + (i32.or + (tee_local $0 + (i32.add + (get_local $7) + (get_local $5) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $9) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $9) + (i32.or + (get_local $5) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.or + (get_local $7) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $10) + (get_local $7) + ) + (get_local $7) + ) + (if + (tee_local $0 + (i32.load + (i32.const 17804) + ) + ) + (block + (set_local $4 + (i32.load + (i32.const 17816) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $1) + ) + (set_local $2 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $4) + ) + (i32.store offset=8 + (get_local $4) + (get_local $2) + ) + (i32.store offset=12 + (get_local $4) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17804) + (get_local $7) + ) + (i32.store + (i32.const 17816) + (get_local $10) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $9) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + (set_local $0 + (get_local $5) + ) + ) + ) + (if + (i32.gt_u + (get_local $0) + (i32.const -65) + ) + (set_local $0 + (i32.const -1) + ) + (block + (set_local $4 + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 11) + ) + ) + (i32.const -8) + ) + ) + (if + (tee_local $15 + (i32.load + (i32.const 17800) + ) + ) + (block + (set_local $16 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $4) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $4) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (set_local $1 + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + (block $__rjto$3 + (block $__rjti$3 + (block $__rjti$2 + (if + (tee_local $3 + (i32.load + (i32.add + (i32.shl + (get_local $16) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (set_local $17 + (i32.shl + (get_local $4) + (if i32 + (i32.eq + (get_local $16) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $16) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (loop $while-in14 + (if + (i32.lt_u + (tee_local $5 + (i32.sub + (tee_local $8 + (i32.and + (i32.load offset=4 + (get_local $3) + ) + (i32.const -8) + ) + ) + (get_local $4) + ) + ) + (get_local $1) + ) + (if + (i32.eq + (get_local $8) + (get_local $4) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $2 + (get_local $3) + ) + (set_local $0 + (get_local $3) + ) + (br $__rjti$3) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $3) + ) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.eqz + (tee_local $5 + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (i32.eq + (get_local $5) + (tee_local $3 + (i32.load + (i32.add + (i32.add + (get_local $3) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $17) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $2 + (get_local $5) + ) + ) + (br_if $__rjti$2 + (tee_local $5 + (i32.eqz + (get_local $3) + ) + ) + ) + (set_local $17 + (i32.shl + (get_local $17) + (i32.xor + (get_local $5) + (i32.const 1) + ) + ) + ) + (br $while-in14) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + ) + ) + ) + (if + (i32.and + (i32.eqz + (get_local $2) + ) + (i32.eqz + (get_local $0) + ) + ) + (block + (if + (i32.eqz + (tee_local $2 + (i32.and + (get_local $15) + (i32.or + (tee_local $2 + (i32.shl + (i32.const 2) + (get_local $16) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $4) + ) + (br $do-once) + ) + ) + (set_local $5 + (i32.and + (i32.shr_u + (tee_local $2 + (i32.add + (i32.and + (get_local $2) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (i32.const -1) + ) + ) + (i32.const 12) + ) + (i32.const 16) + ) + ) + (set_local $2 + (i32.load + (i32.add + (i32.shl + (i32.add + (i32.or + (i32.or + (i32.or + (i32.or + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $2) + (get_local $5) + ) + ) + (i32.const 5) + ) + (i32.const 8) + ) + ) + (get_local $5) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 4) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (tee_local $2 + (i32.and + (i32.shr_u + (tee_local $3 + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.shr_u + (get_local $3) + (get_local $2) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + ) + (br_if $__rjti$3 + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $__rjto$3) + ) + (loop $while-in16 + (if + (tee_local $5 + (i32.lt_u + (tee_local $3 + (i32.sub + (i32.and + (i32.load offset=4 + (get_local $2) + ) + (i32.const -8) + ) + (get_local $4) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $3) + ) + ) + (if + (get_local $5) + (set_local $0 + (get_local $2) + ) + ) + (if + (tee_local $3 + (i32.load offset=16 + (get_local $2) + ) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $while-in16) + ) + ) + (br_if $while-in16 + (tee_local $2 + (i32.load offset=20 + (get_local $2) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (if + (get_local $3) + (if + (i32.lt_u + (get_local $2) + (i32.sub + (i32.load + (i32.const 17804) + ) + (get_local $4) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (tee_local $9 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (if + (i32.ge_u + (get_local $3) + (tee_local $8 + (i32.add + (get_local $3) + (get_local $4) + ) + ) + ) + (call $_abort) + ) + (set_local $10 + (i32.load offset=24 + (get_local $3) + ) + ) + (block $do-once17 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $3) + ) + ) + (get_local $3) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once17) + ) + ) + ) + (loop $while-in20 + (if + (tee_local $5 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in20) + ) + ) + (if + (tee_local $5 + (i32.load + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (set_local $0 + (get_local $7) + ) + (br $while-in20) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $9) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $6 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $7 + (i32.load offset=8 + (get_local $3) + ) + ) + (get_local $9) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $5 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (get_local $3) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (block + (i32.store + (get_local $5) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $7) + ) + (set_local $6 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (block $do-once21 + (if + (get_local $10) + (block + (if + (i32.eq + (get_local $3) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $3) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 17800) + (i32.and + (i32.load + (i32.const 17800) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $do-once21) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $10) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $10) + (i32.const 16) + ) + ) + ) + (get_local $3) + ) + (i32.store + (get_local $0) + (get_local $6) + ) + (i32.store offset=20 + (get_local $10) + (get_local $6) + ) + ) + (br_if $do-once21 + (i32.eqz + (get_local $6) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $0 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $10) + ) + (if + (tee_local $1 + (i32.load offset=16 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $0) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=20 + (get_local $3) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $6) + ) + ) + ) + ) + ) + ) + ) + (block $do-once25 + (if + (i32.lt_u + (get_local $2) + (i32.const 16) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (tee_local $0 + (i32.add + (get_local $2) + (get_local $4) + ) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (get_local $0) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + (block + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $4) + (i32.const 3) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $8) + (get_local $2) + ) + (get_local $2) + ) + (set_local $0 + (i32.shr_u + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (set_local $14 + (get_local $1) + ) + (set_local $12 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $14 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $12 + (get_local $2) + ) + ) + ) + (i32.store + (get_local $14) + (get_local $8) + ) + (i32.store offset=12 + (get_local $12) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $12) + ) + (i32.store offset=12 + (get_local $8) + (get_local $2) + ) + (br $do-once25) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $2) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $2) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + (i32.store offset=28 + (get_local $8) + (get_local $5) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 17800) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17800) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $4) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (set_local $5 + (i32.shl + (get_local $2) + (if i32 + (i32.eq + (get_local $5) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in28 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $2) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in28) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $8) + ) + (i32.store offset=24 + (get_local $8) + (get_local $0) + ) + (i32.store offset=12 + (get_local $8) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $8) + ) + (br $do-once25) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 17812) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $8) + ) + (i32.store + (get_local $2) + (get_local $8) + ) + (i32.store offset=8 + (get_local $8) + (get_local $4) + ) + (i32.store offset=12 + (get_local $8) + (get_local $0) + ) + (i32.store offset=24 + (get_local $8) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + (set_local $0 + (get_local $4) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.load + (i32.const 17804) + ) + ) + (get_local $0) + ) + (block + (set_local $3 + (i32.load + (i32.const 17816) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (i32.const 15) + ) + (block + (i32.store + (i32.const 17816) + (tee_local $1 + (i32.add + (get_local $3) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17804) + (get_local $2) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $2) + ) + (get_local $2) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + ) + (block + (i32.store + (i32.const 17804) + (i32.const 0) + ) + (i32.store + (i32.const 17816) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 3) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 4) + ) + ) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 17808) + ) + ) + (get_local $0) + ) + (block + (i32.store + (i32.const 17808) + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17820) + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 17820) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 18268) + ) + ) + (block + (i32.store + (i32.const 18276) + (i32.const 4096) + ) + (i32.store + (i32.const 18272) + (i32.const 4096) + ) + (i32.store + (i32.const 18280) + (i32.const -1) + ) + (i32.store + (i32.const 18284) + (i32.const -1) + ) + (i32.store + (i32.const 18288) + (i32.const 0) + ) + (i32.store + (i32.const 18240) + (i32.const 0) + ) + (i32.store + (get_local $18) + (tee_local $1 + (i32.xor + (i32.and + (get_local $18) + (i32.const -16) + ) + (i32.const 1431655768) + ) + ) + ) + (i32.store + (i32.const 18268) + (get_local $1) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.and + (tee_local $8 + (i32.add + (tee_local $1 + (i32.load + (i32.const 18276) + ) + ) + (tee_local $14 + (i32.add + (get_local $0) + (i32.const 47) + ) + ) + ) + ) + (tee_local $6 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + ) + ) + (get_local $0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (i32.const 18236) + ) + ) + (if + (i32.or + (i32.le_u + (tee_local $1 + (i32.add + (tee_local $2 + (i32.load + (i32.const 18228) + ) + ) + (get_local $5) + ) + ) + (get_local $2) + ) + (i32.gt_u + (get_local $1) + (get_local $3) + ) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (block $__rjto$13 + (block $__rjti$13 + (if + (i32.eqz + (i32.and + (i32.load + (i32.const 18240) + ) + (i32.const 4) + ) + ) + (block + (block $label$break$L276 + (block $__rjti$5 + (block $__rjti$4 + (br_if $__rjti$4 + (i32.eqz + (tee_local $2 + (i32.load + (i32.const 17820) + ) + ) + ) + ) + (set_local $4 + (i32.const 18244) + ) + (loop $while-in32 + (block $while-out31 + (if + (i32.le_u + (tee_local $1 + (i32.load + (get_local $4) + ) + ) + (get_local $2) + ) + (br_if $while-out31 + (i32.gt_u + (i32.add + (get_local $1) + (i32.load + (tee_local $3 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + ) + ) + (get_local $2) + ) + ) + ) + (br_if $while-in32 + (tee_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + ) + (br $__rjti$4) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.and + (i32.sub + (get_local $8) + (i32.load + (i32.const 17808) + ) + ) + (get_local $6) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (tee_local $1 + (call $_sbrk + (get_local $2) + ) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.load + (get_local $3) + ) + ) + ) + (br_if $__rjti$13 + (i32.ne + (get_local $1) + (i32.const -1) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $2) + ) + (br $__rjti$5) + ) + ) + ) + (br $label$break$L276) + ) + (if + (i32.ne + (tee_local $1 + (call $_sbrk + (i32.const 0) + ) + ) + (i32.const -1) + ) + (block + (set_local $2 + (if i32 + (i32.and + (tee_local $3 + (i32.add + (tee_local $4 + (i32.load + (i32.const 18272) + ) + ) + (i32.const -1) + ) + ) + (tee_local $2 + (get_local $1) + ) + ) + (i32.add + (i32.sub + (get_local $5) + (get_local $2) + ) + (i32.and + (i32.add + (get_local $3) + (get_local $2) + ) + (i32.sub + (i32.const 0) + (get_local $4) + ) + ) + ) + (get_local $5) + ) + ) + (set_local $6 + (i32.add + (tee_local $4 + (i32.load + (i32.const 18228) + ) + ) + (get_local $2) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $2) + (get_local $0) + ) + (i32.lt_u + (get_local $2) + (i32.const 2147483647) + ) + ) + (block + (if + (tee_local $3 + (i32.load + (i32.const 18236) + ) + ) + (br_if $label$break$L276 + (i32.or + (i32.le_u + (get_local $6) + (get_local $4) + ) + (i32.gt_u + (get_local $6) + (get_local $3) + ) + ) + ) + ) + (br_if $__rjti$13 + (i32.eq + (tee_local $3 + (call $_sbrk + (get_local $2) + ) + ) + (get_local $1) + ) + ) + (set_local $1 + (get_local $2) + ) + (br $__rjti$5) + ) + ) + ) + ) + (br $label$break$L276) + ) + (set_local $4 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (if + (i32.and + (i32.gt_u + (get_local $12) + (get_local $1) + ) + (i32.and + (i32.lt_u + (get_local $1) + (i32.const 2147483647) + ) + (i32.ne + (get_local $3) + (i32.const -1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (i32.sub + (get_local $14) + (get_local $1) + ) + (tee_local $2 + (i32.load + (i32.const 18276) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + (i32.const 2147483647) + ) + (if + (i32.eq + (call $_sbrk + (get_local $2) + ) + (i32.const -1) + ) + (block + (drop + (call $_sbrk + (get_local $4) + ) + ) + (br $label$break$L276) + ) + (set_local $2 + (i32.add + (get_local $2) + (get_local $1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + ) + (set_local $2 + (get_local $1) + ) + ) + (if + (i32.ne + (get_local $3) + (i32.const -1) + ) + (block + (set_local $1 + (get_local $3) + ) + (br $__rjti$13) + ) + ) + ) + (i32.store + (i32.const 18240) + (i32.or + (i32.load + (i32.const 18240) + ) + (i32.const 4) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 2147483647) + ) + (if + (i32.and + (i32.lt_u + (tee_local $1 + (call $_sbrk + (get_local $5) + ) + ) + (tee_local $2 + (call $_sbrk + (i32.const 0) + ) + ) + ) + (i32.and + (i32.ne + (get_local $1) + (i32.const -1) + ) + (i32.ne + (get_local $2) + (i32.const -1) + ) + ) + ) + (br_if $__rjti$13 + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + ) + ) + (br $__rjto$13) + ) + (i32.store + (i32.const 18228) + (tee_local $3 + (i32.add + (i32.load + (i32.const 18228) + ) + (get_local $2) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (i32.load + (i32.const 18232) + ) + ) + (i32.store + (i32.const 18232) + (get_local $3) + ) + ) + (block $do-once38 + (if + (tee_local $6 + (i32.load + (i32.const 17820) + ) + ) + (block + (set_local $3 + (i32.const 18244) + ) + (block $__rjto$10 + (block $__rjti$10 + (loop $do-in41 + (br_if $__rjti$10 + (i32.eq + (get_local $1) + (i32.add + (tee_local $12 + (i32.load + (get_local $3) + ) + ) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + ) + ) + ) + ) + ) + (br_if $do-in41 + (tee_local $3 + (i32.load offset=8 + (get_local $3) + ) + ) + ) + ) + (br $__rjto$10) + ) + (if + (i32.eqz + (i32.and + (i32.load offset=12 + (get_local $3) + ) + (i32.const 8) + ) + ) + (if + (i32.and + (i32.lt_u + (get_local $6) + (get_local $1) + ) + (i32.ge_u + (get_local $6) + (get_local $12) + ) + ) + (block + (i32.store + (get_local $5) + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (set_local $3 + (i32.add + (get_local $6) + (tee_local $1 + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + (set_local $1 + (i32.add + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.load + (i32.const 17808) + ) + ) + ) + (i32.store + (i32.const 17820) + (get_local $3) + ) + (i32.store + (i32.const 17808) + (get_local $1) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17824) + (i32.load + (i32.const 18284) + ) + ) + (br $do-once38) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (tee_local $4 + (i32.load + (i32.const 17812) + ) + ) + ) + (block + (i32.store + (i32.const 17812) + (get_local $1) + ) + (set_local $4 + (get_local $1) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $1) + (get_local $2) + ) + ) + (set_local $3 + (i32.const 18244) + ) + (block $__rjto$11 + (block $__rjti$11 + (loop $while-in43 + (if + (i32.eq + (i32.load + (get_local $3) + ) + (get_local $12) + ) + (block + (set_local $5 + (get_local $3) + ) + (br $__rjti$11) + ) + ) + (br_if $while-in43 + (tee_local $3 + (i32.load offset=8 + (get_local $3) + ) + ) + ) + (set_local $4 + (i32.const 18244) + ) + ) + (br $__rjto$11) + ) + (if + (i32.and + (i32.load offset=12 + (get_local $3) + ) + (i32.const 8) + ) + (set_local $4 + (i32.const 18244) + ) + (block + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (set_local $11 + (i32.add + (tee_local $8 + (i32.add + (get_local $1) + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (get_local $0) + ) + ) + (set_local $5 + (i32.sub + (i32.sub + (tee_local $7 + (i32.add + (get_local $12) + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $12) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (get_local $8) + ) + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $8) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (block $do-once44 + (if + (i32.eq + (get_local $7) + (get_local $6) + ) + (block + (i32.store + (i32.const 17808) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17808) + ) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 17820) + (get_local $11) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + ) + (block + (if + (i32.eq + (get_local $7) + (i32.load + (i32.const 17816) + ) + ) + (block + (i32.store + (i32.const 17804) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17804) + ) + (get_local $5) + ) + ) + ) + (i32.store + (i32.const 17816) + (get_local $11) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $0) + ) + (get_local $0) + ) + (br $do-once44) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (tee_local $0 + (if i32 + (i32.eq + (i32.and + (tee_local $0 + (i32.load offset=4 + (get_local $7) + ) + ) + (i32.const 3) + ) + (i32.const 1) + ) + (block i32 + (set_local $12 + (i32.and + (get_local $0) + (i32.const -8) + ) + ) + (set_local $1 + (i32.shr_u + (get_local $0) + (i32.const 3) + ) + ) + (block $label$break$L328 + (if + (i32.lt_u + (get_local $0) + (i32.const 256) + ) + (block + (set_local $3 + (i32.load offset=12 + (get_local $7) + ) + ) + (block $do-once47 + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $7) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $4) + ) + (call $_abort) + ) + (br_if $do-once47 + (i32.eq + (i32.load offset=12 + (get_local $2) + ) + (get_local $7) + ) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (block + (i32.store + (i32.const 17796) + (i32.and + (i32.load + (i32.const 17796) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L328) + ) + ) + (block $do-once49 + (if + (i32.eq + (get_local $3) + (get_local $0) + ) + (set_local $19 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $3) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (set_local $19 + (get_local $0) + ) + (br $do-once49) + ) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $3) + ) + (i32.store + (get_local $19) + (get_local $2) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $7) + ) + ) + (block $do-once51 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $7) + ) + ) + (get_local $7) + ) + (block + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load + (get_local $2) + ) + ) + (set_local $0 + (get_local $2) + ) + (block + (set_local $10 + (i32.const 0) + ) + (br $do-once51) + ) + ) + ) + (loop $while-in54 + (if + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $3) + ) + (br $while-in54) + ) + ) + (if + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $1 + (get_local $2) + ) + (set_local $0 + (get_local $3) + ) + (br $while-in54) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (get_local $4) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $10 + (get_local $1) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $3 + (i32.load offset=8 + (get_local $7) + ) + ) + (get_local $4) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (get_local $7) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (block + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store + (get_local $1) + (get_local $3) + ) + (set_local $10 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (get_local $6) + ) + ) + (block $do-once55 + (if + (i32.eq + (get_local $7) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $1 + (i32.load offset=28 + (get_local $7) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $10) + ) + (br_if $do-once55 + (get_local $10) + ) + (i32.store + (i32.const 17800) + (i32.and + (i32.load + (i32.const 17800) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + ) + (br $label$break$L328) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $7) + ) + (i32.store + (get_local $0) + (get_local $10) + ) + (i32.store offset=20 + (get_local $6) + (get_local $10) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (get_local $10) + ) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $10) + (tee_local $1 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $10) + (get_local $6) + ) + (if + (tee_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $2) + (get_local $1) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $10) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $10) + ) + ) + ) + ) + (br_if $label$break$L328 + (i32.eqz + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $10) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $10) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $12) + (get_local $5) + ) + ) + (i32.add + (get_local $7) + (get_local $12) + ) + ) + (get_local $7) + ) + ) + (i32.const 4) + ) + ) + (i32.and + (i32.load + (get_local $0) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $11) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $11) + (get_local $5) + ) + (get_local $5) + ) + (set_local $0 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (block $do-once59 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (if + (i32.ge_u + (tee_local $0 + (i32.load + (tee_local $1 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (block + (set_local $20 + (get_local $1) + ) + (set_local $9 + (get_local $0) + ) + (br $do-once59) + ) + ) + (call $_abort) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (set_local $20 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + (set_local $9 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $20) + (get_local $11) + ) + (i32.store offset=12 + (get_local $9) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $9) + ) + (i32.store offset=12 + (get_local $11) + (get_local $2) + ) + (br $do-once44) + ) + ) + (set_local $2 + (i32.add + (i32.shl + (tee_local $3 + (block $do-once61 i32 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (block i32 + (drop + (br_if $do-once61 + (i32.const 31) + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + ) + ) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $2) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + (i32.store offset=28 + (get_local $11) + (get_local $3) + ) + (i32.store offset=4 + (tee_local $0 + (i32.add + (get_local $11) + (i32.const 16) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (i32.const 17800) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17800) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $2) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once44) + ) + ) + (set_local $3 + (i32.shl + (get_local $5) + (if i32 + (i32.eq + (get_local $3) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $2) + ) + ) + (block $__rjto$7 + (block $__rjti$7 + (block $__rjti$6 + (loop $while-in64 + (br_if $__rjti$7 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (br_if $__rjti$6 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $3) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $3 + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in64) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=24 + (get_local $11) + (get_local $0) + ) + (i32.store offset=12 + (get_local $11) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $11) + ) + (br $do-once44) + ) + ) + (br $__rjto$7) + ) + (if + (i32.and + (i32.ge_u + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (i32.const 17812) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $1) + ) + ) + (block + (i32.store offset=12 + (get_local $3) + (get_local $11) + ) + (i32.store + (get_local $2) + (get_local $11) + ) + (i32.store offset=8 + (get_local $11) + (get_local $3) + ) + (i32.store offset=12 + (get_local $11) + (get_local $0) + ) + (i32.store offset=24 + (get_local $11) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $8) + (i32.const 8) + ) + ) + ) + ) + ) + (loop $while-in66 + (block $while-out65 + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $4) + ) + ) + (get_local $6) + ) + (br_if $while-out65 + (i32.gt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.load offset=4 + (get_local $4) + ) + ) + ) + (get_local $6) + ) + ) + ) + (set_local $4 + (i32.load offset=8 + (get_local $4) + ) + ) + (br $while-in66) + ) + ) + (set_local $5 + (i32.add + (tee_local $4 + (i32.add + (get_local $3) + (i32.const -47) + ) + ) + (i32.const 8) + ) + ) + (set_local $10 + (i32.add + (if i32 + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $4) + (if i32 + (i32.and + (get_local $5) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $5) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + (tee_local $9 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (tee_local $4 + (get_local $6) + ) + (get_local $4) + ) + (i32.const 8) + ) + ) + (i32.store + (i32.const 17820) + (tee_local $12 + (i32.add + (get_local $1) + (tee_local $5 + (if i32 + (i32.and + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $5) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (i32.const 17808) + (tee_local $5 + (i32.sub + (i32.add + (get_local $2) + (i32.const -40) + ) + (get_local $5) + ) + ) + ) + (i32.store offset=4 + (get_local $12) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $12) + (get_local $5) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17824) + (i32.load + (i32.const 18284) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 27) + ) + (i32.store + (get_local $10) + (i32.load + (i32.const 18244) + ) + ) + (i32.store offset=4 + (get_local $10) + (i32.load + (i32.const 18248) + ) + ) + (i32.store offset=8 + (get_local $10) + (i32.load + (i32.const 18252) + ) + ) + (i32.store offset=12 + (get_local $10) + (i32.load + (i32.const 18256) + ) + ) + (i32.store + (i32.const 18244) + (get_local $1) + ) + (i32.store + (i32.const 18248) + (get_local $2) + ) + (i32.store + (i32.const 18256) + (i32.const 0) + ) + (i32.store + (i32.const 18252) + (get_local $10) + ) + (set_local $1 + (i32.add + (get_local $4) + (i32.const 24) + ) + ) + (loop $do-in68 + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.const 7) + ) + (br_if $do-in68 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const 4) + ) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $4) + (get_local $6) + ) + (block + (i32.store + (get_local $5) + (i32.and + (i32.load + (get_local $5) + ) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $6) + (i32.or + (tee_local $5 + (i32.sub + (get_local $4) + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + (set_local $1 + (i32.shr_u + (get_local $5) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $5) + (i32.const 256) + ) + (block + (set_local $3 + (i32.add + (i32.shl + (get_local $1) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $1) + ) + ) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.load + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (set_local $11 + (get_local $2) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $2) + (get_local $1) + ) + ) + (set_local $11 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (set_local $7 + (get_local $3) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $6) + ) + (i32.store offset=12 + (get_local $7) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $7) + ) + (i32.store offset=12 + (get_local $6) + (get_local $3) + ) + (br $do-once38) + ) + ) + (set_local $3 + (i32.add + (i32.shl + (tee_local $4 + (if i32 + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $5) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $5) + (i32.add + (tee_local $1 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $1) + (tee_local $3 + (i32.and + (i32.shr_u + (i32.add + (get_local $1) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $3) + ) + (tee_local $1 + (i32.and + (i32.shr_u + (i32.add + (tee_local $2 + (i32.shl + (get_local $2) + (get_local $1) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $2) + (get_local $1) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + (i32.store offset=28 + (get_local $6) + (get_local $4) + ) + (i32.store offset=20 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (tee_local $2 + (i32.load + (i32.const 17800) + ) + ) + (tee_local $1 + (i32.shl + (i32.const 1) + (get_local $4) + ) + ) + ) + ) + (block + (i32.store + (i32.const 17800) + (i32.or + (get_local $2) + (get_local $1) + ) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $3) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once38) + ) + ) + (set_local $4 + (i32.shl + (get_local $5) + (if i32 + (i32.eq + (get_local $4) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + (block $__rjto$9 + (block $__rjti$9 + (block $__rjti$8 + (loop $while-in70 + (br_if $__rjti$9 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $1) + ) + (i32.const -8) + ) + (get_local $5) + ) + ) + (br_if $__rjti$8 + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (i32.add + (get_local $1) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.shl + (get_local $4) + (i32.const 1) + ) + ) + (set_local $1 + (get_local $2) + ) + (br $while-in70) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=24 + (get_local $6) + (get_local $1) + ) + (i32.store offset=12 + (get_local $6) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $6) + ) + (br $do-once38) + ) + ) + (br $__rjto$9) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (i32.const 17812) + ) + ) + ) + (i32.ge_u + (get_local $1) + (get_local $2) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $6) + ) + (i32.store + (get_local $3) + (get_local $6) + ) + (i32.store offset=8 + (get_local $6) + (get_local $4) + ) + (i32.store offset=12 + (get_local $6) + (get_local $1) + ) + (i32.store offset=24 + (get_local $6) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + ) + ) + (block + (if + (i32.or + (i32.eqz + (tee_local $3 + (i32.load + (i32.const 17812) + ) + ) + ) + (i32.lt_u + (get_local $1) + (get_local $3) + ) + ) + (i32.store + (i32.const 17812) + (get_local $1) + ) + ) + (i32.store + (i32.const 18244) + (get_local $1) + ) + (i32.store + (i32.const 18248) + (get_local $2) + ) + (i32.store + (i32.const 18256) + (i32.const 0) + ) + (i32.store + (i32.const 17832) + (i32.load + (i32.const 18268) + ) + ) + (i32.store + (i32.const 17828) + (i32.const -1) + ) + (set_local $4 + (i32.const 0) + ) + (loop $do-in + (i32.store offset=12 + (tee_local $3 + (i32.add + (i32.shl + (get_local $4) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (get_local $3) + ) + (i32.store offset=8 + (get_local $3) + (get_local $3) + ) + (br_if $do-in + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + ) + (i32.store + (i32.const 17820) + (tee_local $3 + (i32.add + (get_local $1) + (tee_local $1 + (if i32 + (i32.and + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.const 7) + ) + (i32.and + (i32.sub + (i32.const 0) + (get_local $1) + ) + (i32.const 7) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (i32.const 17808) + (tee_local $1 + (i32.sub + (i32.add + (get_local $2) + (i32.const -40) + ) + (get_local $1) + ) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $1) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $3) + (get_local $1) + ) + (i32.const 40) + ) + (i32.store + (i32.const 17824) + (i32.load + (i32.const 18284) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $1 + (i32.load + (i32.const 17808) + ) + ) + (get_local $0) + ) + (block + (i32.store + (i32.const 17808) + (tee_local $2 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + ) + (i32.store + (i32.const 17820) + (tee_local $1 + (i32.add + (tee_local $3 + (i32.load + (i32.const 17820) + ) + ) + (get_local $0) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $2) + (i32.const 1) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.or + (get_local $0) + (i32.const 3) + ) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + ) + (i32.store + (call $___errno_location) + (i32.const 12) + ) + (set_global $STACKTOP + (get_local $13) + ) + (i32.const 0) + ) + (func $_printf_core (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 f64) + (local $20 f64) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (set_local $25 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 624) + ) + ) + (set_local $21 + (i32.add + (get_local $25) + (i32.const 16) + ) + ) + (set_local $17 + (get_local $25) + ) + (set_local $38 + (i32.add + (get_local $25) + (i32.const 528) + ) + ) + (set_local $32 + (i32.ne + (get_local $0) + (i32.const 0) + ) + ) + (set_local $40 + (tee_local $24 + (i32.add + (tee_local $16 + (i32.add + (get_local $25) + (i32.const 536) + ) + ) + (i32.const 40) + ) + ) + ) + (set_local $41 + (i32.add + (get_local $16) + (i32.const 39) + ) + ) + (set_local $44 + (i32.add + (tee_local $39 + (i32.add + (get_local $25) + (i32.const 8) + ) + ) + (i32.const 4) + ) + ) + (set_local $45 + (i32.sub + (i32.const 0) + (tee_local $30 + (tee_local $22 + (i32.add + (get_local $25) + (i32.const 588) + ) + ) + ) + ) + ) + (set_local $34 + (i32.add + (tee_local $16 + (i32.add + (get_local $25) + (i32.const 576) + ) + ) + (i32.const 12) + ) + ) + (set_local $42 + (i32.add + (get_local $16) + (i32.const 11) + ) + ) + (set_local $46 + (i32.sub + (tee_local $31 + (get_local $34) + ) + (get_local $30) + ) + ) + (set_local $47 + (i32.sub + (i32.const -2) + (get_local $30) + ) + ) + (set_local $48 + (i32.add + (get_local $31) + (i32.const 2) + ) + ) + (set_local $50 + (i32.add + (tee_local $49 + (i32.add + (get_local $25) + (i32.const 24) + ) + ) + (i32.const 288) + ) + ) + (set_local $43 + (tee_local $33 + (i32.add + (get_local $22) + (i32.const 9) + ) + ) + ) + (set_local $35 + (i32.add + (get_local $22) + (i32.const 8) + ) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $16 + (i32.const 0) + ) + (block $label$break$L345 + (block $__rjti$9 + (loop $label$continue$L1 + (block $label$break$L1 + (if + (i32.gt_s + (get_local $15) + (i32.const -1) + ) + (set_local $15 + (if i32 + (i32.gt_s + (get_local $6) + (i32.sub + (i32.const 2147483647) + (get_local $15) + ) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.const 75) + ) + (i32.const -1) + ) + (i32.add + (get_local $6) + (get_local $15) + ) + ) + ) + ) + (br_if $__rjti$9 + (i32.eqz + (tee_local $11 + (i32.load8_s + (get_local $1) + ) + ) + ) + ) + (set_local $6 + (get_local $1) + ) + (block $label$break$L12 + (block $__rjti$1 + (loop $label$continue$L9 + (block $label$break$L9 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case0 $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.shr_s + (i32.shl + (get_local $11) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (set_local $11 + (get_local $6) + ) + (br $__rjti$1) + ) + (set_local $11 + (get_local $6) + ) + (set_local $5 + (get_local $6) + ) + (br $label$break$L9) + ) + (set_local $11 + (i32.load8_s + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + ) + ) + (br $label$continue$L9) + ) + ) + (br $label$break$L12) + ) + (loop $while-in + (if + (i32.ne + (i32.load8_s offset=1 + (get_local $11) + ) + (i32.const 37) + ) + (block + (set_local $5 + (get_local $6) + ) + (br $label$break$L12) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (br_if $while-in + (i32.eq + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.const 37) + ) + ) + (set_local $5 + (get_local $6) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $5) + (get_local $1) + ) + ) + (if + (get_local $32) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (get_local $6) + (get_local $0) + ) + ) + ) + ) + (if + (i32.ne + (get_local $5) + (get_local $1) + ) + (block + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + (set_local $5 + (if i32 + (i32.lt_u + (tee_local $12 + (i32.add + (tee_local $13 + (i32.load8_s + (tee_local $10 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block i32 + (set_local $13 + (i32.load8_s + (tee_local $11 + (if i32 + (tee_local $5 + (i32.eq + (i32.load8_s offset=2 + (get_local $11) + ) + (i32.const 36) + ) + ) + (i32.add + (get_local $11) + (i32.const 3) + ) + (get_local $10) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (set_local $12 + (i32.const -1) + ) + ) + (if i32 + (get_local $5) + (i32.const 1) + (get_local $16) + ) + ) + (block i32 + (set_local $12 + (i32.const -1) + ) + (set_local $11 + (get_local $10) + ) + (get_local $16) + ) + ) + ) + (block $label$break$L25 + (if + (i32.eq + (i32.and + (tee_local $7 + (i32.shr_s + (i32.shl + (get_local $13) + (i32.const 24) + ) + (i32.const 24) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + (block + (set_local $16 + (get_local $13) + ) + (set_local $10 + (i32.const 0) + ) + (loop $while-in4 + (if + (i32.eqz + (i32.and + (i32.shl + (i32.const 1) + (i32.add + (get_local $7) + (i32.const -32) + ) + ) + (i32.const 75913) + ) + ) + (block + (set_local $13 + (get_local $16) + ) + (set_local $16 + (get_local $10) + ) + (br $label$break$L25) + ) + ) + (set_local $10 + (i32.or + (i32.shl + (i32.const 1) + (i32.add + (i32.shr_s + (i32.shl + (get_local $16) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -32) + ) + ) + (get_local $10) + ) + ) + (br_if $while-in4 + (i32.eq + (i32.and + (tee_local $7 + (tee_local $16 + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const -32) + ) + (i32.const 32) + ) + ) + (set_local $13 + (get_local $16) + ) + (set_local $16 + (get_local $10) + ) + ) + ) + (set_local $16 + (i32.const 0) + ) + ) + ) + (block $do-once5 + (if + (i32.eq + (i32.and + (get_local $13) + (i32.const 255) + ) + (i32.const 42) + ) + (block + (set_local $5 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.ge_u + (tee_local $10 + (i32.add + (i32.load8_s + (tee_local $13 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br_if $__rjti$0 + (i32.ne + (i32.load8_s offset=2 + (get_local $11) + ) + (i32.const 36) + ) + ) + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $10) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 3) + ) + ) + (set_local $13 + (i32.load + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $13) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + (br $__rjto$0 + (i32.const 1) + ) + ) + (if + (get_local $5) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (i32.const 0) + ) + (set_local $11 + (get_local $13) + ) + (set_local $13 + (i32.const 0) + ) + (br $do-once5) + ) + ) + (set_local $10 + (i32.load + (tee_local $11 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (set_local $11 + (get_local $13) + ) + (set_local $13 + (get_local $10) + ) + (i32.const 0) + ) + ) + (set_local $16 + (if i32 + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (block i32 + (set_local $10 + (i32.or + (get_local $16) + (i32.const 8192) + ) + ) + (set_local $13 + (i32.sub + (i32.const 0) + (get_local $13) + ) + ) + (get_local $5) + ) + (block i32 + (set_local $10 + (get_local $16) + ) + (get_local $5) + ) + ) + ) + ) + (if + (i32.lt_u + (tee_local $10 + (i32.add + (i32.shr_s + (i32.shl + (get_local $13) + (i32.const 24) + ) + (i32.const 24) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $13 + (i32.const 0) + ) + (loop $while-in8 + (set_local $13 + (i32.add + (i32.mul + (get_local $13) + (i32.const 10) + ) + (get_local $10) + ) + ) + (br_if $while-in8 + (i32.lt_u + (tee_local $10 + (i32.add + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + ) + (if + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (get_local $5) + ) + ) + ) + ) + (block + (set_local $10 + (get_local $16) + ) + (set_local $16 + (get_local $5) + ) + (set_local $13 + (i32.const 0) + ) + ) + ) + ) + ) + (block $label$break$L46 + (if + (i32.eq + (i32.load8_s + (get_local $11) + ) + (i32.const 46) + ) + (block + (if + (i32.ne + (tee_local $5 + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + ) + (i32.const 42) + ) + (block + (if + (i32.lt_u + (tee_local $8 + (i32.add + (get_local $5) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (block + (set_local $11 + (get_local $7) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $7 + (get_local $8) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (set_local $11 + (get_local $7) + ) + (br $label$break$L46) + ) + ) + (loop $while-in11 + (set_local $5 + (i32.add + (i32.mul + (get_local $5) + (i32.const 10) + ) + (get_local $7) + ) + ) + (br_if $while-in11 + (i32.lt_u + (tee_local $7 + (i32.add + (i32.load8_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + ) + (br $label$break$L46) + ) + ) + ) + (if + (i32.lt_u + (tee_local $5 + (i32.add + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.const -48) + ) + ) + (i32.const 10) + ) + (if + (i32.eq + (i32.load8_s offset=3 + (get_local $11) + ) + (i32.const 36) + ) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + (i32.const 10) + ) + (set_local $5 + (i32.load + (i32.add + (get_local $3) + (i32.shl + (i32.add + (i32.load8_s + (get_local $7) + ) + (i32.const -48) + ) + (i32.const 3) + ) + ) + ) + ) + (set_local $11 + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (br $label$break$L46) + ) + ) + ) + (if + (get_local $16) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $11 + (if i32 + (get_local $32) + (block i32 + (set_local $5 + (i32.load + (tee_local $11 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $11) + (i32.const 4) + ) + ) + (get_local $7) + ) + (block i32 + (set_local $5 + (i32.const 0) + ) + (get_local $7) + ) + ) + ) + ) + (set_local $5 + (i32.const -1) + ) + ) + ) + (set_local $7 + (get_local $11) + ) + (set_local $8 + (i32.const 0) + ) + (loop $while-in13 + (if + (i32.gt_u + (tee_local $9 + (i32.add + (i32.load8_s + (get_local $7) + ) + (i32.const -65) + ) + ) + (i32.const 57) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $11 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (i32.add + (tee_local $9 + (i32.and + (tee_local $14 + (i32.load8_s + (i32.add + (i32.add + (i32.mul + (get_local $8) + (i32.const 58) + ) + (i32.const 15313) + ) + (get_local $9) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.const -1) + ) + (i32.const 8) + ) + (block + (set_local $7 + (get_local $11) + ) + (set_local $8 + (get_local $9) + ) + (br $while-in13) + ) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $14) + (i32.const 255) + ) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (set_local $18 + (i32.gt_s + (get_local $12) + (i32.const -1) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (if + (i32.eq + (i32.and + (get_local $14) + (i32.const 255) + ) + (i32.const 19) + ) + (if + (get_local $18) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + (br $__rjti$2) + ) + (block + (if + (get_local $18) + (block + (i32.store + (i32.add + (get_local $4) + (i32.shl + (get_local $12) + (i32.const 2) + ) + ) + (get_local $9) + ) + (set_local $14 + (i32.load offset=4 + (tee_local $12 + (i32.add + (get_local $3) + (i32.shl + (get_local $12) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.store + (tee_local $9 + (get_local $17) + ) + (i32.load + (get_local $12) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $14) + ) + (br $__rjti$2) + ) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $15 + (i32.const 0) + ) + (br $label$break$L1) + ) + ) + (call $_pop_arg + (get_local $17) + (get_local $9) + (get_local $2) + ) + ) + ) + (br $__rjto$2) + ) + (if + (i32.eqz + (get_local $32) + ) + (block + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + ) + (if + (i32.and + (i32.ne + (get_local $8) + (i32.const 0) + ) + (i32.eq + (i32.and + (tee_local $9 + (i32.load8_s + (get_local $7) + ) + ) + (i32.const 15) + ) + (i32.const 3) + ) + ) + (set_local $9 + (i32.and + (get_local $9) + (i32.const -33) + ) + ) + ) + (set_local $7 + (i32.and + (get_local $10) + (i32.const -65537) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 8192) + ) + (set_local $10 + (get_local $7) + ) + ) + (block $__rjto$8 + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (block $switch-default120 + (block $switch-case42 + (block $switch-case41 + (block $switch-case40 + (block $switch-case39 + (block $switch-case38 + (block $switch-case37 + (block $switch-case36 + (block $switch-case34 + (block $switch-case33 + (block $switch-case29 + (block $switch-case28 + (block $switch-case27 + (br_table $switch-case42 $switch-default120 $switch-case40 $switch-default120 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case41 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case29 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-default120 $switch-case42 $switch-default120 $switch-case37 $switch-case34 $switch-case42 $switch-case42 $switch-case42 $switch-default120 $switch-case34 $switch-default120 $switch-default120 $switch-default120 $switch-case38 $switch-case27 $switch-case33 $switch-case28 $switch-default120 $switch-default120 $switch-case39 $switch-default120 $switch-case36 $switch-default120 $switch-default120 $switch-case29 $switch-default120 + (i32.sub + (get_local $9) + (i32.const 65) + ) + ) + ) + (block $switch-default26 + (block $switch-case25 + (block $switch-case24 + (block $switch-case23 + (block $switch-case22 + (block $switch-case21 + (block $switch-case20 + (block $switch-case19 + (br_table $switch-case19 $switch-case20 $switch-case21 $switch-case22 $switch-case23 $switch-default26 $switch-case24 $switch-case25 $switch-default26 + (get_local $8) + ) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $1 + (i32.load + (get_local $17) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $15) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store16 + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store8 + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (i32.load + (get_local $17) + ) + (get_local $15) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (i32.store + (tee_local $1 + (i32.load + (get_local $17) + ) + ) + (get_local $15) + ) + (i32.store offset=4 + (get_local $1) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $15) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $1 + (i32.or + (get_local $10) + (i32.const 8) + ) + ) + (if + (i32.le_u + (get_local $5) + (i32.const 8) + ) + (set_local $5 + (i32.const 8) + ) + ) + (set_local $9 + (i32.const 120) + ) + (br $__rjti$3) + ) + (set_local $1 + (get_local $10) + ) + (br $__rjti$3) + ) + (if + (i32.and + (i32.eqz + (tee_local $6 + (i32.load + (tee_local $1 + (get_local $17) + ) + ) + ) + ) + (i32.eqz + (tee_local $7 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + (set_local $7 + (get_local $24) + ) + (block + (set_local $1 + (get_local $24) + ) + (loop $while-in32 + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.or + (i32.and + (get_local $6) + (i32.const 7) + ) + (i32.const 48) + ) + ) + (br_if $while-in32 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $6 + (call $_bitshift64Lshr + (get_local $6) + (get_local $7) + (i32.const 3) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + (set_local $7 + (get_local $1) + ) + ) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 8) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $1 + (get_local $10) + ) + (if + (i32.le_s + (get_local $5) + (tee_local $10 + (i32.sub + (get_local $40) + (get_local $7) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $10) + (i32.const 1) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$8) + ) + (block + (set_local $6 + (get_local $7) + ) + (set_local $1 + (get_local $10) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$8) + ) + ) + ) + (set_local $1 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.load offset=4 + (get_local $6) + ) + ) + (i32.const 0) + ) + (block + (i32.store + (tee_local $7 + (get_local $17) + ) + (tee_local $1 + (call $_i64Subtract + (i32.const 0) + (i32.const 0) + (get_local $1) + (get_local $6) + ) + ) + ) + (i32.store offset=4 + (get_local $7) + (tee_local $6 + (get_global $tempRet0) + ) + ) + (set_local $7 + (i32.const 1) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$4) + ) + ) + (if + (i32.and + (get_local $10) + (i32.const 2048) + ) + (block + (set_local $7 + (i32.const 1) + ) + (set_local $8 + (i32.const 15794) + ) + (br $__rjti$4) + ) + (block + (set_local $7 + (tee_local $8 + (i32.and + (get_local $10) + (i32.const 1) + ) + ) + ) + (set_local $8 + (if i32 + (get_local $8) + (i32.const 15795) + (i32.const 15793) + ) + ) + (br $__rjti$4) + ) + ) + ) + (set_local $1 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + (set_local $6 + (i32.load offset=4 + (get_local $6) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$4) + ) + (i32.store8 + (get_local $41) + (i32.load + (get_local $17) + ) + ) + (set_local $1 + (get_local $41) + ) + (set_local $10 + (get_local $7) + ) + (set_local $9 + (i32.const 1) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (set_local $6 + (get_local $24) + ) + (br $__rjto$8) + ) + (set_local $6 + (call $_strerror + (i32.load + (call $___errno_location) + ) + ) + ) + (br $__rjti$5) + ) + (if + (i32.eqz + (tee_local $6 + (i32.load + (get_local $17) + ) + ) + ) + (set_local $6 + (i32.const 17695) + ) + ) + (br $__rjti$5) + ) + (i32.store + (get_local $39) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $44) + (i32.const 0) + ) + (i32.store + (get_local $17) + (get_local $39) + ) + (set_local $6 + (get_local $39) + ) + (set_local $7 + (i32.const -1) + ) + (br $__rjti$6) + ) + (set_local $6 + (i32.load + (get_local $17) + ) + ) + (if + (get_local $5) + (block + (set_local $7 + (get_local $5) + ) + (br $__rjti$6) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (i32.const 0) + (get_local $10) + ) + (set_local $1 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + ) + (set_local $19 + (f64.load + (get_local $17) + ) + ) + (i32.store + (get_local $21) + (i32.const 0) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $19) + ) + (set_local $28 + (if i32 + (i32.lt_s + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 0) + ) + (block i32 + (set_local $19 + (f64.neg + (get_local $19) + ) + ) + (set_local $26 + (i32.const 1) + ) + (i32.const 17702) + ) + (if i32 + (i32.and + (get_local $10) + (i32.const 2048) + ) + (block i32 + (set_local $26 + (i32.const 1) + ) + (i32.const 17705) + ) + (block i32 + (set_local $26 + (tee_local $1 + (i32.and + (get_local $10) + (i32.const 1) + ) + ) + ) + (if i32 + (get_local $1) + (i32.const 17708) + (i32.const 17703) + ) + ) + ) + ) + ) + (f64.store + (get_global $tempDoublePtr) + (get_local $19) + ) + (block $do-once49 + (if + (i32.or + (i32.lt_u + (tee_local $1 + (i32.and + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + (i32.const 2146435072) + ) + ) + (i32.const 2146435072) + ) + (i32.and + (i32.eq + (get_local $1) + (i32.const 2146435072) + ) + (i32.const 0) + ) + ) + (block + (if + (tee_local $1 + (f64.ne + (tee_local $20 + (f64.mul + (call $_frexpl + (get_local $19) + (get_local $21) + ) + (f64.const 2) + ) + ) + (f64.const 0) + ) + ) + (i32.store + (get_local $21) + (i32.add + (i32.load + (get_local $21) + ) + (i32.const -1) + ) + ) + ) + (if + (i32.eq + (tee_local $23 + (i32.or + (get_local $9) + (i32.const 32) + ) + ) + (i32.const 97) + ) + (block + (if + (tee_local $12 + (i32.and + (get_local $9) + (i32.const 32) + ) + ) + (set_local $28 + (i32.add + (get_local $28) + (i32.const 9) + ) + ) + ) + (if + (i32.eqz + (i32.or + (i32.gt_u + (get_local $5) + (i32.const 11) + ) + (i32.eqz + (tee_local $1 + (i32.sub + (i32.const 12) + (get_local $5) + ) + ) + ) + ) + ) + (block + (set_local $19 + (f64.const 8) + ) + (loop $while-in54 + (set_local $19 + (f64.mul + (get_local $19) + (f64.const 16) + ) + ) + (br_if $while-in54 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + (set_local $20 + (if f64 + (i32.eq + (i32.load8_s + (get_local $28) + ) + (i32.const 45) + ) + (f64.neg + (f64.add + (get_local $19) + (f64.sub + (f64.neg + (get_local $20) + ) + (get_local $19) + ) + ) + ) + (f64.sub + (f64.add + (get_local $20) + (get_local $19) + ) + (get_local $19) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $1 + (call $_fmt_u + (tee_local $1 + (if i32 + (i32.lt_s + (tee_local $6 + (i32.load + (get_local $21) + ) + ) + (i32.const 0) + ) + (i32.sub + (i32.const 0) + (get_local $6) + ) + (get_local $6) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + (get_local $34) + ) + (block + (i32.store8 + (get_local $42) + (i32.const 48) + ) + (set_local $1 + (get_local $42) + ) + ) + ) + (set_local $8 + (i32.or + (get_local $26) + (i32.const 2) + ) + ) + (i32.store8 + (i32.add + (get_local $1) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $6) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $7 + (i32.add + (get_local $1) + (i32.const -2) + ) + ) + (i32.add + (get_local $9) + (i32.const 15) + ) + ) + (set_local $9 + (i32.lt_s + (get_local $5) + (i32.const 1) + ) + ) + (set_local $14 + (i32.eqz + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + (set_local $1 + (get_local $22) + ) + (loop $while-in56 + (i32.store8 + (get_local $1) + (i32.or + (i32.load8_u + (i32.add + (tee_local $6 + (i32.trunc_s/f64 + (get_local $20) + ) + ) + (i32.const 15777) + ) + ) + (get_local $12) + ) + ) + (set_local $20 + (f64.mul + (f64.sub + (get_local $20) + (f64.convert_s/i32 + (get_local $6) + ) + ) + (f64.const 16) + ) + ) + (set_local $1 + (block $do-once57 i32 + (if i32 + (i32.eq + (i32.sub + (tee_local $6 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (get_local $30) + ) + (i32.const 1) + ) + (block i32 + (drop + (br_if $do-once57 + (get_local $6) + (i32.and + (get_local $14) + (i32.and + (get_local $9) + (f64.eq + (get_local $20) + (f64.const 0) + ) + ) + ) + ) + ) + (i32.store8 + (get_local $6) + (i32.const 46) + ) + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (get_local $6) + ) + ) + ) + (br_if $while-in56 + (f64.ne + (get_local $20) + (f64.const 0) + ) + ) + ) + (set_local $6 + (get_local $7) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $5 + (i32.add + (tee_local $9 + (if i32 + (i32.and + (i32.ne + (get_local $5) + (i32.const 0) + ) + (i32.lt_s + (i32.add + (get_local $47) + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.sub + (i32.add + (get_local $48) + (get_local $5) + ) + (get_local $6) + ) + (i32.add + (i32.sub + (get_local $46) + (get_local $6) + ) + (get_local $1) + ) + ) + ) + (get_local $8) + ) + ) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $28) + (get_local $8) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $13) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $30) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $22) + (get_local $1) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.sub + (get_local $9) + (i32.add + (get_local $1) + (tee_local $1 + (i32.sub + (get_local $31) + (get_local $6) + ) + ) + ) + ) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $7) + (get_local $1) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $5) + (get_local $13) + ) + (set_local $13 + (get_local $5) + ) + ) + (br $do-once49) + ) + ) + (if + (get_local $1) + (block + (i32.store + (get_local $21) + (tee_local $1 + (i32.add + (i32.load + (get_local $21) + ) + (i32.const -28) + ) + ) + ) + (set_local $20 + (f64.mul + (get_local $20) + (f64.const 268435456) + ) + ) + ) + (set_local $1 + (i32.load + (get_local $21) + ) + ) + ) + (set_local $7 + (tee_local $6 + (if i32 + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (get_local $49) + (get_local $50) + ) + ) + ) + (loop $while-in60 + (i32.store + (get_local $7) + (tee_local $1 + (i32.trunc_s/f64 + (get_local $20) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + (br_if $while-in60 + (f64.ne + (tee_local $20 + (f64.mul + (f64.sub + (get_local $20) + (f64.convert_u/i32 + (get_local $1) + ) + ) + (f64.const 1e9) + ) + ) + (f64.const 0) + ) + ) + ) + (if + (i32.gt_s + (tee_local $8 + (i32.load + (get_local $21) + ) + ) + (i32.const 0) + ) + (block + (set_local $1 + (get_local $6) + ) + (loop $while-in62 + (set_local $14 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 29) + ) + (i32.const 29) + (get_local $8) + ) + ) + (block $do-once63 + (if + (i32.ge_u + (tee_local $12 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $1) + ) + (block + (set_local $8 + (i32.const 0) + ) + (loop $while-in66 + (i32.store + (get_local $12) + (call $___uremdi3 + (tee_local $8 + (call $_i64Add + (call $_bitshift64Shl + (i32.load + (get_local $12) + ) + (i32.const 0) + (get_local $14) + ) + (get_global $tempRet0) + (get_local $8) + (i32.const 0) + ) + ) + (tee_local $18 + (get_global $tempRet0) + ) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (set_local $8 + (call $___udivdi3 + (get_local $8) + (get_local $18) + (i32.const 1000000000) + (i32.const 0) + ) + ) + (br_if $while-in66 + (i32.ge_u + (tee_local $12 + (i32.add + (get_local $12) + (i32.const -4) + ) + ) + (get_local $1) + ) + ) + ) + (br_if $do-once63 + (i32.eqz + (get_local $8) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + (get_local $8) + ) + ) + ) + ) + (loop $while-in68 + (if + (i32.gt_u + (get_local $7) + (get_local $1) + ) + (if + (i32.eqz + (i32.load + (tee_local $8 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $7 + (get_local $8) + ) + (br $while-in68) + ) + ) + ) + ) + (i32.store + (get_local $21) + (tee_local $8 + (i32.sub + (i32.load + (get_local $21) + ) + (get_local $14) + ) + ) + ) + (br_if $while-in62 + (i32.gt_s + (get_local $8) + (i32.const 0) + ) + ) + ) + ) + (set_local $1 + (get_local $6) + ) + ) + (set_local $18 + (if i32 + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (i32.const 6) + (get_local $5) + ) + ) + (if + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + (block + (set_local $14 + (i32.add + (i32.div_s + (i32.add + (get_local $18) + (i32.const 25) + ) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (set_local $27 + (i32.eq + (get_local $23) + (i32.const 102) + ) + ) + (set_local $5 + (get_local $7) + ) + (loop $while-in70 + (if + (i32.gt_s + (tee_local $8 + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (i32.const 9) + ) + (set_local $8 + (i32.const 9) + ) + ) + (block $do-once71 + (if + (i32.lt_u + (get_local $1) + (get_local $5) + ) + (block + (set_local $29 + (i32.add + (i32.shl + (i32.const 1) + (get_local $8) + ) + (i32.const -1) + ) + ) + (set_local $36 + (i32.shr_u + (i32.const 1000000000) + (get_local $8) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $12 + (get_local $1) + ) + (loop $while-in74 + (i32.store + (get_local $12) + (i32.add + (i32.shr_u + (tee_local $37 + (i32.load + (get_local $12) + ) + ) + (get_local $8) + ) + (get_local $7) + ) + ) + (set_local $7 + (i32.mul + (i32.and + (get_local $37) + (get_local $29) + ) + (get_local $36) + ) + ) + (br_if $while-in74 + (i32.lt_u + (tee_local $12 + (i32.add + (get_local $12) + (i32.const 4) + ) + ) + (get_local $5) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + (br_if $do-once71 + (i32.eqz + (get_local $7) + ) + ) + (i32.store + (get_local $5) + (get_local $7) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (i32.gt_s + (i32.shr_s + (i32.sub + (get_local $5) + (tee_local $7 + (if i32 + (get_local $27) + (get_local $6) + (get_local $1) + ) + ) + ) + (i32.const 2) + ) + (get_local $14) + ) + (set_local $5 + (i32.add + (get_local $7) + (i32.shl + (get_local $14) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $21) + (tee_local $8 + (i32.add + (i32.load + (get_local $21) + ) + (get_local $8) + ) + ) + ) + (br_if $while-in70 + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + ) + (set_local $12 + (get_local $5) + ) + ) + ) + (set_local $12 + (get_local $7) + ) + ) + (set_local $27 + (get_local $6) + ) + (block $do-once75 + (if + (i32.lt_u + (get_local $1) + (get_local $12) + ) + (block + (set_local $5 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $1) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once75 + (i32.lt_u + (tee_local $8 + (i32.load + (get_local $1) + ) + ) + (i32.const 10) + ) + ) + (set_local $7 + (i32.const 10) + ) + (loop $while-in78 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in78 + (i32.ge_u + (get_local $8) + (tee_local $7 + (i32.mul + (get_local $7) + (i32.const 10) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + (set_local $36 + (i32.eq + (get_local $23) + (i32.const 103) + ) + ) + (set_local $37 + (i32.ne + (get_local $18) + (i32.const 0) + ) + ) + (if + (i32.lt_s + (tee_local $7 + (i32.add + (i32.sub + (get_local $18) + (if i32 + (i32.ne + (get_local $23) + (i32.const 102) + ) + (get_local $5) + (i32.const 0) + ) + ) + (i32.shr_s + (i32.shl + (i32.and + (get_local $37) + (get_local $36) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + ) + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $12) + (get_local $27) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (block + (set_local $7 + (i32.add + (i32.add + (get_local $6) + (i32.shl + (i32.div_s + (tee_local $8 + (i32.add + (get_local $7) + (i32.const 9216) + ) + ) + (i32.const 9) + ) + (i32.const 2) + ) + ) + (i32.const -4092) + ) + ) + (if + (i32.lt_s + (tee_local $14 + (i32.add + (i32.rem_s + (get_local $8) + (i32.const 9) + ) + (i32.const 1) + ) + ) + (i32.const 9) + ) + (block + (set_local $8 + (i32.const 10) + ) + (loop $while-in80 + (set_local $8 + (i32.mul + (get_local $8) + (i32.const 10) + ) + ) + (br_if $while-in80 + (i32.ne + (tee_local $14 + (i32.add + (get_local $14) + (i32.const 1) + ) + ) + (i32.const 9) + ) + ) + ) + ) + (set_local $8 + (i32.const 10) + ) + ) + (block $do-once81 + (if + (i32.eqz + (i32.and + (tee_local $29 + (i32.eq + (i32.add + (get_local $7) + (i32.const 4) + ) + (get_local $12) + ) + ) + (i32.eqz + (tee_local $14 + (i32.rem_u + (tee_local $23 + (i32.load + (get_local $7) + ) + ) + (get_local $8) + ) + ) + ) + ) + ) + (block + (set_local $20 + (if f64 + (i32.and + (i32.div_u + (get_local $23) + (get_local $8) + ) + (i32.const 1) + ) + (f64.const 9007199254740994) + (f64.const 9007199254740992) + ) + ) + (set_local $19 + (if f64 + (i32.lt_u + (get_local $14) + (tee_local $51 + (i32.div_s + (get_local $8) + (i32.const 2) + ) + ) + ) + (f64.const 0.5) + (if f64 + (i32.and + (get_local $29) + (i32.eq + (get_local $14) + (get_local $51) + ) + ) + (f64.const 1) + (f64.const 1.5) + ) + ) + ) + (block $do-once83 + (if + (get_local $26) + (block + (br_if $do-once83 + (i32.ne + (i32.load8_s + (get_local $28) + ) + (i32.const 45) + ) + ) + (set_local $20 + (f64.neg + (get_local $20) + ) + ) + (set_local $19 + (f64.neg + (get_local $19) + ) + ) + ) + ) + ) + (i32.store + (get_local $7) + (tee_local $14 + (i32.sub + (get_local $23) + (get_local $14) + ) + ) + ) + (br_if $do-once81 + (f64.eq + (f64.add + (get_local $20) + (get_local $19) + ) + (get_local $20) + ) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (get_local $14) + (get_local $8) + ) + ) + ) + (if + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + (loop $while-in86 + (i32.store + (get_local $7) + (i32.const 0) + ) + (if + (i32.lt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + (get_local $1) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $7) + (tee_local $5 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in86 + (i32.gt_u + (get_local $5) + (i32.const 999999999) + ) + ) + ) + ) + (set_local $5 + (i32.mul + (i32.shr_s + (i32.sub + (get_local $27) + (get_local $1) + ) + (i32.const 2) + ) + (i32.const 9) + ) + ) + (br_if $do-once81 + (i32.lt_u + (tee_local $14 + (i32.load + (get_local $1) + ) + ) + (i32.const 10) + ) + ) + (set_local $8 + (i32.const 10) + ) + (loop $while-in88 + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $while-in88 + (i32.ge_u + (get_local $14) + (tee_local $8 + (i32.mul + (get_local $8) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $14 + (get_local $1) + ) + (set_local $8 + (get_local $5) + ) + (if + (i32.le_u + (get_local $12) + (tee_local $1 + (i32.add + (get_local $7) + (i32.const 4) + ) + ) + ) + (set_local $1 + (get_local $12) + ) + ) + ) + (block + (set_local $14 + (get_local $1) + ) + (set_local $8 + (get_local $5) + ) + (set_local $1 + (get_local $12) + ) + ) + ) + (set_local $23 + (i32.sub + (i32.const 0) + (get_local $8) + ) + ) + (loop $while-in90 + (block $while-out89 + (if + (i32.le_u + (get_local $1) + (get_local $14) + ) + (block + (set_local $29 + (i32.const 0) + ) + (set_local $7 + (get_local $1) + ) + (br $while-out89) + ) + ) + (if + (i32.load + (tee_local $5 + (i32.add + (get_local $1) + (i32.const -4) + ) + ) + ) + (block + (set_local $29 + (i32.const 1) + ) + (set_local $7 + (get_local $1) + ) + ) + (block + (set_local $1 + (get_local $5) + ) + (br $while-in90) + ) + ) + ) + ) + (block $do-once91 + (set_local $12 + (if i32 + (get_local $36) + (block i32 + (set_local $1 + (if i32 + (i32.and + (i32.gt_s + (tee_local $1 + (i32.add + (i32.xor + (get_local $37) + (i32.const 1) + ) + (get_local $18) + ) + ) + (get_local $8) + ) + (i32.gt_s + (get_local $8) + (i32.const -5) + ) + ) + (block i32 + (set_local $5 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (i32.sub + (i32.add + (get_local $1) + (i32.const -1) + ) + (get_local $8) + ) + ) + (block i32 + (set_local $5 + (i32.add + (get_local $9) + (i32.const -2) + ) + ) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + (br_if $do-once91 + (tee_local $12 + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + (block $do-once93 + (if + (get_local $29) + (block + (if + (i32.eqz + (tee_local $12 + (i32.load + (i32.add + (get_local $7) + (i32.const -4) + ) + ) + ) + ) + (block + (set_local $9 + (i32.const 9) + ) + (br $do-once93) + ) + ) + (if + (i32.rem_u + (get_local $12) + (i32.const 10) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once93) + ) + (block + (set_local $18 + (i32.const 10) + ) + (set_local $9 + (i32.const 0) + ) + ) + ) + (loop $while-in96 + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (br_if $while-in96 + (i32.eqz + (i32.rem_u + (get_local $12) + (tee_local $18 + (i32.mul + (get_local $18) + (i32.const 10) + ) + ) + ) + ) + ) + ) + ) + (set_local $9 + (i32.const 9) + ) + ) + ) + (set_local $12 + (i32.add + (i32.mul + (i32.shr_s + (i32.sub + (get_local $7) + (get_local $27) + ) + (i32.const 2) + ) + (i32.const 9) + ) + (i32.const -9) + ) + ) + (if i32 + (i32.eq + (i32.or + (get_local $5) + (i32.const 32) + ) + (i32.const 102) + ) + (block i32 + (if + (i32.ge_s + (get_local $1) + (if i32 + (i32.lt_s + (tee_local $9 + (i32.sub + (get_local $12) + (get_local $9) + ) + ) + (i32.const 0) + ) + (tee_local $9 + (i32.const 0) + ) + (get_local $9) + ) + ) + (set_local $1 + (get_local $9) + ) + ) + (i32.const 0) + ) + (block i32 + (if + (i32.ge_s + (get_local $1) + (if i32 + (i32.lt_s + (tee_local $9 + (i32.sub + (i32.add + (get_local $12) + (get_local $8) + ) + (get_local $9) + ) + ) + (i32.const 0) + ) + (tee_local $9 + (i32.const 0) + ) + (get_local $9) + ) + ) + (set_local $1 + (get_local $9) + ) + ) + (i32.const 0) + ) + ) + ) + (block i32 + (set_local $5 + (get_local $9) + ) + (set_local $1 + (get_local $18) + ) + (i32.and + (get_local $10) + (i32.const 8) + ) + ) + ) + ) + ) + (if + (tee_local $27 + (i32.eq + (i32.or + (get_local $5) + (i32.const 32) + ) + (i32.const 102) + ) + ) + (block + (set_local $5 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 0) + ) + (get_local $8) + (i32.const 0) + ) + ) + (set_local $8 + (i32.const 0) + ) + ) + (block + (if + (i32.lt_s + (i32.sub + (get_local $31) + (tee_local $9 + (call $_fmt_u + (if i32 + (i32.lt_s + (get_local $8) + (i32.const 0) + ) + (get_local $23) + (tee_local $23 + (get_local $8) + ) + ) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $23) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + (get_local $34) + ) + ) + ) + (i32.const 2) + ) + (loop $while-in98 + (i32.store8 + (tee_local $9 + (i32.add + (get_local $9) + (i32.const -1) + ) + ) + (i32.const 48) + ) + (br_if $while-in98 + (i32.lt_s + (i32.sub + (get_local $31) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $9) + (i32.const -1) + ) + (i32.add + (i32.and + (i32.shr_s + (get_local $8) + (i32.const 31) + ) + (i32.const 2) + ) + (i32.const 43) + ) + ) + (i32.store8 + (tee_local $8 + (i32.add + (get_local $9) + (i32.const -2) + ) + ) + (get_local $5) + ) + (set_local $5 + (i32.sub + (get_local $31) + (get_local $8) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $18 + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $26) + (i32.const 1) + ) + (get_local $1) + ) + (i32.ne + (tee_local $23 + (i32.or + (get_local $1) + (get_local $12) + ) + ) + (i32.const 0) + ) + ) + (get_local $5) + ) + ) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $28) + (get_local $26) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $13) + (get_local $18) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (block $do-once99 + (if + (get_local $27) + (block + (set_local $8 + (tee_local $9 + (if i32 + (i32.gt_u + (get_local $14) + (get_local $6) + ) + (get_local $6) + (get_local $14) + ) + ) + ) + (loop $while-in102 + (set_local $5 + (call $_fmt_u + (i32.load + (get_local $8) + ) + (i32.const 0) + (get_local $33) + ) + ) + (block $do-once103 + (if + (i32.eq + (get_local $8) + (get_local $9) + ) + (block + (br_if $do-once103 + (i32.ne + (get_local $5) + (get_local $33) + ) + ) + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $5 + (get_local $35) + ) + ) + (block + (br_if $do-once103 + (i32.le_u + (get_local $5) + (get_local $22) + ) + ) + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.sub + (get_local $5) + (get_local $30) + ) + ) + ) + (loop $while-in106 + (br_if $while-in106 + (i32.gt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (i32.sub + (get_local $43) + (get_local $5) + ) + (get_local $0) + ) + ) + ) + (if + (i32.le_u + (tee_local $5 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (get_local $6) + ) + (block + (set_local $8 + (get_local $5) + ) + (br $while-in102) + ) + ) + ) + (block $do-once107 + (if + (get_local $23) + (block + (br_if $do-once107 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 17737) + (i32.const 1) + (get_local $0) + ) + ) + ) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $1) + (i32.const 0) + ) + (i32.lt_u + (get_local $5) + (get_local $7) + ) + ) + (loop $while-in110 + (if + (i32.gt_u + (tee_local $6 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $33) + ) + ) + (get_local $22) + ) + (block + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.sub + (get_local $6) + (get_local $30) + ) + ) + ) + (loop $while-in112 + (br_if $while-in112 + (i32.gt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $6) + (if i32 + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (i32.const 9) + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (set_local $6 + (i32.add + (get_local $1) + (i32.const -9) + ) + ) + (if + (i32.and + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $7) + ) + ) + (block + (set_local $1 + (get_local $6) + ) + (br $while-in110) + ) + (set_local $1 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $1) + (i32.const 9) + ) + (i32.const 9) + (i32.const 0) + ) + ) + (block + (if + (i32.eqz + (get_local $29) + ) + (set_local $7 + (i32.add + (get_local $14) + (i32.const 4) + ) + ) + ) + (if + (i32.gt_s + (get_local $1) + (i32.const -1) + ) + (block + (set_local $12 + (i32.eqz + (get_local $12) + ) + ) + (set_local $6 + (get_local $1) + ) + (set_local $5 + (get_local $14) + ) + (loop $while-in114 + (if + (i32.eq + (tee_local $1 + (call $_fmt_u + (i32.load + (get_local $5) + ) + (i32.const 0) + (get_local $33) + ) + ) + (get_local $33) + ) + (block + (i32.store8 + (get_local $35) + (i32.const 48) + ) + (set_local $1 + (get_local $35) + ) + ) + ) + (block $do-once115 + (if + (i32.eq + (get_local $5) + (get_local $14) + ) + (block + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (i32.const 1) + (get_local $0) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br_if $do-once115 + (i32.and + (get_local $12) + (i32.lt_s + (get_local $6) + (i32.const 1) + ) + ) + ) + (br_if $do-once115 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (i32.const 17737) + (i32.const 1) + (get_local $0) + ) + ) + ) + (block + (br_if $do-once115 + (i32.le_u + (get_local $1) + (get_local $22) + ) + ) + (drop + (call $_memset + (get_local $22) + (i32.const 48) + (i32.add + (get_local $1) + (get_local $45) + ) + ) + ) + (loop $while-in118 + (br_if $while-in118 + (i32.gt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (get_local $22) + ) + ) + ) + ) + ) + ) + (set_local $9 + (i32.sub + (get_local $43) + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (if i32 + (i32.gt_s + (get_local $6) + (get_local $9) + ) + (get_local $9) + (get_local $6) + ) + (get_local $0) + ) + ) + ) + (br_if $while-in114 + (i32.and + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 4) + ) + ) + (get_local $7) + ) + (i32.gt_s + (tee_local $6 + (i32.sub + (get_local $6) + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + ) + (set_local $1 + (get_local $6) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (i32.add + (get_local $1) + (i32.const 18) + ) + (i32.const 18) + (i32.const 0) + ) + (br_if $do-once99 + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (i32.sub + (get_local $31) + (get_local $8) + ) + (get_local $0) + ) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $18) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $18) + (get_local $13) + ) + (set_local $13 + (get_local $18) + ) + ) + ) + (block + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (tee_local $6 + (i32.add + (if i32 + (tee_local $8 + (i32.or + (f64.ne + (get_local $19) + (get_local $19) + ) + (i32.const 0) + ) + ) + (tee_local $26 + (i32.const 0) + ) + (get_local $26) + ) + (i32.const 3) + ) + ) + (get_local $7) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + (block + (drop + (call $___fwritex + (get_local $28) + (get_local $26) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $5 + (i32.ne + (i32.and + (get_local $9) + (i32.const 32) + ) + (i32.const 0) + ) + ) + (if + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (if i32 + (get_local $8) + (if i32 + (get_local $5) + (i32.const 17729) + (i32.const 17733) + ) + (if i32 + (get_local $5) + (i32.const 17721) + (i32.const 17725) + ) + ) + (i32.const 3) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $6) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (if + (i32.ge_s + (get_local $6) + (get_local $13) + ) + (set_local $13 + (get_local $6) + ) + ) + ) + ) + ) + (set_local $6 + (get_local $13) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $9 + (get_local $5) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (set_local $6 + (get_local $24) + ) + (br $__rjto$8) + ) + (set_local $8 + (i32.and + (get_local $9) + (i32.const 32) + ) + ) + (if + (i32.and + (i32.eqz + (tee_local $10 + (i32.load + (tee_local $6 + (get_local $17) + ) + ) + ) + ) + (i32.eqz + (tee_local $7 + (i32.load offset=4 + (get_local $6) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $24) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$8) + ) + (block + (set_local $6 + (get_local $24) + ) + (loop $while-in123 + (i32.store8 + (tee_local $6 + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $10) + (i32.const 15) + ) + (i32.const 15777) + ) + ) + (get_local $8) + ) + ) + (br_if $while-in123 + (i32.eqz + (i32.and + (i32.eqz + (tee_local $10 + (call $_bitshift64Lshr + (get_local $10) + (get_local $7) + (i32.const 4) + ) + ) + ) + (i32.eqz + (tee_local $7 + (get_global $tempRet0) + ) + ) + ) + ) + ) + ) + (if + (i32.or + (i32.eqz + (i32.and + (get_local $1) + (i32.const 8) + ) + ) + (i32.and + (i32.eqz + (i32.load + (tee_local $10 + (get_local $17) + ) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $10) + ) + ) + ) + ) + (block + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (br $__rjti$8) + ) + (block + (set_local $7 + (i32.const 2) + ) + (set_local $8 + (i32.add + (i32.shr_s + (get_local $9) + (i32.const 4) + ) + (i32.const 15793) + ) + ) + (br $__rjti$8) + ) + ) + ) + ) + (br $__rjto$8) + ) + (set_local $6 + (call $_fmt_u + (get_local $1) + (get_local $6) + (get_local $24) + ) + ) + (set_local $1 + (get_local $10) + ) + (br $__rjti$8) + ) + (set_local $1 + (get_local $6) + ) + (set_local $10 + (get_local $7) + ) + (set_local $9 + (if i32 + (tee_local $14 + (i32.eqz + (tee_local $12 + (call $_memchr + (get_local $6) + (i32.const 0) + (get_local $5) + ) + ) + ) + ) + (get_local $5) + (i32.sub + (get_local $12) + (get_local $6) + ) + ) + ) + (set_local $7 + (i32.const 0) + ) + (set_local $8 + (i32.const 15793) + ) + (set_local $6 + (if i32 + (get_local $14) + (i32.add + (get_local $6) + (get_local $5) + ) + (get_local $12) + ) + ) + (br $__rjto$8) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $5 + (i32.const 0) + ) + (set_local $8 + (get_local $6) + ) + (loop $while-in125 + (block $while-out124 + (br_if $while-out124 + (i32.eqz + (tee_local $9 + (i32.load + (get_local $8) + ) + ) + ) + ) + (br_if $while-out124 + (i32.or + (i32.lt_s + (tee_local $5 + (call $_wctomb + (get_local $38) + (get_local $9) + ) + ) + (i32.const 0) + ) + (i32.gt_u + (get_local $5) + (i32.sub + (get_local $7) + (get_local $1) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $7) + (tee_local $1 + (i32.add + (get_local $5) + (get_local $1) + ) + ) + ) + (block + (set_local $8 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + (br $while-in125) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $5) + (i32.const 0) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L1) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $1) + (get_local $10) + ) + (if + (get_local $1) + (block + (set_local $5 + (i32.const 0) + ) + (loop $while-in127 + (br_if $__rjti$7 + (i32.eqz + (tee_local $7 + (i32.load + (get_local $6) + ) + ) + ) + ) + (br_if $__rjti$7 + (i32.gt_s + (tee_local $5 + (i32.add + (tee_local $7 + (call $_wctomb + (get_local $38) + (get_local $7) + ) + ) + (get_local $5) + ) + ) + (get_local $1) + ) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $38) + (get_local $7) + (get_local $0) + ) + ) + ) + (br_if $__rjti$7 + (i32.ge_u + (get_local $5) + (get_local $1) + ) + ) + (set_local $6 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + (br $while-in127) + ) + ) + (block + (set_local $1 + (i32.const 0) + ) + (br $__rjti$7) + ) + ) + (br $__rjto$8) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $13) + (get_local $1) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (set_local $6 + (if i32 + (i32.gt_s + (get_local $13) + (get_local $1) + ) + (get_local $13) + (get_local $1) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + (set_local $10 + (if i32 + (i32.gt_s + (get_local $5) + (i32.const -1) + ) + (i32.and + (get_local $1) + (i32.const -65537) + ) + (get_local $1) + ) + ) + (set_local $6 + (if i32 + (i32.or + (get_local $5) + (tee_local $9 + (i32.or + (i32.ne + (i32.load + (tee_local $1 + (get_local $17) + ) + ) + (i32.const 0) + ) + (i32.ne + (i32.load offset=4 + (get_local $1) + ) + (i32.const 0) + ) + ) + ) + ) + (block i32 + (set_local $1 + (get_local $6) + ) + (set_local $9 + (if i32 + (i32.gt_s + (get_local $5) + (tee_local $6 + (i32.add + (i32.xor + (get_local $9) + (i32.const 1) + ) + (i32.sub + (get_local $40) + (get_local $6) + ) + ) + ) + ) + (get_local $5) + (get_local $6) + ) + ) + (get_local $24) + ) + (block i32 + (set_local $1 + (get_local $24) + ) + (set_local $9 + (i32.const 0) + ) + (get_local $24) + ) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (tee_local $6 + (if i32 + (i32.lt_s + (get_local $13) + (tee_local $5 + (i32.add + (get_local $7) + (if i32 + (i32.lt_s + (get_local $9) + (tee_local $12 + (i32.sub + (get_local $6) + (get_local $1) + ) + ) + ) + (tee_local $9 + (get_local $12) + ) + (get_local $9) + ) + ) + ) + ) + (get_local $5) + (get_local $13) + ) + ) + (get_local $5) + (get_local $10) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $8) + (get_local $7) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 65536) + ) + ) + (call $_pad + (get_local $0) + (i32.const 48) + (get_local $9) + (get_local $12) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (drop + (call $___fwritex + (get_local $1) + (get_local $12) + (get_local $0) + ) + ) + ) + (call $_pad + (get_local $0) + (i32.const 32) + (get_local $6) + (get_local $5) + (i32.xor + (get_local $10) + (i32.const 8192) + ) + ) + (set_local $1 + (get_local $11) + ) + (br $label$continue$L1) + ) + ) + (br $label$break$L345) + ) + (if + (i32.eqz + (get_local $0) + ) + (if + (get_local $16) + (block + (set_local $0 + (i32.const 1) + ) + (loop $while-in130 + (if + (tee_local $1 + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + ) + (block + (call $_pop_arg + (i32.add + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + (get_local $1) + (get_local $2) + ) + (br_if $while-in130 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $15 + (i32.const 1) + ) + (br $label$break$L345) + ) + ) + ) + (if + (i32.lt_s + (get_local $0) + (i32.const 10) + ) + (loop $while-in132 + (if + (i32.load + (i32.add + (get_local $4) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (block + (set_local $15 + (i32.const -1) + ) + (br $label$break$L345) + ) + ) + (br_if $while-in132 + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 10) + ) + ) + (set_local $15 + (i32.const 1) + ) + ) + (set_local $15 + (i32.const 1) + ) + ) + ) + (set_local $15 + (i32.const 0) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $25) + ) + (get_local $15) + ) + (func $_deflate (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 5) + ) + (i32.eqz + (tee_local $6 + (i32.load + (tee_local $19 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (block $do-once + (if + (i32.load + (tee_local $15 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (block + (if + (i32.eqz + (i32.load + (get_local $0) + ) + ) + (br_if $do-once + (i32.load offset=4 + (get_local $0) + ) + ) + ) + (if + (i32.eqz + (i32.and + (tee_local $26 + (i32.ne + (get_local $1) + (i32.const 4) + ) + ) + (i32.eq + (tee_local $2 + (i32.load + (tee_local $17 + (i32.add + (get_local $6) + (i32.const 4) + ) + ) + ) + ) + (i32.const 666) + ) + ) + ) + (block + (if + (i32.eqz + (i32.load + (tee_local $14 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (block + (i32.store offset=24 + (get_local $0) + (i32.load + (i32.const 9972) + ) + ) + (return + (i32.const -5) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $0) + ) + (set_local $12 + (i32.load + (tee_local $25 + (i32.add + (get_local $6) + (i32.const 40) + ) + ) + ) + ) + (i32.store + (get_local $25) + (get_local $1) + ) + (block $do-once13 + (block $__rjti$10 + (block $__rjti$9 + (block $__rjti$8 + (block $__rjti$7 + (block $__rjti$6 + (block $__rjti$5 + (block $__rjti$4 + (block $__rjti$3 + (br_if $__rjti$3 + (i32.ne + (get_local $2) + (i32.const 42) + ) + ) + (if + (i32.ne + (i32.load offset=24 + (get_local $6) + ) + (i32.const 2) + ) + (block + (set_local $2 + (i32.add + (i32.shl + (i32.load offset=48 + (get_local $6) + ) + (i32.const 12) + ) + (i32.const -30720) + ) + ) + (set_local $2 + (i32.or + (tee_local $3 + (if i32 + (i32.gt_s + (i32.load offset=136 + (get_local $6) + ) + (i32.const 1) + ) + (i32.const 0) + (if i32 + (i32.lt_s + (tee_local $3 + (i32.load offset=132 + (get_local $6) + ) + ) + (i32.const 2) + ) + (i32.const 0) + (if i32 + (i32.lt_s + (get_local $3) + (i32.const 6) + ) + (i32.const 64) + (if i32 + (i32.eq + (get_local $3) + (i32.const 6) + ) + (i32.const 128) + (i32.const 192) + ) + ) + ) + ) + ) + (get_local $2) + ) + ) + (if + (i32.load + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 108) + ) + ) + ) + (set_local $2 + (i32.or + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.store + (get_local $17) + (i32.const 113) + ) + (set_local $3 + (i32.load + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $3 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $3) + ) + (i32.xor + (i32.or + (i32.rem_u + (get_local $2) + (i32.const 31) + ) + (get_local $2) + ) + (i32.const 31) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (if + (i32.load + (get_local $4) + ) + (block + (set_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.shr_u + (get_local $3) + (i32.const 24) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.shr_u + (get_local $3) + (i32.const 16) + ) + ) + (set_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $5) + (call $_adler32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $2 + (i32.load + (get_local $17) + ) + ) + (br $__rjti$3) + ) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (call $_crc32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (set_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (i32.const 31) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const -117) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 8) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 28) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 0) + ) + (set_local $3 + (if i32 + (i32.eq + (tee_local $2 + (i32.load offset=132 + (get_local $6) + ) + ) + (i32.const 9) + ) + (i32.const 2) + (if i32 + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 2) + ) + (i32.const 1) + (i32.gt_s + (i32.load offset=136 + (get_local $6) + ) + (i32.const 1) + ) + ) + (i32.const 4) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (i32.const 3) + ) + (i32.store + (get_local $17) + (i32.const 113) + ) + (br $do-once13) + ) + ) + (set_local $3 + (i32.and + (i32.or + (i32.or + (i32.or + (i32.or + (if i32 + (i32.load offset=44 + (get_local $2) + ) + (i32.const 2) + (i32.const 0) + ) + (i32.ne + (i32.load + (get_local $2) + ) + (i32.const 0) + ) + ) + (if i32 + (i32.load offset=16 + (get_local $2) + ) + (i32.const 4) + (i32.const 0) + ) + ) + (if i32 + (i32.load offset=28 + (get_local $2) + ) + (i32.const 8) + (i32.const 0) + ) + ) + (if i32 + (i32.load offset=36 + (get_local $2) + ) + (i32.const 16) + (i32.const 0) + ) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.and + (i32.load offset=4 + (i32.load + (get_local $5) + ) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.and + (i32.shr_u + (i32.load offset=4 + (i32.load + (get_local $5) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.and + (i32.shr_u + (i32.load offset=4 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.shr_u + (i32.load offset=4 + (i32.load + (get_local $5) + ) + ) + (i32.const 24) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (if i32 + (i32.eq + (tee_local $2 + (i32.load offset=132 + (get_local $6) + ) + ) + (i32.const 9) + ) + (i32.const 2) + (if i32 + (if i32 + (i32.lt_s + (get_local $2) + (i32.const 2) + ) + (i32.const 1) + (i32.gt_s + (i32.load offset=136 + (get_local $6) + ) + (i32.const 1) + ) + ) + (i32.const 4) + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.and + (i32.load offset=12 + (i32.load + (get_local $5) + ) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (if + (i32.load offset=16 + (tee_local $2 + (i32.load + (get_local $5) + ) + ) + ) + (block + (set_local $3 + (i32.and + (i32.load offset=20 + (get_local $2) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $3 + (i32.and + (i32.shr_u + (i32.load offset=20 + (i32.load + (get_local $5) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $7) + (i32.add + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (get_local $3) + ) + (set_local $2 + (i32.load + (get_local $5) + ) + ) + ) + ) + (if + (i32.load offset=44 + (get_local $2) + ) + (i32.store + (get_local $4) + (call $_crc32 + (i32.load + (get_local $4) + ) + (i32.load + (get_local $8) + ) + (i32.load + (get_local $7) + ) + ) + ) + ) + (i32.store offset=32 + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $17) + (i32.const 69) + ) + (br $__rjti$4) + ) + (br_if $__rjti$5 + (i32.ne + (get_local $2) + (i32.const 69) + ) + ) + (set_local $5 + (i32.add + (get_local $6) + (i32.const 28) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=16 + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + ) + ) + (block + (i32.store + (get_local $17) + (i32.const 73) + ) + (set_local $3 + (get_local $5) + ) + (set_local $2 + (get_local $4) + ) + (br $__rjti$6) + ) + ) + (set_local $2 + (i32.load + (tee_local $13 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (set_local $2 + (if i32 + (i32.load offset=44 + (tee_local $3 + (block $label$break$L53 i32 + (if i32 + (i32.lt_u + (tee_local $3 + (i32.load + (tee_local $11 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + ) + ) + (i32.and + (i32.load offset=20 + (get_local $4) + ) + (i32.const 65535) + ) + ) + (block i32 + (set_local $16 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (set_local $20 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $8 + (get_local $2) + ) + (loop $while-in + (block $while-out + (set_local $3 + (if i32 + (i32.eq + (get_local $8) + (i32.load + (get_local $16) + ) + ) + (block i32 + (if + (i32.and + (i32.gt_u + (get_local $8) + (get_local $2) + ) + (i32.ne + (i32.load offset=44 + (get_local $4) + ) + (i32.const 0) + ) + ) + (i32.store + (get_local $18) + (call $_crc32 + (i32.load + (get_local $18) + ) + (i32.add + (i32.load + (get_local $20) + ) + (get_local $2) + ) + (i32.sub + (get_local $8) + (get_local $2) + ) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (get_local $14) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $9) + (i32.add + (i32.load + (get_local $9) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $14) + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (br_if $while-out + (i32.eq + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.load + (get_local $16) + ) + ) + ) + (set_local $7 + (i32.load + (get_local $5) + ) + ) + (set_local $4 + (i32.load + (get_local $11) + ) + ) + (get_local $2) + ) + (block i32 + (set_local $7 + (get_local $4) + ) + (set_local $4 + (get_local $3) + ) + (get_local $8) + ) + ) + ) + (set_local $4 + (i32.load8_s + (i32.add + (i32.load offset=16 + (get_local $7) + ) + (get_local $4) + ) + ) + ) + (i32.store + (get_local $13) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $3) + ) + (get_local $4) + ) + (i32.store + (get_local $11) + (tee_local $3 + (i32.add + (i32.load + (get_local $11) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.ge_u + (get_local $3) + (i32.and + (i32.load offset=20 + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 65535) + ) + ) + (br $label$break$L53 + (get_local $4) + ) + (block + (set_local $8 + (i32.load + (get_local $13) + ) + ) + (br $while-in) + ) + ) + ) + ) + (i32.load + (get_local $5) + ) + ) + (get_local $4) + ) + ) + ) + ) + (if i32 + (i32.gt_u + (tee_local $4 + (i32.load + (get_local $13) + ) + ) + (get_local $2) + ) + (block i32 + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (call $_crc32 + (i32.load + (get_local $3) + ) + (i32.add + (i32.load offset=8 + (get_local $6) + ) + (get_local $2) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + ) + (i32.load + (get_local $5) + ) + ) + (get_local $3) + ) + (get_local $3) + ) + ) + (if + (i32.eq + (i32.load + (get_local $11) + ) + (i32.load offset=20 + (get_local $2) + ) + ) + (block + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $17) + (i32.const 73) + ) + (set_local $3 + (get_local $5) + ) + (br $__rjti$6) + ) + (block + (set_local $2 + (i32.load + (get_local $17) + ) + ) + (br $__rjti$5) + ) + ) + (br $do-once13) + ) + (br_if $__rjti$7 + (i32.ne + (get_local $2) + (i32.const 73) + ) + ) + (set_local $3 + (tee_local $2 + (i32.add + (get_local $6) + (i32.const 28) + ) + ) + ) + (set_local $2 + (i32.load + (get_local $2) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=28 + (get_local $2) + ) + ) + (block + (i32.store + (get_local $17) + (i32.const 91) + ) + (br $__rjti$8) + ) + ) + (set_local $20 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (set_local $16 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $18 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $4 + (tee_local $2 + (i32.load + (tee_local $13 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + ) + (loop $while-in8 + (block $while-out7 + (if + (i32.eq + (get_local $4) + (i32.load + (get_local $20) + ) + ) + (block + (if + (if i32 + (i32.gt_u + (get_local $4) + (get_local $2) + ) + (i32.load offset=44 + (i32.load + (get_local $3) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $11) + (call $_crc32 + (i32.load + (get_local $11) + ) + (i32.add + (i32.load + (get_local $16) + ) + (get_local $2) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $4 + (i32.load offset=20 + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (get_local $14) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $4) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $9) + (i32.add + (i32.load + (get_local $9) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $14) + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $2) + ) + ) + (set_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $5) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $5) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.load + (get_local $20) + ) + ) + (block + (set_local $5 + (i32.const 1) + ) + (br $while-out7) + ) + (set_local $4 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $18) + (i32.add + (tee_local $5 + (i32.load + (get_local $18) + ) + ) + (i32.const 1) + ) + ) + (set_local $5 + (i32.load8_s + (i32.add + (i32.load offset=28 + (i32.load + (get_local $3) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store + (get_local $13) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $16) + ) + (get_local $4) + ) + (get_local $5) + ) + (if + (get_local $5) + (block + (set_local $4 + (i32.load + (get_local $13) + ) + ) + (br $while-in8) + ) + (set_local $5 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + ) + ) + ) + (if + (i32.load offset=44 + (i32.load + (get_local $3) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.load + (get_local $13) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $11) + (call $_crc32 + (i32.load + (get_local $11) + ) + (i32.add + (i32.load + (get_local $16) + ) + (get_local $2) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + ) + ) + ) + (if + (get_local $5) + (block + (set_local $2 + (i32.load + (get_local $17) + ) + ) + (br $__rjti$7) + ) + (block + (i32.store + (get_local $18) + (i32.const 0) + ) + (i32.store + (get_local $17) + (i32.const 91) + ) + (br $__rjti$8) + ) + ) + (br $do-once13) + ) + (br_if $__rjti$9 + (i32.ne + (get_local $2) + (i32.const 91) + ) + ) + (set_local $3 + (i32.add + (get_local $6) + (i32.const 28) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + ) + (block + (i32.store + (get_local $17) + (i32.const 103) + ) + (br $__rjti$10) + ) + ) + (set_local $18 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + (set_local $16 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (set_local $20 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 32) + ) + ) + (set_local $4 + (tee_local $2 + (i32.load + (tee_local $13 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + ) + (loop $while-in12 + (block $while-out11 + (if + (i32.eq + (get_local $4) + (i32.load + (get_local $18) + ) + ) + (block + (if + (if i32 + (i32.gt_u + (get_local $4) + (get_local $2) + ) + (i32.load offset=44 + (i32.load + (get_local $3) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $11) + (call $_crc32 + (i32.load + (get_local $11) + ) + (i32.add + (i32.load + (get_local $16) + ) + (get_local $2) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $4 + (i32.load offset=20 + (tee_local $5 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (get_local $14) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $4) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $20) + (i32.add + (i32.load + (get_local $20) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $14) + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $2) + ) + ) + (set_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $5) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $5) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (if + (i32.eq + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.load + (get_local $18) + ) + ) + (block + (set_local $5 + (i32.const 1) + ) + (br $while-out11) + ) + (set_local $4 + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (tee_local $5 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (set_local $5 + (i32.load8_s + (i32.add + (i32.load offset=36 + (i32.load + (get_local $3) + ) + ) + (get_local $5) + ) + ) + ) + (i32.store + (get_local $13) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $16) + ) + (get_local $4) + ) + (get_local $5) + ) + (if + (get_local $5) + (block + (set_local $4 + (i32.load + (get_local $13) + ) + ) + (br $while-in12) + ) + (set_local $5 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + ) + ) + ) + (if + (i32.load offset=44 + (i32.load + (get_local $3) + ) + ) + (if + (i32.gt_u + (tee_local $4 + (i32.load + (get_local $13) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $11) + (call $_crc32 + (i32.load + (get_local $11) + ) + (i32.add + (i32.load + (get_local $16) + ) + (get_local $2) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + ) + ) + ) + (if + (get_local $5) + (block + (set_local $2 + (i32.load + (get_local $17) + ) + ) + (br $__rjti$9) + ) + (block + (i32.store + (get_local $17) + (i32.const 103) + ) + (br $__rjti$10) + ) + ) + (br $do-once13) + ) + (if + (i32.eq + (get_local $2) + (i32.const 103) + ) + (block + (set_local $3 + (i32.add + (get_local $6) + (i32.const 28) + ) + ) + (br $__rjti$10) + ) + ) + (br $do-once13) + ) + (if + (i32.eqz + (i32.load offset=44 + (i32.load + (get_local $3) + ) + ) + ) + (block + (i32.store + (get_local $17) + (i32.const 113) + ) + (br $do-once13) + ) + ) + (if + (i32.gt_u + (i32.add + (i32.load + (tee_local $9 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + (i32.const 2) + ) + (i32.load + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 12) + ) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (get_local $14) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $14) + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + ) + (if + (i32.le_u + (i32.add + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + (i32.const 2) + ) + (i32.load + (get_local $5) + ) + ) + (block + (set_local $2 + (i32.and + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (get_local $2) + ) + (set_local $3 + (i32.and + (i32.shr_u + (i32.load + (get_local $5) + ) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $9) + (i32.add + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $3) + ) + (i32.store + (get_local $5) + (call $_crc32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + (i32.store + (get_local $17) + (i32.const 113) + ) + ) + ) + ) + (if + (i32.load + (tee_local $10 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + (block + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (get_local $14) + ) + ) + ) + (tee_local $3 + (get_local $2) + ) + (get_local $3) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $3) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $3) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $7 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $3) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $3) + ) + ) + (i32.store + (get_local $14) + (tee_local $2 + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $3) + ) + ) + ) + (set_local $5 + (i32.load + (tee_local $4 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $5) + (get_local $3) + ) + ) + (if + (i32.eq + (get_local $5) + (get_local $3) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (i32.store + (get_local $25) + (i32.const -1) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.and + (i32.and + (get_local $26) + (i32.ge_s + (get_local $12) + (get_local $1) + ) + ) + (i32.eqz + (i32.load offset=4 + (get_local $0) + ) + ) + ) + (block + (i32.store offset=24 + (get_local $0) + (i32.load + (i32.const 9972) + ) + ) + (return + (i32.const -5) + ) + ) + ) + ) + (set_local $3 + (i32.eqz + (i32.load offset=4 + (get_local $0) + ) + ) + ) + (block $do-once15 + (block $__rjti$12 + (if + (tee_local $2 + (i32.eq + (i32.load + (get_local $17) + ) + (i32.const 666) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (block + (i32.store offset=24 + (get_local $0) + (i32.load + (i32.const 9972) + ) + ) + (return + (i32.const -5) + ) + ) + ) + (br_if $__rjti$12 + (i32.eqz + (get_local $3) + ) + ) + ) + (br_if $__rjti$12 + (i32.eqz + (i32.and + (i32.eqz + (i32.load offset=116 + (get_local $6) + ) + ) + (i32.or + (i32.eqz + (get_local $1) + ) + (get_local $2) + ) + ) + ) + ) + (br $do-once15) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $switch-default + (block $switch-case24 + (block $switch-case + (br_table $switch-case $switch-case24 $switch-default + (i32.sub + (i32.load offset=136 + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + (set_local $22 + (i32.add + (get_local $6) + (i32.const 116) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 96) + ) + ) + (set_local $21 + (i32.add + (get_local $6) + (i32.const 108) + ) + ) + (set_local $11 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 5792) + ) + ) + (set_local $12 + (i32.add + (get_local $6) + (i32.const 5796) + ) + ) + (set_local $7 + (i32.add + (get_local $6) + (i32.const 5784) + ) + ) + (set_local $8 + (i32.add + (get_local $6) + (i32.const 5788) + ) + ) + (set_local $23 + (i32.add + (get_local $6) + (i32.const 92) + ) + ) + (loop $while-in19 + (block $while-out18 + (if + (i32.eqz + (i32.load + (get_local $22) + ) + ) + (block + (call $_fill_window + (get_local $6) + ) + (br_if $while-out18 + (i32.eqz + (i32.load + (get_local $22) + ) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (set_local $3 + (i32.load8_s + (i32.add + (i32.load + (get_local $11) + ) + (i32.load + (get_local $21) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $12) + ) + (i32.shl + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $7) + ) + (get_local $2) + ) + (get_local $3) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $6) + (i32.const 148) + ) + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $3 + (i32.eq + (i32.load + (get_local $13) + ) + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $22) + (i32.add + (i32.load + (get_local $22) + ) + (i32.const -1) + ) + ) + (i32.store + (get_local $21) + (tee_local $2 + (i32.add + (i32.load + (get_local $21) + ) + (i32.const 1) + ) + ) + ) + (br_if $while-in19 + (i32.eqz + (get_local $3) + ) + ) + (call $__tr_flush_block + (get_local $6) + (tee_local $3 + (if i32 + (i32.gt_s + (tee_local $4 + (i32.load + (get_local $23) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (i32.const 0) + ) + ) + (i32.sub + (get_local $2) + (get_local $4) + ) + (i32.const 0) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $21) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $16 + (i32.load + (get_local $6) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $18 + (i32.add + (get_local $16) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $16) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $20 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $16) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $18) + (i32.sub + (i32.load + (get_local $18) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $20) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $20) + ) + ) + ) + ) + ) + (br_if $while-in19 + (i32.load offset=16 + (i32.load + (get_local $6) + ) + ) + ) + (br $__rjto$2) + ) + ) + (if + (get_local $1) + (block + (call $__tr_flush_block + (get_local $6) + (tee_local $2 + (if i32 + (i32.gt_s + (tee_local $3 + (i32.load + (get_local $23) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $21) + ) + (get_local $3) + ) + (tee_local $12 + (i32.eq + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $23) + (i32.load + (get_local $21) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $7) + (i32.sub + (i32.load + (get_local $7) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $8) + ) + ) + ) + ) + ) + (if + (i32.load offset=16 + (i32.load + (get_local $6) + ) + ) + (block + (set_local $2 + (if i32 + (get_local $12) + (i32.const 3) + (i32.const 1) + ) + ) + (br $__rjti$2) + ) + (block + (set_local $2 + (if i32 + (get_local $12) + (i32.const 2) + (i32.const 0) + ) + ) + (br $__rjti$2) + ) + ) + ) + ) + (br $__rjto$2) + ) + (set_local $21 + (i32.add + (get_local $6) + (i32.const 116) + ) + ) + (set_local $8 + (i32.eqz + (get_local $1) + ) + ) + (set_local $23 + (i32.add + (get_local $6) + (i32.const 96) + ) + ) + (set_local $24 + (i32.add + (get_local $6) + (i32.const 108) + ) + ) + (set_local $22 + (i32.add + (get_local $6) + (i32.const 5792) + ) + ) + (set_local $18 + (i32.add + (get_local $6) + (i32.const 5796) + ) + ) + (set_local $20 + (i32.add + (get_local $6) + (i32.const 5784) + ) + ) + (set_local $9 + (i32.add + (get_local $6) + (i32.const 5788) + ) + ) + (set_local $11 + (i32.add + (get_local $6) + (i32.const 56) + ) + ) + (set_local $13 + (i32.add + (get_local $6) + (i32.const 92) + ) + ) + (loop $while-in21 + (block $while-out20 + (block $__rjto$1 + (block $__rjti$1 + (if + (i32.lt_u + (tee_local $4 + (i32.load + (get_local $21) + ) + ) + (i32.const 258) + ) + (block + (call $_fill_window + (get_local $6) + ) + (br_if $__rjto$2 + (i32.and + (get_local $8) + (i32.lt_u + (tee_local $4 + (i32.load + (get_local $21) + ) + ) + (i32.const 258) + ) + ) + ) + (br_if $while-out20 + (i32.eqz + (get_local $4) + ) + ) + (i32.store + (get_local $23) + (i32.const 0) + ) + (if + (i32.le_u + (get_local $4) + (i32.const 2) + ) + (block + (set_local $3 + (i32.load + (get_local $24) + ) + ) + (br $__rjti$1) + ) + ) + ) + (i32.store + (get_local $23) + (i32.const 0) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $24) + ) + ) + (if + (i32.eq + (tee_local $12 + (i32.load8_s + (tee_local $2 + (i32.add + (tee_local $5 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.eq + (get_local $12) + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.eq + (get_local $12) + (i32.load8_s offset=1 + (get_local $2) + ) + ) + (block + (set_local $7 + (i32.add + (get_local $5) + (i32.const 258) + ) + ) + (loop $while-in23 + (block $while-out22 + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 5) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 6) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (if + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 7) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $5) + ) + (br $while-out22) + ) + ) + (set_local $5 + (get_local $2) + ) + (br_if $while-out22 + (i32.ne + (get_local $12) + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + ) + (br_if $while-in23 + (if i32 + (i32.lt_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 9) + ) + ) + (get_local $7) + ) + (i32.eq + (get_local $12) + (i32.load8_s + (get_local $5) + ) + ) + (i32.const 0) + ) + ) + (set_local $2 + (get_local $5) + ) + ) + ) + (i32.store + (get_local $23) + (if i32 + (i32.gt_u + (tee_local $2 + (i32.add + (i32.sub + (get_local $2) + (get_local $7) + ) + (i32.const 258) + ) + ) + (get_local $4) + ) + (get_local $4) + (tee_local $4 + (get_local $2) + ) + ) + ) + (br_if $__rjti$1 + (i32.le_u + (get_local $4) + (i32.const 2) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $18) + ) + (i32.shl + (tee_local $2 + (i32.load + (get_local $22) + ) + ) + (i32.const 1) + ) + ) + (i32.const 1) + ) + (i32.store + (get_local $22) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $2) + ) + (tee_local $2 + (i32.add + (get_local $4) + (i32.const 253) + ) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $6) + (i32.shl + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 14815) + ) + ) + (i32.const 256) + ) + (i32.const 2) + ) + ) + (i32.const 152) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $6) + (i32.const 2440) + ) + (i32.shl + (i32.load8_u + (i32.const 14303) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $2 + (i32.eq + (i32.load + (get_local $22) + ) + (i32.add + (i32.load + (get_local $9) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $21) + (i32.sub + (i32.load + (get_local $21) + ) + (tee_local $3 + (i32.load + (get_local $23) + ) + ) + ) + ) + (i32.store + (get_local $24) + (tee_local $3 + (i32.add + (i32.load + (get_local $24) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $23) + (i32.const 0) + ) + ) + (br $__rjti$1) + ) + (br $__rjti$1) + ) + (br $__rjti$1) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + (br $__rjto$1) + ) + (set_local $3 + (i32.load8_s + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $18) + ) + (i32.shl + (tee_local $2 + (i32.load + (get_local $22) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $22) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $2) + ) + (get_local $3) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $6) + (i32.const 148) + ) + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $2 + (i32.eq + (i32.load + (get_local $22) + ) + (i32.add + (i32.load + (get_local $9) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $21) + (i32.add + (i32.load + (get_local $21) + ) + (i32.const -1) + ) + ) + (i32.store + (get_local $24) + (tee_local $3 + (i32.add + (i32.load + (get_local $24) + ) + (i32.const 1) + ) + ) + ) + ) + (br_if $while-in21 + (i32.eqz + (get_local $2) + ) + ) + (call $__tr_flush_block + (get_local $6) + (tee_local $2 + (if i32 + (i32.gt_s + (tee_local $4 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (i32.const 0) + ) + ) + (i32.sub + (get_local $3) + (get_local $4) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $24) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $16 + (i32.load + (get_local $6) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $12 + (i32.add + (get_local $16) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $16) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $16) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $12) + (i32.sub + (i32.load + (get_local $12) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (br_if $while-in21 + (i32.load offset=16 + (i32.load + (get_local $6) + ) + ) + ) + (br $__rjto$2) + ) + ) + (call $__tr_flush_block + (get_local $6) + (tee_local $2 + (if i32 + (i32.gt_s + (tee_local $3 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $24) + ) + (get_local $3) + ) + (tee_local $12 + (i32.eq + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $24) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $9 + (i32.load + (get_local $6) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $7 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $7) + (i32.sub + (i32.load + (get_local $7) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $8) + ) + ) + ) + ) + ) + (if + (i32.load offset=16 + (i32.load + (get_local $6) + ) + ) + (block + (set_local $2 + (if i32 + (get_local $12) + (i32.const 3) + (i32.const 1) + ) + ) + (br $__rjti$2) + ) + (block + (set_local $2 + (if i32 + (get_local $12) + (i32.const 2) + (i32.const 0) + ) + ) + (br $__rjti$2) + ) + ) + ) + (set_local $2 + (call_indirect $FUNCSIG$iii + (get_local $6) + (get_local $1) + (i32.add + (i32.and + (i32.load + (i32.add + (i32.mul + (i32.load offset=132 + (get_local $6) + ) + (i32.const 12) + ) + (i32.const 9224) + ) + ) + (i32.const 3) + ) + (i32.const 12) + ) + ) + ) + ) + (if + (i32.eq + (i32.or + (get_local $2) + (i32.const 1) + ) + (i32.const 3) + ) + (i32.store + (get_local $17) + (i32.const 666) + ) + ) + (if + (i32.ne + (i32.or + (get_local $2) + (i32.const 2) + ) + (i32.const 2) + ) + (block + (br_if $do-once15 + (i32.ne + (get_local $2) + (i32.const 1) + ) + ) + (block $switch25 + (block $switch-default28 + (block $switch-case27 + (block $switch-case26 + (br_table $switch-case26 $switch-default28 $switch-default28 $switch-default28 $switch-case27 $switch-default28 + (i32.sub + (get_local $1) + (i32.const 1) + ) + ) + ) + (call $__tr_align + (get_local $6) + ) + (br $switch25) + ) + (br $switch25) + ) + (call $__tr_stored_block + (get_local $6) + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (if + (i32.eq + (get_local $1) + (i32.const 3) + ) + (block + (i32.store16 + (i32.add + (tee_local $2 + (i32.load offset=68 + (get_local $6) + ) + ) + (i32.shl + (i32.add + (tee_local $1 + (i32.load offset=76 + (get_local $6) + ) + ) + (i32.const -1) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (drop + (call $_memset + (get_local $2) + (i32.const 0) + (i32.add + (i32.shl + (get_local $1) + (i32.const 1) + ) + (i32.const -2) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=116 + (get_local $6) + ) + ) + (block + (i32.store offset=108 + (get_local $6) + (i32.const 0) + ) + (i32.store offset=92 + (get_local $6) + (i32.const 0) + ) + ) + ) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $2 + (i32.load offset=20 + (tee_local $3 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + ) + (tee_local $2 + (get_local $1) + ) + (get_local $2) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $8 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $14) + (tee_local $1 + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $2) + ) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $8) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $8) + ) + ) + ) + ) + ) + (br_if $do-once15 + (get_local $1) + ) + (i32.store + (get_local $25) + (i32.const -1) + ) + (return + (i32.const 0) + ) + ) + ) + ) + (if + (i32.load + (get_local $14) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (get_local $25) + (i32.const -1) + ) + (return + (i32.const 0) + ) + ) + (if + (get_local $26) + (return + (i32.const 0) + ) + ) + (if + (i32.lt_s + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $6) + (i32.const 24) + ) + ) + ) + ) + (i32.const 1) + ) + (return + (i32.const 1) + ) + ) + (set_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $8 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.and + (i32.shr_u + (i32.load + (get_local $4) + ) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.and + (i32.shr_u + (i32.load + (get_local $4) + ) + (i32.const 16) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.shr_u + (i32.load + (get_local $4) + ) + (i32.const 24) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.and + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.and + (i32.shr_u + (i32.load + (get_local $3) + ) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.and + (i32.shr_u + (i32.load + (get_local $3) + ) + (i32.const 16) + ) + (i32.const 255) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.shr_u + (i32.load + (get_local $3) + ) + (i32.const 24) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (get_local $2) + ) + ) + (block + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (i32.shr_u + (get_local $2) + (i32.const 24) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $3) + ) + (get_local $1) + ) + (i32.shr_u + (get_local $2) + (i32.const 16) + ) + ) + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $3) + ) + (get_local $1) + ) + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (i32.store + (get_local $10) + (i32.add + (tee_local $1 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $3) + ) + (get_local $1) + ) + (get_local $2) + ) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $2 + (i32.load offset=20 + (tee_local $3 + (i32.load + (get_local $19) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + ) + (get_local $1) + (tee_local $1 + (get_local $2) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $15) + ) + (i32.load offset=16 + (get_local $3) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $15) + (i32.add + (i32.load + (get_local $15) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (tee_local $4 + (i32.load + (get_local $19) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $0) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $14) + (i32.sub + (i32.load + (get_local $14) + ) + (get_local $1) + ) + ) + (set_local $2 + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $1) + ) + (i32.store + (get_local $3) + (i32.load offset=8 + (get_local $4) + ) + ) + ) + ) + ) + (if + (i32.gt_s + (tee_local $0 + (i32.load + (get_local $5) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + ) + (return + (i32.eqz + (i32.load + (get_local $10) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=24 + (get_local $0) + (i32.load + (i32.const 9960) + ) + ) + (i32.const -2) + ) + (func $_build_tree (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (set_local $19 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (set_local $21 + (get_local $19) + ) + (set_local $9 + (i32.load + (get_local $1) + ) + ) + (set_local $5 + (i32.load + (tee_local $2 + (i32.load + (tee_local $17 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + ) + ) + (set_local $6 + (i32.load offset=12 + (get_local $2) + ) + ) + (i32.store + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 5200) + ) + ) + (i32.const 0) + ) + (i32.store + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 5204) + ) + ) + (i32.const 573) + ) + (block $__rjto$0 + (block $__rjti$0 + (if + (i32.gt_s + (get_local $6) + (i32.const 0) + ) + (block + (set_local $2 + (i32.const -1) + ) + (set_local $4 + (i32.const 0) + ) + (loop $while-in + (if + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (block + (i32.store + (get_local $10) + (tee_local $2 + (i32.add + (i32.load + (get_local $10) + ) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $4) + ) + (i32.store8 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $4) + ) + (i32.const 0) + ) + (set_local $2 + (get_local $4) + ) + ) + (i32.store16 offset=2 + (i32.add + (get_local $9) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.const 0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $6) + ) + ) + (set_local $4 + (get_local $2) + ) + ) + (br_if $__rjti$0 + (i32.lt_s + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.const 2) + ) + ) + (set_local $13 + (get_local $4) + ) + ) + (block + (set_local $2 + (i32.const 0) + ) + (set_local $4 + (i32.const -1) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$0) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 5800) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 5804) + ) + ) + (if + (get_local $5) + (loop $while-in3 + (set_local $3 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $11 + (i32.lt_s + (get_local $4) + (i32.const 2) + ) + ) + (set_local $4 + (get_local $3) + ) + ) + (i32.store + (get_local $10) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (if i32 + (get_local $11) + (get_local $3) + (tee_local $3 + (i32.const 0) + ) + ) + ) + (i32.store16 + (i32.add + (get_local $9) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.store8 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $3) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.add + (i32.load + (get_local $13) + ) + (i32.const -1) + ) + ) + (i32.store + (get_local $7) + (i32.sub + (i32.load + (get_local $7) + ) + (i32.load16_u offset=2 + (i32.add + (get_local $5) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + (br_if $while-in3 + (i32.lt_s + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.const 2) + ) + ) + (set_local $13 + (get_local $4) + ) + ) + (loop $while-in1 + (set_local $3 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (if + (tee_local $5 + (i32.lt_s + (get_local $4) + (i32.const 2) + ) + ) + (set_local $4 + (get_local $3) + ) + ) + (i32.store + (get_local $10) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (if i32 + (get_local $5) + (get_local $3) + (tee_local $3 + (i32.const 0) + ) + ) + ) + (i32.store16 + (i32.add + (get_local $9) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.store8 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $3) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.add + (i32.load + (get_local $13) + ) + (i32.const -1) + ) + ) + (br_if $while-in1 + (i32.lt_s + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.const 2) + ) + ) + (set_local $13 + (get_local $4) + ) + ) + ) + ) + (i32.store + (tee_local $18 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (get_local $13) + ) + (set_local $3 + (get_local $2) + ) + (set_local $5 + (i32.div_s + (get_local $2) + (i32.const 2) + ) + ) + (loop $while-in5 + (set_local $12 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (tee_local $11 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (block $label$break$L19 + (if + (i32.gt_s + (tee_local $2 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (get_local $3) + ) + (set_local $4 + (get_local $5) + ) + (block + (set_local $15 + (i32.add + (get_local $9) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + (set_local $4 + (get_local $5) + ) + (set_local $7 + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + (loop $while-in7 + (block $do-once + (if + (i32.lt_s + (get_local $3) + (get_local $7) + ) + (if + (i32.ge_s + (i32.and + (tee_local $14 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $7 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (tee_local $2 + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $20 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $16 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (block + (if + (i32.ne + (get_local $14) + (get_local $20) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $do-once) + ) + ) + (if + (i32.gt_s + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $7) + ) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $16) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (br_if $label$break$L19 + (i32.lt_s + (i32.and + (tee_local $7 + (i32.load16_s + (get_local $15) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $14 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $3 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (if + (i32.eq + (get_local $7) + (get_local $14) + ) + (br_if $label$break$L19 + (i32.le_s + (i32.load8_u + (get_local $12) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $3) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $3) + ) + (if + (i32.gt_s + (tee_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (tee_local $7 + (i32.load + (get_local $10) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (block + (set_local $4 + (get_local $2) + ) + (br $while-in7) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $11) + ) + (if + (i32.gt_s + (get_local $5) + (i32.const 1) + ) + (block + (set_local $3 + (i32.load + (get_local $10) + ) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (br $while-in5) + ) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 2912) + ) + ) + (set_local $2 + (i32.load + (get_local $10) + ) + ) + (set_local $5 + (get_local $6) + ) + (loop $do-in + (set_local $11 + (i32.load + (get_local $7) + ) + ) + (i32.store + (get_local $10) + (tee_local $6 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $7) + (tee_local $12 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + ) + (set_local $15 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $12) + ) + ) + (block $label$break$L39 + (if + (i32.lt_s + (get_local $2) + (i32.const 3) + ) + (set_local $4 + (i32.const 1) + ) + (block + (set_local $14 + (i32.add + (get_local $9) + (i32.shl + (get_local $12) + (i32.const 2) + ) + ) + ) + (set_local $4 + (i32.const 1) + ) + (set_local $3 + (i32.const 2) + ) + (loop $while-in11 + (block $do-once12 + (if + (i32.lt_s + (get_local $3) + (get_local $6) + ) + (if + (i32.ge_s + (i32.and + (tee_local $16 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $6 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (tee_local $2 + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $22 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $20 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (block + (if + (i32.ne + (get_local $16) + (get_local $22) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $do-once12) + ) + ) + (if + (i32.gt_s + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $6) + ) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $20) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (br_if $label$break$L39 + (i32.lt_s + (i32.and + (tee_local $6 + (i32.load16_s + (get_local $14) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $16 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $3 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $16) + ) + (br_if $label$break$L39 + (i32.le_s + (i32.load8_u + (get_local $15) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $3) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $3) + ) + (if + (i32.gt_s + (tee_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (tee_local $6 + (i32.load + (get_local $10) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (block + (set_local $4 + (get_local $2) + ) + (br $while-in11) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $12) + ) + (set_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.store + (get_local $8) + (tee_local $4 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $11) + ) + (i32.store + (get_local $8) + (tee_local $4 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $2) + ) + (i32.store16 + (tee_local $12 + (i32.add + (get_local $9) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_u + (i32.add + (get_local $9) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + (i32.load16_u + (i32.add + (get_local $9) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + ) + ) + (i32.store8 + (tee_local $15 + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $5) + ) + ) + (i32.add + (i32.and + (if i32 + (i32.lt_s + (i32.and + (tee_local $4 + (i32.load8_s + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $11) + ) + ) + ) + (i32.const 255) + ) + (i32.and + (tee_local $3 + (i32.load8_s + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $2) + ) + ) + ) + (i32.const 255) + ) + ) + (get_local $3) + (get_local $4) + ) + (i32.const 255) + ) + (i32.const 1) + ) + ) + (i32.store16 offset=2 + (i32.add + (get_local $9) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (tee_local $2 + (i32.and + (get_local $5) + (i32.const 65535) + ) + ) + ) + (i32.store16 offset=2 + (i32.add + (get_local $9) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $7) + (get_local $5) + ) + (block $label$break$L55 + (if + (i32.lt_s + (tee_local $6 + (i32.load + (get_local $10) + ) + ) + (i32.const 2) + ) + (set_local $4 + (i32.const 1) + ) + (block + (set_local $4 + (i32.const 1) + ) + (set_local $3 + (i32.const 2) + ) + (loop $while-in16 + (block $do-once17 + (if + (i32.lt_s + (get_local $3) + (get_local $6) + ) + (if + (i32.ge_s + (i32.and + (tee_local $11 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $6 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (tee_local $2 + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $16 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $14 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (block + (if + (i32.ne + (get_local $11) + (get_local $16) + ) + (block + (set_local $2 + (get_local $3) + ) + (br $do-once17) + ) + ) + (if + (i32.gt_s + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $6) + ) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $14) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + ) + ) + (br_if $label$break$L55 + (i32.lt_s + (i32.and + (tee_local $6 + (i32.load16_s + (get_local $12) + ) + ) + (i32.const 65535) + ) + (i32.and + (tee_local $11 + (i32.load16_s + (i32.add + (get_local $9) + (i32.shl + (tee_local $3 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $11) + ) + (br_if $label$break$L55 + (i32.le_s + (i32.load8_u + (get_local $15) + ) + (i32.load8_u + (i32.add + (i32.add + (get_local $0) + (i32.const 5208) + ) + (get_local $3) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $3) + ) + (if + (i32.gt_s + (tee_local $3 + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + (tee_local $6 + (i32.load + (get_local $10) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (block + (set_local $4 + (get_local $2) + ) + (br $while-in16) + ) + ) + ) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $5) + ) + (set_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (br_if $do-in + (i32.gt_s + (tee_local $2 + (i32.load + (get_local $10) + ) + ) + (i32.const 1) + ) + ) + ) + (set_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.store + (get_local $8) + (tee_local $4 + (i32.add + (i32.load + (get_local $8) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (get_local $2) + ) + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (set_local $11 + (i32.load + (get_local $18) + ) + ) + (set_local $12 + (i32.load + (tee_local $1 + (i32.load + (get_local $17) + ) + ) + ) + ) + (set_local $17 + (i32.load offset=4 + (get_local $1) + ) + ) + (set_local $6 + (i32.load offset=8 + (get_local $1) + ) + ) + (set_local $1 + (i32.load offset=16 + (get_local $1) + ) + ) + (set_local $4 + (i32.add + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 2876) + ) + ) + (i32.const 32) + ) + ) + (loop $do-in20 + (i32.store16 + (get_local $2) + (i32.const 0) + ) + (br_if $do-in20 + (i32.lt_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + (get_local $4) + ) + ) + ) + (i32.store16 offset=2 + (i32.add + (get_local $7) + (i32.shl + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (tee_local $2 + (i32.load + (get_local $8) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (block $label$break$L71 + (if + (i32.lt_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 573) + ) + (block + (set_local $10 + (i32.add + (get_local $0) + (i32.const 5800) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 5804) + ) + ) + (if + (get_local $12) + (block + (set_local $4 + (get_local $2) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in25 + (set_local $3 + (if i32 + (tee_local $15 + (i32.lt_s + (tee_local $3 + (i32.load16_u offset=2 + (i32.add + (get_local $7) + (i32.shl + (i32.load16_u + (tee_local $8 + (i32.add + (i32.add + (get_local $7) + (i32.shl + (tee_local $5 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (get_local $1) + ) + ) + (i32.add + (get_local $3) + (i32.const 1) + ) + (get_local $1) + ) + ) + (i32.store16 + (get_local $8) + (get_local $3) + ) + (if + (i32.le_s + (get_local $5) + (get_local $11) + ) + (block + (i32.store16 + (tee_local $8 + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $8) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $10) + (i32.add + (i32.mul + (tee_local $14 + (i32.load16_u + (i32.add + (get_local $7) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + ) + (i32.add + (tee_local $8 + (if i32 + (i32.lt_s + (get_local $5) + (get_local $6) + ) + (i32.const 0) + (i32.load + (i32.add + (get_local $17) + (i32.shl + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (get_local $3) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.store + (get_local $18) + (i32.add + (i32.mul + (i32.add + (i32.load16_u offset=2 + (i32.add + (get_local $12) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (get_local $8) + ) + (get_local $14) + ) + (i32.load + (get_local $18) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (i32.xor + (get_local $15) + (i32.const 1) + ) + (get_local $2) + ) + ) + (br_if $while-in25 + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 573) + ) + ) + ) + ) + (block + (set_local $4 + (get_local $2) + ) + (set_local $2 + (i32.const 0) + ) + (loop $while-in23 + (set_local $3 + (if i32 + (tee_local $12 + (i32.lt_s + (tee_local $3 + (i32.load16_u offset=2 + (i32.add + (get_local $7) + (i32.shl + (i32.load16_u + (tee_local $8 + (i32.add + (i32.add + (get_local $7) + (i32.shl + (tee_local $5 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (get_local $1) + ) + ) + (i32.add + (get_local $3) + (i32.const 1) + ) + (get_local $1) + ) + ) + (i32.store16 + (get_local $8) + (get_local $3) + ) + (if + (i32.le_s + (get_local $5) + (get_local $11) + ) + (block + (i32.store16 + (tee_local $8 + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $8) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $10) + (i32.add + (i32.mul + (i32.load16_u + (i32.add + (get_local $7) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (i32.add + (tee_local $8 + (if i32 + (i32.lt_s + (get_local $5) + (get_local $6) + ) + (i32.const 0) + (i32.load + (i32.add + (get_local $17) + (i32.shl + (i32.sub + (get_local $5) + (get_local $6) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (get_local $3) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + ) + ) + (set_local $2 + (i32.add + (i32.xor + (get_local $12) + (i32.const 1) + ) + (get_local $2) + ) + ) + (br_if $while-in23 + (i32.ne + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.const 573) + ) + ) + ) + ) + ) + (if + (get_local $2) + (block + (set_local $8 + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (set_local $3 + (get_local $2) + ) + (loop $while-in27 + (set_local $2 + (get_local $1) + ) + (loop $while-in29 + (if + (i32.eqz + (tee_local $6 + (i32.load16_s + (tee_local $5 + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $4) + ) + (br $while-in29) + ) + ) + ) + (i32.store16 + (get_local $5) + (i32.add + (get_local $6) + (i32.const -1) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.add + (i32.load16_u + (get_local $2) + ) + (i32.const 2) + ) + ) + (i32.store16 + (get_local $8) + (tee_local $2 + (i32.shr_s + (i32.shl + (i32.add + (i32.load16_s + (get_local $8) + ) + (i32.const -1) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (if + (i32.gt_s + (get_local $3) + (i32.const 2) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const -2) + ) + ) + (br $while-in27) + ) + ) + ) + (if + (get_local $1) + (block + (set_local $4 + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $1 + (i32.const 573) + ) + (loop $while-in31 + (set_local $5 + (i32.and + (get_local $2) + (i32.const 65535) + ) + ) + (if + (i32.and + (get_local $4) + (i32.const 65535) + ) + (block + (set_local $3 + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + (loop $while-in33 + (loop $while-in35 + (br_if $while-in35 + (i32.gt_s + (tee_local $4 + (i32.load + (i32.add + (i32.add + (get_local $0) + (i32.const 2908) + ) + (i32.shl + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (get_local $11) + ) + ) + ) + (if + (i32.ne + (get_local $2) + (tee_local $8 + (i32.load16_u + (tee_local $6 + (i32.add + (i32.add + (get_local $7) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $10) + (i32.add + (i32.mul + (i32.load16_u + (i32.add + (get_local $7) + (i32.shl + (get_local $4) + (i32.const 2) + ) + ) + ) + (i32.sub + (get_local $2) + (get_local $8) + ) + ) + (i32.load + (get_local $10) + ) + ) + ) + (i32.store16 + (get_local $6) + (get_local $5) + ) + ) + ) + (br_if $while-in33 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + ) + ) + (br_if $label$break$L71 + (i32.eqz + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $4 + (i32.load16_u + (i32.add + (i32.add + (get_local $0) + (i32.const 2876) + ) + (i32.shl + (get_local $2) + (i32.const 1) + ) + ) + ) + ) + (br $while-in31) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $1 + (i32.const 1) + ) + (set_local $2 + (i32.const 0) + ) + (loop $do-in37 + (i32.store16 + (i32.add + (get_local $21) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (tee_local $2 + (i32.shl + (i32.add + (i32.load16_u + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 2874) + ) + ) + (i32.and + (get_local $2) + (i32.const 65534) + ) + ) + (i32.const 1) + ) + ) + ) + (br_if $do-in37 + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 16) + ) + ) + ) + (if + (i32.lt_s + (get_local $13) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $19) + ) + (return) + ) + (set_local $2 + (i32.const 0) + ) + ) + (loop $while-in39 + (set_local $0 + (i32.and + (tee_local $1 + (i32.load16_s offset=2 + (i32.add + (get_local $9) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (if + (get_local $1) + (block + (set_local $1 + (i32.load16_s + (tee_local $4 + (i32.add + (get_local $21) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $4) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $4 + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + (set_local $1 + (i32.const 0) + ) + (loop $while-in41 + (set_local $1 + (i32.or + (get_local $1) + (i32.and + (get_local $4) + (i32.const 1) + ) + ) + ) + (if + (i32.gt_s + (get_local $0) + (i32.const 1) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + (set_local $4 + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + ) + (set_local $1 + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in41) + ) + ) + ) + (i32.store16 + (i32.add + (get_local $9) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + (get_local $1) + ) + ) + ) + (if + (i32.ne + (get_local $2) + (get_local $13) + ) + (block + (set_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in39) + ) + ) + ) + (set_global $STACKTOP + (get_local $19) + ) + ) + (func $_inflate_table (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (result i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (set_local $13 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (set_local $10 + (get_local $13) + ) + (set_local $9 + (i32.add + (tee_local $11 + (tee_local $7 + (i32.add + (get_local $13) + (i32.const 32) + ) + ) + ) + (i32.const 32) + ) + ) + (loop $do-in + (i32.store16 + (get_local $11) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 2) + ) + ) + (get_local $9) + ) + ) + ) + (block $label$break$L25 + (block $__rjti$1 + (if + (tee_local $15 + (i32.eqz + (get_local $2) + ) + ) + (set_local $9 + (i32.load + (get_local $4) + ) + ) + (block + (set_local $11 + (i32.const 0) + ) + (loop $do-in1 + (i32.store16 + (tee_local $9 + (i32.add + (get_local $7) + (i32.shl + (i32.load16_u + (i32.add + (get_local $1) + (i32.shl + (get_local $11) + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $9) + ) + (i32.const 1) + ) + ) + (br_if $do-in1 + (i32.ne + (tee_local $11 + (i32.add + (get_local $11) + (i32.const 1) + ) + ) + (get_local $2) + ) + ) + ) + (set_local $9 + (i32.load + (get_local $4) + ) + ) + (if + (tee_local $11 + (i32.load16_s offset=30 + (get_local $7) + ) + ) + (block + (set_local $14 + (i32.const 15) + ) + (br $__rjti$1) + ) + ) + ) + ) + (if + (i32.load16_s offset=28 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 14) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=26 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 13) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=24 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 12) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=22 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 11) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=20 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 10) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=18 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 9) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=16 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 8) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=14 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 7) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=12 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 6) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=10 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 5) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=8 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 4) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=6 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 3) + ) + (br $__rjti$1) + ) + (if + (i32.load16_s offset=4 + (get_local $7) + ) + (block + (set_local $11 + (i32.const 0) + ) + (set_local $14 + (i32.const 2) + ) + (br $__rjti$1) + ) + (block + (if + (i32.load16_s offset=2 + (get_local $7) + ) + (block + (set_local $12 + (i32.const 0) + ) + (set_local $11 + (if i32 + (i32.gt_u + (get_local $9) + (i32.const 1) + ) + (i32.const 1) + (get_local $9) + ) + ) + (set_local $14 + (i32.const 1) + ) + (set_local $9 + (i32.const 1) + ) + (br $label$break$L25) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 4) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 64) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.const 1) + ) + (i32.store16 offset=2 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 4) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 64) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.const 1) + ) + (i32.store16 offset=2 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.const 1) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (br $label$break$L25) + ) + (if + (i32.gt_u + (get_local $9) + (get_local $14) + ) + (set_local $9 + (get_local $14) + ) + ) + (set_local $6 + (i32.const 1) + ) + (loop $while-in + (if + (i32.load16_s + (i32.add + (get_local $7) + (i32.shl + (get_local $6) + (i32.const 1) + ) + ) + ) + (block + (set_local $12 + (get_local $11) + ) + (set_local $11 + (get_local $9) + ) + (set_local $9 + (get_local $6) + ) + (br $label$break$L25) + ) + ) + (br_if $while-in + (i32.lt_u + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (get_local $14) + ) + ) + (set_local $12 + (get_local $11) + ) + (set_local $11 + (get_local $9) + ) + (set_local $9 + (get_local $6) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.const 2) + (i32.and + (tee_local $8 + (i32.load16_s offset=2 + (get_local $7) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=4 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=6 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=8 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=10 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=12 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=14 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=16 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=18 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=20 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=22 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=24 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=26 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.load16_u offset=28 + (get_local $7) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.lt_s + (tee_local $6 + (i32.sub + (i32.shl + (get_local $6) + (i32.const 1) + ) + (i32.and + (get_local $12) + (i32.const 65535) + ) + ) + ) + (i32.const 0) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + (if + (i32.gt_s + (get_local $6) + (i32.const 0) + ) + (if + (i32.or + (i32.eqz + (get_local $0) + ) + (i32.ne + (get_local $14) + (i32.const 1) + ) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const -1) + ) + ) + ) + ) + (i32.store16 offset=2 + (get_local $10) + (i32.const 0) + ) + (i32.store16 offset=4 + (get_local $10) + (get_local $8) + ) + (i32.store16 offset=6 + (get_local $10) + (tee_local $12 + (i32.add + (i32.load16_u offset=4 + (get_local $7) + ) + (i32.and + (get_local $8) + (i32.const 65535) + ) + ) + ) + ) + (i32.store16 offset=8 + (get_local $10) + (i32.add + (tee_local $6 + (i32.load16_u offset=6 + (get_local $7) + ) + ) + (get_local $12) + ) + ) + (i32.store16 offset=10 + (get_local $10) + (i32.add + (tee_local $8 + (i32.load16_u offset=8 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $12) + (get_local $6) + ) + ) + ) + ) + (i32.store16 offset=12 + (get_local $10) + (i32.add + (tee_local $12 + (i32.load16_u offset=10 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (i32.store16 offset=14 + (get_local $10) + (i32.add + (tee_local $8 + (i32.load16_u offset=12 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $12) + ) + ) + ) + ) + (i32.store16 offset=16 + (get_local $10) + (i32.add + (tee_local $12 + (i32.load16_u offset=14 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (i32.store16 offset=18 + (get_local $10) + (i32.add + (tee_local $8 + (i32.load16_u offset=16 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $12) + ) + ) + ) + ) + (i32.store16 offset=20 + (get_local $10) + (i32.add + (tee_local $12 + (i32.load16_u offset=18 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (i32.store16 offset=22 + (get_local $10) + (i32.add + (tee_local $8 + (i32.load16_u offset=20 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $12) + ) + ) + ) + ) + (i32.store16 offset=24 + (get_local $10) + (i32.add + (tee_local $12 + (i32.load16_u offset=22 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (i32.store16 offset=26 + (get_local $10) + (i32.add + (tee_local $8 + (i32.load16_u offset=24 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $12) + ) + ) + ) + ) + (i32.store16 offset=28 + (get_local $10) + (i32.add + (tee_local $12 + (i32.load16_u offset=26 + (get_local $7) + ) + ) + (tee_local $6 + (i32.add + (get_local $6) + (get_local $8) + ) + ) + ) + ) + (i32.store16 offset=30 + (get_local $10) + (i32.add + (i32.load16_u offset=28 + (get_local $7) + ) + (i32.add + (get_local $6) + (get_local $12) + ) + ) + ) + (if + (i32.eqz + (get_local $15) + ) + (block + (set_local $8 + (i32.const 0) + ) + (loop $do-in4 + (if + (tee_local $6 + (i32.load16_s + (i32.add + (get_local $1) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + ) + ) + (block + (set_local $12 + (i32.load16_s + (tee_local $6 + (i32.add + (get_local $10) + (i32.shl + (i32.and + (get_local $6) + (i32.const 65535) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $6) + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (i32.store16 + (i32.add + (get_local $5) + (i32.shl + (i32.and + (get_local $12) + (i32.const 65535) + ) + (i32.const 1) + ) + ) + (get_local $8) + ) + ) + ) + (br_if $do-in4 + (i32.ne + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + (get_local $2) + ) + ) + ) + ) + ) + (set_local $12 + (if i32 + (i32.lt_u + (get_local $11) + (get_local $9) + ) + (get_local $9) + (get_local $11) + ) + ) + (block $switch + (block $switch-default + (block $switch-case5 + (block $switch-case + (br_table $switch-case $switch-case5 $switch-default + (get_local $0) + ) + ) + (set_local $20 + (i32.const 0) + ) + (set_local $21 + (i32.const 0) + ) + (set_local $22 + (get_local $5) + ) + (set_local $19 + (i32.const 19) + ) + (set_local $23 + (get_local $5) + ) + (br $switch) + ) + (if + (i32.gt_u + (get_local $12) + (i32.const 9) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 1) + ) + ) + (block + (set_local $20 + (i32.const 0) + ) + (set_local $21 + (i32.const 1) + ) + (set_local $22 + (i32.const 11868) + ) + (set_local $19 + (i32.const 256) + ) + (set_local $23 + (i32.const 11994) + ) + ) + ) + (br $switch) + ) + (if + (i32.and + (tee_local $0 + (i32.eq + (get_local $0) + (i32.const 2) + ) + ) + (i32.gt_u + (get_local $12) + (i32.const 9) + ) + ) + (block + (set_global $STACKTOP + (get_local $13) + ) + (return + (i32.const 1) + ) + ) + (block + (set_local $20 + (get_local $0) + ) + (set_local $21 + (i32.const 0) + ) + (set_local $22 + (i32.const 12318) + ) + (set_local $19 + (i32.const -1) + ) + (set_local $23 + (i32.const 12444) + ) + ) + ) + ) + (set_local $25 + (i32.add + (tee_local $11 + (i32.shl + (i32.const 1) + (get_local $12) + ) + ) + (i32.const -1) + ) + ) + (set_local $26 + (i32.and + (get_local $12) + (i32.const 255) + ) + ) + (set_local $15 + (get_local $12) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $8 + (i32.const 0) + ) + (set_local $0 + (get_local $9) + ) + (set_local $17 + (i32.const -1) + ) + (set_local $16 + (i32.load + (get_local $3) + ) + ) + (set_local $10 + (i32.const 0) + ) + (block $__rjto$2 + (block $__rjti$2 + (loop $label$continue$L93 + (block $label$break$L93 + (set_local $27 + (i32.shl + (i32.const 1) + (get_local $15) + ) + ) + (set_local $2 + (get_local $8) + ) + (set_local $9 + (get_local $10) + ) + (loop $while-in7 + (set_local $15 + (i32.and + (tee_local $8 + (i32.sub + (get_local $0) + (get_local $6) + ) + ) + (i32.const 255) + ) + ) + (set_local $18 + (block $do-once8 i32 + (if i32 + (i32.lt_s + (tee_local $18 + (i32.and + (tee_local $10 + (i32.load16_s + (i32.add + (get_local $5) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (get_local $19) + ) + (block i32 + (set_local $24 + (i32.const 0) + ) + (get_local $10) + ) + (block i32 + (if + (i32.le_s + (get_local $18) + (get_local $19) + ) + (block + (set_local $24 + (i32.const 96) + ) + (br $do-once8 + (i32.const 0) + ) + ) + ) + (set_local $24 + (i32.and + (i32.load16_s + (i32.add + (get_local $23) + (i32.shl + (get_local $18) + (i32.const 1) + ) + ) + ) + (i32.const 255) + ) + ) + (i32.load16_s + (i32.add + (get_local $22) + (i32.shl + (get_local $18) + (i32.const 1) + ) + ) + ) + ) + ) + ) + ) + (set_local $28 + (i32.shl + (i32.const 1) + (get_local $8) + ) + ) + (set_local $30 + (i32.shr_u + (get_local $2) + (get_local $6) + ) + ) + (set_local $10 + (get_local $27) + ) + (loop $do-in11 + (set_local $8 + (get_local $10) + ) + (i32.store8 + (i32.add + (get_local $16) + (i32.shl + (tee_local $29 + (i32.add + (tee_local $10 + (i32.sub + (get_local $10) + (get_local $28) + ) + ) + (get_local $30) + ) + ) + (i32.const 2) + ) + ) + (get_local $24) + ) + (i32.store8 offset=1 + (i32.add + (get_local $16) + (i32.shl + (get_local $29) + (i32.const 2) + ) + ) + (get_local $15) + ) + (i32.store16 offset=2 + (i32.add + (get_local $16) + (i32.shl + (get_local $29) + (i32.const 2) + ) + ) + (get_local $18) + ) + (br_if $do-in11 + (i32.ne + (get_local $8) + (get_local $28) + ) + ) + ) + (set_local $10 + (i32.shl + (i32.const 1) + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + ) + (loop $while-in13 + (if + (i32.and + (get_local $10) + (get_local $2) + ) + (block + (set_local $10 + (i32.shr_u + (get_local $10) + (i32.const 1) + ) + ) + (br $while-in13) + ) + ) + ) + (set_local $2 + (if i32 + (get_local $10) + (i32.add + (i32.and + (i32.add + (get_local $10) + (i32.const -1) + ) + (get_local $2) + ) + (get_local $10) + ) + (i32.const 0) + ) + ) + (set_local $9 + (i32.add + (get_local $9) + (i32.const 1) + ) + ) + (set_local $8 + (i32.shr_s + (i32.shl + (i32.add + (i32.load16_s + (tee_local $10 + (i32.add + (get_local $7) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (i32.const -1) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + (i32.store16 + (get_local $10) + (get_local $8) + ) + (if + (i32.eqz + (get_local $8) + ) + (block + (if + (i32.eq + (get_local $0) + (get_local $14) + ) + (block + (set_local $1 + (get_local $15) + ) + (set_local $5 + (get_local $6) + ) + (set_local $9 + (get_local $2) + ) + (set_local $0 + (get_local $16) + ) + (br $label$break$L93) + ) + ) + (set_local $0 + (i32.load16_u + (i32.add + (get_local $1) + (i32.shl + (i32.load16_u + (i32.add + (get_local $5) + (i32.shl + (get_local $9) + (i32.const 1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (br_if $while-in7 + (i32.le_u + (get_local $0) + (get_local $12) + ) + ) + (br_if $while-in7 + (i32.eq + (tee_local $8 + (i32.and + (get_local $2) + (get_local $25) + ) + ) + (get_local $17) + ) + ) + (set_local $10 + (get_local $9) + ) + (set_local $17 + (get_local $8) + ) + (set_local $9 + (get_local $2) + ) + (set_local $2 + (get_local $0) + ) + ) + (set_local $16 + (i32.add + (get_local $16) + (i32.shl + (get_local $27) + (i32.const 2) + ) + ) + ) + (set_local $8 + (i32.sub + (get_local $2) + (if i32 + (get_local $6) + (get_local $6) + (tee_local $6 + (get_local $12) + ) + ) + ) + ) + (block $label$break$L116 + (if + (i32.lt_u + (get_local $2) + (get_local $14) + ) + (block + (set_local $15 + (get_local $2) + ) + (set_local $0 + (get_local $8) + ) + (set_local $8 + (i32.shl + (i32.const 1) + (get_local $8) + ) + ) + (loop $while-in16 + (br_if $label$break$L116 + (i32.lt_s + (tee_local $8 + (i32.sub + (get_local $8) + (i32.load16_u + (i32.add + (get_local $7) + (i32.shl + (get_local $15) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (if + (i32.lt_u + (tee_local $15 + (i32.add + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $6) + ) + ) + (get_local $14) + ) + (block + (set_local $8 + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + (br $while-in16) + ) + ) + ) + ) + (set_local $0 + (get_local $8) + ) + ) + ) + (if + (i32.or + (i32.and + (get_local $21) + (i32.gt_u + (tee_local $11 + (i32.add + (i32.shl + (i32.const 1) + (get_local $0) + ) + (get_local $11) + ) + ) + (i32.const 851) + ) + ) + (i32.and + (get_local $20) + (i32.gt_u + (get_local $11) + (i32.const 591) + ) + ) + ) + (block + (set_local $0 + (i32.const 1) + ) + (br $__rjti$2) + ) + (block + (i32.store8 + (i32.add + (tee_local $8 + (i32.load + (get_local $3) + ) + ) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $0) + ) + (i32.store8 offset=1 + (i32.add + (get_local $8) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (get_local $26) + ) + (i32.store16 offset=2 + (i32.add + (get_local $8) + (i32.shl + (get_local $17) + (i32.const 2) + ) + ) + (i32.shr_u + (i32.sub + (get_local $16) + (get_local $8) + ) + (i32.const 2) + ) + ) + (set_local $15 + (get_local $0) + ) + (set_local $8 + (get_local $9) + ) + (set_local $0 + (get_local $2) + ) + (br $label$continue$L93) + ) + ) + ) + ) + (br $__rjto$2) + ) + (set_global $STACKTOP + (get_local $13) + ) + (return + (get_local $0) + ) + ) + (block $label$break$L126 + (if + (get_local $9) + (block + (set_local $2 + (get_local $1) + ) + (set_local $6 + (get_local $9) + ) + (set_local $1 + (get_local $14) + ) + (loop $while-in19 + (if + (i32.eqz + (i32.or + (i32.eqz + (get_local $5) + ) + (i32.eq + (i32.and + (get_local $6) + (get_local $25) + ) + (get_local $17) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (set_local $2 + (get_local $26) + ) + (set_local $1 + (get_local $12) + ) + (set_local $0 + (i32.load + (get_local $3) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $0) + (i32.shl + (tee_local $9 + (i32.shr_u + (get_local $6) + (get_local $5) + ) + ) + (i32.const 2) + ) + ) + (i32.const 64) + ) + (i32.store8 offset=1 + (i32.add + (get_local $0) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + (get_local $2) + ) + (i32.store16 offset=2 + (i32.add + (get_local $0) + (i32.shl + (get_local $9) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (set_local $9 + (i32.shl + (i32.const 1) + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + (loop $while-in21 + (if + (i32.and + (get_local $9) + (get_local $6) + ) + (block + (set_local $9 + (i32.shr_u + (get_local $9) + (i32.const 1) + ) + ) + (br $while-in21) + ) + ) + ) + (br_if $label$break$L126 + (i32.eqz + (get_local $9) + ) + ) + (br_if $while-in19 + (tee_local $6 + (i32.add + (i32.and + (i32.add + (get_local $9) + (i32.const -1) + ) + (get_local $6) + ) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $12) + ) + (set_global $STACKTOP + (get_local $13) + ) + (i32.const 0) + ) + (func $_inflate_fast (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (set_local $17 + (i32.add + (tee_local $8 + (i32.add + (i32.load + (get_local $0) + ) + (i32.const -1) + ) + ) + (i32.add + (i32.load + (tee_local $20 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.const -5) + ) + ) + ) + (set_local $18 + (i32.add + (tee_local $4 + (i32.add + (i32.load + (tee_local $21 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (i32.const -1) + ) + ) + (i32.add + (tee_local $3 + (i32.load + (tee_local $22 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + (i32.const -257) + ) + ) + ) + (set_local $19 + (i32.load offset=40 + (tee_local $9 + (i32.load offset=28 + (get_local $0) + ) + ) + ) + ) + (set_local $23 + (i32.load offset=44 + (get_local $9) + ) + ) + (set_local $13 + (i32.load offset=76 + (get_local $9) + ) + ) + (set_local $14 + (i32.load offset=80 + (get_local $9) + ) + ) + (set_local $24 + (i32.add + (i32.shl + (i32.const 1) + (i32.load offset=84 + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + (set_local $25 + (i32.add + (i32.shl + (i32.const 1) + (i32.load offset=88 + (get_local $9) + ) + ) + (i32.const -1) + ) + ) + (set_local $26 + (i32.add + (get_local $9) + (i32.const 7104) + ) + ) + (set_local $15 + (i32.add + (i32.load offset=52 + (get_local $9) + ) + (i32.const -1) + ) + ) + (set_local $27 + (i32.eqz + (tee_local $12 + (i32.load offset=48 + (get_local $9) + ) + ) + ) + ) + (set_local $28 + (i32.add + (get_local $12) + (get_local $19) + ) + ) + (set_local $29 + (i32.sub + (tee_local $16 + (i32.add + (get_local $4) + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + ) + (get_local $12) + ) + ) + (set_local $3 + (i32.load + (tee_local $30 + (i32.add + (get_local $9) + (i32.const 60) + ) + ) + ) + ) + (set_local $6 + (i32.load + (tee_local $31 + (i32.add + (get_local $9) + (i32.const 56) + ) + ) + ) + ) + (set_local $1 + (get_local $4) + ) + (block $do-once14 + (block $__rjti$4 + (block $__rjti$3 + (block $__rjti$2 + (loop $label$continue$L1 + (set_local $4 + (if i32 + (i32.lt_u + (get_local $3) + (i32.const 15) + ) + (block i32 + (set_local $6 + (i32.add + (i32.add + (i32.shl + (i32.load8_u offset=1 + (get_local $8) + ) + (get_local $3) + ) + (get_local $6) + ) + (i32.shl + (i32.load8_u + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 2) + ) + ) + ) + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + ) + ) + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (get_local $3) + ) + ) + (set_local $2 + (i32.load8_s + (i32.add + (get_local $13) + (i32.shl + (tee_local $3 + (i32.and + (get_local $6) + (get_local $24) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $5 + (i32.load16_s offset=2 + (i32.add + (get_local $13) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $6) + (tee_local $6 + (i32.load8_u offset=1 + (i32.add + (get_local $13) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_local $4 + (i32.sub + (get_local $4) + (get_local $6) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (if + (get_local $2) + (block + (set_local $6 + (get_local $4) + ) + (set_local $2 + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (set_local $4 + (get_local $5) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in + (block $while-out + (if + (i32.and + (get_local $2) + (i32.const 16) + ) + (block + (set_local $5 + (get_local $2) + ) + (br $while-out) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 64) + ) + (block + (set_local $4 + (get_local $3) + ) + (br $__rjti$4) + ) + ) + (set_local $5 + (i32.load8_s + (i32.add + (get_local $13) + (i32.shl + (tee_local $2 + (i32.add + (i32.and + (get_local $3) + (i32.add + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const -1) + ) + ) + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $4 + (i32.load16_s offset=2 + (i32.add + (get_local $13) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $3) + (tee_local $2 + (i32.load8_u offset=1 + (i32.add + (get_local $13) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_local $6 + (i32.sub + (get_local $6) + (get_local $2) + ) + ) + (if + (get_local $5) + (block + (set_local $2 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (br $while-in) + ) + (block + (set_local $2 + (get_local $6) + ) + (br $__rjti$0) + ) + ) + ) + ) + (br $__rjto$0) + ) + (set_local $6 + (get_local $3) + ) + (set_local $3 + (get_local $2) + ) + (set_local $4 + (i32.and + (get_local $4) + (i32.const 255) + ) + ) + (br $__rjti$1) + ) + (set_local $2 + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + (set_local $3 + (if i32 + (tee_local $5 + (i32.and + (get_local $5) + (i32.const 15) + ) + ) + (block i32 + (set_local $6 + (i32.sub + (tee_local $4 + (if i32 + (i32.lt_u + (get_local $6) + (get_local $5) + ) + (block i32 + (set_local $3 + (i32.add + (i32.shl + (i32.load8_u + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + ) + (get_local $6) + ) + (get_local $3) + ) + ) + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (get_local $6) + ) + ) + (get_local $5) + ) + ) + (set_local $4 + (i32.shr_u + (get_local $3) + (get_local $5) + ) + ) + (i32.add + (i32.and + (get_local $3) + (i32.add + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + (get_local $2) + ) + ) + (block i32 + (set_local $4 + (get_local $3) + ) + (get_local $2) + ) + ) + ) + (set_local $2 + (if i32 + (i32.lt_u + (get_local $6) + (i32.const 15) + ) + (block i32 + (set_local $4 + (i32.add + (i32.add + (i32.shl + (i32.load8_u offset=1 + (get_local $8) + ) + (get_local $6) + ) + (get_local $4) + ) + (i32.shl + (i32.load8_u + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 2) + ) + ) + ) + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + ) + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (get_local $6) + ) + ) + (set_local $5 + (i32.load16_s offset=2 + (i32.add + (get_local $14) + (i32.shl + (tee_local $11 + (i32.and + (get_local $4) + (get_local $25) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $4) + (tee_local $4 + (i32.load8_u offset=1 + (i32.add + (get_local $14) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $2) + (get_local $4) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load8_u + (i32.add + (get_local $14) + (i32.shl + (get_local $11) + (i32.const 2) + ) + ) + ) + ) + (i32.const 16) + ) + (block + (set_local $4 + (get_local $6) + ) + (set_local $6 + (get_local $7) + ) + (set_local $7 + (get_local $5) + ) + ) + (block + (set_local $4 + (get_local $7) + ) + (loop $while-in1 + (if + (i32.and + (get_local $2) + (i32.const 64) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $__rjti$3) + ) + ) + (set_local $5 + (i32.load16_s offset=2 + (i32.add + (get_local $14) + (i32.shl + (tee_local $2 + (i32.add + (i32.and + (get_local $6) + (i32.add + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const -1) + ) + ) + (i32.and + (get_local $5) + (i32.const 65535) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $6) + (tee_local $7 + (i32.load8_u offset=1 + (i32.add + (get_local $14) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + ) + ) + (set_local $7 + (i32.sub + (get_local $4) + (get_local $7) + ) + ) + (if + (i32.and + (tee_local $2 + (i32.load8_u + (i32.add + (get_local $14) + (i32.shl + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.const 16) + ) + (block + (set_local $4 + (get_local $6) + ) + (set_local $6 + (get_local $7) + ) + (set_local $7 + (get_local $5) + ) + ) + (block + (set_local $4 + (get_local $7) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (set_local $5 + (if i32 + (i32.lt_u + (get_local $6) + (tee_local $10 + (i32.and + (get_local $2) + (i32.const 15) + ) + ) + ) + (block i32 + (set_local $2 + (i32.add + (i32.shl + (i32.load8_u + (tee_local $11 + (i32.add + (get_local $8) + (i32.const 1) + ) + ) + ) + (get_local $6) + ) + (get_local $4) + ) + ) + (if i32 + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (get_local $10) + ) + (block i32 + (set_local $2 + (i32.add + (i32.shl + (i32.load8_u + (tee_local $8 + (i32.add + (get_local $8) + (i32.const 2) + ) + ) + ) + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + (block i32 + (set_local $8 + (get_local $11) + ) + (get_local $4) + ) + ) + ) + (block i32 + (set_local $2 + (get_local $4) + ) + (get_local $6) + ) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $2) + (get_local $10) + ) + ) + (set_local $4 + (i32.sub + (get_local $5) + (get_local $10) + ) + ) + (if + (i32.le_u + (tee_local $10 + (i32.add + (i32.and + (get_local $2) + (i32.add + (i32.shl + (i32.const 1) + (get_local $10) + ) + (i32.const -1) + ) + ) + (i32.and + (get_local $7) + (i32.const 65535) + ) + ) + ) + (tee_local $2 + (i32.sub + (tee_local $7 + (get_local $1) + ) + (get_local $16) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (loop $while-in3 + (i32.store8 offset=1 + (get_local $1) + (i32.load8_s offset=1 + (get_local $2) + ) + ) + (i32.store8 offset=2 + (get_local $1) + (i32.load8_s offset=2 + (get_local $2) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 3) + ) + ) + (i32.load8_s + (tee_local $7 + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -3) + ) + ) + (i32.const 2) + ) + (block + (set_local $2 + (get_local $7) + ) + (set_local $1 + (get_local $5) + ) + (br $while-in3) + ) + ) + ) + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $5) + ) + (br $__rjto$1) + ) + ) + (i32.store8 + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.load8_s offset=4 + (get_local $2) + ) + ) + (if + (i32.le_u + (get_local $3) + (i32.const 1) + ) + (block + (set_local $3 + (get_local $4) + ) + (set_local $1 + (get_local $5) + ) + (br $__rjto$1) + ) + ) + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 5) + ) + ) + (i32.load8_s offset=5 + (get_local $2) + ) + ) + (set_local $3 + (get_local $4) + ) + (br $__rjto$1) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $10) + (get_local $2) + ) + ) + (get_local $23) + ) + (if + (i32.load + (get_local $26) + ) + (block + (set_local $3 + (get_local $4) + ) + (br $__rjti$2) + ) + ) + ) + (set_local $2 + (block $do-once4 i32 + (if i32 + (get_local $27) + (block i32 + (set_local $5 + (i32.add + (get_local $15) + (i32.sub + (get_local $19) + (get_local $2) + ) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (get_local $2) + ) + (block i32 + (set_local $11 + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $7) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $do-in + (i32.store8 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (get_local $11) + ) + (i32.add + (tee_local $1 + (i32.add + (i32.add + (get_local $1) + (get_local $16) + ) + (get_local $7) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (get_local $5) + ) + ) + (block i32 + (if + (i32.ge_u + (get_local $12) + (get_local $2) + ) + (block + (set_local $5 + (i32.add + (get_local $15) + (i32.sub + (get_local $12) + (get_local $2) + ) + ) + ) + (drop + (br_if $do-once4 + (get_local $5) + (i32.le_u + (get_local $3) + (get_local $2) + ) + ) + ) + (set_local $11 + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (set_local $7 + (i32.sub + (get_local $10) + (get_local $7) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $do-in7 + (i32.store8 + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in7 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (get_local $11) + ) + (br $do-once4 + (i32.add + (tee_local $1 + (i32.add + (i32.add + (get_local $1) + (get_local $16) + ) + (get_local $7) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + ) + ) + (set_local $5 + (i32.add + (get_local $15) + (i32.sub + (get_local $28) + (get_local $2) + ) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (tee_local $2 + (i32.sub + (get_local $2) + (get_local $12) + ) + ) + ) + (block i32 + (set_local $3 + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (set_local $11 + (i32.sub + (get_local $10) + (get_local $7) + ) + ) + (set_local $7 + (get_local $1) + ) + (loop $do-in9 + (i32.store8 + (tee_local $7 + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (i32.load8_s + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in9 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $5 + (i32.add + (i32.add + (get_local $1) + (get_local $29) + ) + (get_local $11) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (get_local $12) + ) + (block i32 + (set_local $7 + (i32.sub + (get_local $3) + (get_local $12) + ) + ) + (set_local $3 + (get_local $15) + ) + (set_local $2 + (get_local $12) + ) + (loop $do-in11 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.load8_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in11 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (get_local $7) + ) + (i32.add + (tee_local $1 + (i32.add + (i32.add + (get_local $1) + (get_local $16) + ) + (get_local $11) + ) + ) + (i32.sub + (i32.const 0) + (get_local $10) + ) + ) + ) + (block i32 + (set_local $1 + (get_local $5) + ) + (get_local $15) + ) + ) + ) + (get_local $5) + ) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $3) + (i32.const 2) + ) + (loop $while-in13 + (i32.store8 offset=1 + (get_local $1) + (i32.load8_s offset=1 + (get_local $2) + ) + ) + (i32.store8 offset=2 + (get_local $1) + (i32.load8_s offset=2 + (get_local $2) + ) + ) + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 3) + ) + ) + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + ) + (br_if $while-in13 + (i32.gt_u + (tee_local $3 + (i32.add + (get_local $3) + (i32.const -3) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (set_local $3 + (if i32 + (get_local $3) + (block i32 + (i32.store8 + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.load8_s offset=1 + (get_local $2) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (i32.const 1) + ) + (block i32 + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (i32.load8_s offset=2 + (get_local $2) + ) + ) + (get_local $4) + ) + (block i32 + (set_local $1 + (get_local $5) + ) + (get_local $4) + ) + ) + ) + (get_local $4) + ) + ) + ) + (block + (set_local $6 + (get_local $3) + ) + (set_local $3 + (get_local $4) + ) + (set_local $4 + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (br $__rjti$1) + ) + ) + (br $__rjto$1) + ) + (i32.store8 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (get_local $4) + ) + ) + (br_if $label$continue$L1 + (i32.and + (i32.lt_u + (get_local $1) + (get_local $18) + ) + (i32.lt_u + (get_local $8) + (get_local $17) + ) + ) + ) + ) + (br $do-once14) + ) + (i32.store offset=24 + (get_local $0) + (i32.const 14223) + ) + (i32.store + (get_local $9) + (i32.const 29) + ) + (br $do-once14) + ) + (i32.store offset=24 + (get_local $0) + (i32.const 14253) + ) + (i32.store + (get_local $9) + (i32.const 29) + ) + (br $do-once14) + ) + (set_local $6 + (if i32 + (i32.and + (get_local $2) + (i32.const 32) + ) + (block i32 + (i32.store + (get_local $9) + (i32.const 11) + ) + (set_local $3 + (get_local $6) + ) + (get_local $4) + ) + (block i32 + (i32.store offset=24 + (get_local $0) + (i32.const 14275) + ) + (i32.store + (get_local $9) + (i32.const 29) + ) + (set_local $3 + (get_local $6) + ) + (get_local $4) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.add + (tee_local $8 + (i32.add + (get_local $8) + (i32.sub + (i32.const 0) + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $21) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store + (get_local $20) + (i32.sub + (i32.add + (get_local $17) + (i32.const 5) + ) + (get_local $8) + ) + ) + (i32.store + (get_local $22) + (i32.sub + (i32.add + (get_local $18) + (i32.const 257) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $31) + (i32.and + (i32.add + (i32.shl + (i32.const 1) + (tee_local $0 + (i32.sub + (get_local $3) + (i32.shl + (get_local $0) + (i32.const 3) + ) + ) + ) + ) + (i32.const -1) + ) + (get_local $6) + ) + ) + (i32.store + (get_local $30) + (get_local $0) + ) + ) + (func $__tr_flush_block (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (if + (i32.gt_s + (i32.load offset=132 + (get_local $0) + ) + (i32.const 0) + ) + (block + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (i32.load + (get_local $0) + ) + (i32.const 44) + ) + ) + ) + (i32.const 2) + ) + (block + (set_local $6 + (i32.const -201342849) + ) + (set_local $5 + (i32.const 0) + ) + (block $label$break$L9 + (block $__rjti$0 + (loop $while-in + (block $while-out + (if + (i32.and + (get_local $6) + (i32.const 1) + ) + (if + (i32.load16_s + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (block + (set_local $5 + (i32.const 0) + ) + (br $while-out) + ) + ) + ) + (br_if $__rjti$0 + (i32.ge_s + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.const 32) + ) + ) + (set_local $6 + (i32.shr_u + (get_local $6) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + (br $label$break$L9) + ) + (if + (i32.load16_s offset=184 + (get_local $0) + ) + (set_local $5 + (i32.const 1) + ) + (if + (i32.load16_s offset=188 + (get_local $0) + ) + (set_local $5 + (i32.const 1) + ) + (if + (i32.load16_s offset=200 + (get_local $0) + ) + (set_local $5 + (i32.const 1) + ) + (block + (set_local $5 + (i32.const 32) + ) + (loop $while-in1 + (if + (i32.load16_s + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (get_local $5) + (i32.const 2) + ) + ) + ) + (block + (set_local $5 + (i32.const 1) + ) + (br $label$break$L9) + ) + ) + (br_if $while-in1 + (i32.lt_s + (tee_local $5 + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.const 256) + ) + ) + (set_local $5 + (i32.const 0) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $5) + ) + ) + ) + (call $_build_tree + (get_local $0) + (i32.add + (get_local $0) + (i32.const 2840) + ) + ) + (call $_build_tree + (get_local $0) + (i32.add + (get_local $0) + (i32.const 2852) + ) + ) + (set_local $5 + (i32.eqz + (tee_local $4 + (i32.load16_s offset=150 + (get_local $0) + ) + ) + ) + ) + (i32.store16 offset=154 + (i32.add + (get_local $0) + (i32.shl + (tee_local $9 + (i32.load + (i32.add + (get_local $0) + (i32.const 2844) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const -1) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 2752) + ) + ) + (set_local $15 + (i32.add + (get_local $0) + (i32.const 2756) + ) + ) + (set_local $16 + (i32.add + (get_local $0) + (i32.const 2748) + ) + ) + (set_local $13 + (if i32 + (get_local $5) + (i32.const 138) + (i32.const 7) + ) + ) + (set_local $8 + (if i32 + (get_local $5) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + (set_local $10 + (i32.const -1) + ) + (loop $label$continue$L18 + (block $label$break$L18 + (set_local $4 + (i32.const 0) + ) + (loop $while-in3 + (br_if $label$break$L18 + (i32.gt_s + (get_local $6) + (get_local $9) + ) + ) + (br_if $while-in3 + (i32.and + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $13) + ) + (tee_local $12 + (i32.eq + (get_local $7) + (tee_local $5 + (i32.and + (tee_local $11 + (i32.load16_s offset=150 + (i32.add + (get_local $0) + (i32.shl + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $4) + (get_local $8) + ) + (i32.store16 + (tee_local $10 + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_u + (get_local $10) + ) + (get_local $4) + ) + ) + (if + (get_local $7) + (block + (if + (i32.ne + (get_local $7) + (get_local $10) + ) + (i32.store16 + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $4) + ) + (i32.const 1) + ) + ) + ) + (i32.store16 + (get_local $16) + (i32.add + (i32.load16_s + (get_local $16) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_s + (get_local $4) + (i32.const 11) + ) + (i32.store16 + (get_local $14) + (i32.add + (i32.load16_s + (get_local $14) + ) + (i32.const 1) + ) + ) + (i32.store16 + (get_local $15) + (i32.add + (i32.load16_s + (get_local $15) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $4 + (get_local $7) + ) + (set_local $13 + (if i32 + (tee_local $7 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 65535) + ) + ) + ) + (i32.const 138) + (if i32 + (get_local $12) + (i32.const 6) + (i32.const 7) + ) + ) + ) + (set_local $8 + (if i32 + (i32.or + (get_local $7) + (get_local $12) + ) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $10 + (get_local $4) + ) + (br $label$continue$L18) + ) + ) + (set_local $5 + (i32.eqz + (tee_local $4 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2442) + ) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.add + (get_local $0) + (i32.shl + (tee_local $9 + (i32.load + (i32.add + (get_local $0) + (i32.const 2856) + ) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2446) + ) + (i32.const -1) + ) + (set_local $13 + (if i32 + (get_local $5) + (i32.const 138) + (i32.const 7) + ) + ) + (set_local $8 + (if i32 + (get_local $5) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $6 + (i32.const 0) + ) + (set_local $7 + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + (set_local $10 + (i32.const -1) + ) + (loop $label$continue$L38 + (block $label$break$L38 + (set_local $4 + (i32.const 0) + ) + (loop $while-in6 + (br_if $label$break$L38 + (i32.gt_s + (get_local $6) + (get_local $9) + ) + ) + (br_if $while-in6 + (i32.and + (i32.lt_s + (tee_local $4 + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (get_local $13) + ) + (tee_local $12 + (i32.eq + (get_local $7) + (tee_local $5 + (i32.and + (tee_local $11 + (i32.load16_s + (i32.add + (i32.add + (get_local $0) + (i32.shl + (tee_local $6 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2442) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + ) + ) + ) + ) + (if + (i32.lt_s + (get_local $4) + (get_local $8) + ) + (i32.store16 + (tee_local $10 + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_u + (get_local $10) + ) + (get_local $4) + ) + ) + (if + (get_local $7) + (block + (if + (i32.ne + (get_local $7) + (get_local $10) + ) + (i32.store16 + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $4) + ) + (i32.const 1) + ) + ) + ) + (i32.store16 + (get_local $16) + (i32.add + (i32.load16_s + (get_local $16) + ) + (i32.const 1) + ) + ) + ) + (if + (i32.lt_s + (get_local $4) + (i32.const 11) + ) + (i32.store16 + (get_local $14) + (i32.add + (i32.load16_s + (get_local $14) + ) + (i32.const 1) + ) + ) + (i32.store16 + (get_local $15) + (i32.add + (i32.load16_s + (get_local $15) + ) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $4 + (get_local $7) + ) + (set_local $13 + (if i32 + (tee_local $7 + (i32.eqz + (i32.and + (get_local $11) + (i32.const 65535) + ) + ) + ) + (i32.const 138) + (if i32 + (get_local $12) + (i32.const 6) + (i32.const 7) + ) + ) + ) + (set_local $8 + (if i32 + (i32.or + (get_local $7) + (get_local $12) + ) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $10 + (get_local $4) + ) + (br $label$continue$L38) + ) + ) + (call $_build_tree + (get_local $0) + (i32.add + (get_local $0) + (i32.const 2864) + ) + ) + (set_local $6 + (i32.add + (i32.add + (i32.mul + (tee_local $7 + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2746) + ) + ) + (i32.const 18) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2690) + ) + ) + (i32.const 17) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2742) + ) + ) + (i32.const 16) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2694) + ) + ) + (i32.const 15) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2738) + ) + ) + (i32.const 14) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2698) + ) + ) + (i32.const 13) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2734) + ) + ) + (i32.const 12) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2702) + ) + ) + (i32.const 11) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2730) + ) + ) + (i32.const 10) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2706) + ) + ) + (i32.const 9) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2726) + ) + ) + (i32.const 8) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2710) + ) + ) + (i32.const 7) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2722) + ) + ) + (i32.const 6) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2714) + ) + ) + (i32.const 5) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2718) + ) + ) + (i32.const 4) + (if i32 + (i32.load16_s + (i32.add + (get_local $0) + (i32.const 2686) + ) + ) + (i32.const 3) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 17) + ) + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 5800) + ) + ) + ) + ) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (set_local $6 + (if i32 + (i32.gt_u + (tee_local $5 + (i32.shr_u + (i32.add + (i32.load + (i32.add + (get_local $0) + (i32.const 5804) + ) + ) + (i32.const 10) + ) + (i32.const 3) + ) + ) + (tee_local $4 + (i32.shr_u + (i32.add + (get_local $6) + (i32.const 10) + ) + (i32.const 3) + ) + ) + ) + (get_local $4) + (get_local $5) + ) + ) + (set_local $4 + (get_local $5) + ) + ) + (block + (set_local $7 + (i32.const 0) + ) + (set_local $6 + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 5) + ) + ) + ) + ) + ) + (block $do-once9 + (if + (i32.and + (i32.ne + (get_local $1) + (i32.const 0) + ) + (i32.le_u + (i32.add + (get_local $2) + (i32.const 4) + ) + (get_local $6) + ) + ) + (call $__tr_stored_block + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + ) + (block + (set_local $10 + (i32.gt_s + (tee_local $11 + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + ) + ) + (i32.const 13) + ) + ) + (if + (if i32 + (i32.eq + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.eq + (i32.load offset=136 + (get_local $0) + ) + (i32.const 4) + ) + ) + (block + (set_local $2 + (i32.or + (i32.load16_u + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (i32.shl + (tee_local $5 + (i32.and + (i32.add + (get_local $3) + (i32.const 2) + ) + (i32.const 65535) + ) + ) + (get_local $11) + ) + ) + ) + (i32.store16 + (get_local $7) + (get_local $2) + ) + (i32.store + (get_local $9) + (tee_local $1 + (if i32 + (get_local $10) + (block i32 + (set_local $1 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $2) + ) + (i32.store16 + (get_local $7) + (i32.shr_u + (get_local $5) + (i32.sub + (i32.const 16) + (tee_local $1 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.add + (get_local $1) + (i32.const -13) + ) + ) + (i32.add + (get_local $11) + (i32.const 3) + ) + ) + ) + ) + (call $_compress_block + (get_local $0) + (i32.const 12570) + (i32.const 13722) + ) + (br $do-once9) + ) + ) + (set_local $1 + (i32.or + (i32.load16_u + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (i32.shl + (tee_local $5 + (i32.and + (i32.add + (get_local $3) + (i32.const 4) + ) + (i32.const 65535) + ) + ) + (get_local $11) + ) + ) + ) + (i32.store16 + (get_local $8) + (get_local $1) + ) + (i32.store + (get_local $9) + (tee_local $2 + (if i32 + (get_local $10) + (block i32 + (set_local $2 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (get_local $1) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $8) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $2) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.sub + (i32.const 16) + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $2) + (i32.const -13) + ) + ) + (i32.add + (get_local $11) + (i32.const 3) + ) + ) + ) + ) + (set_local $11 + (i32.load + (i32.add + (get_local $0) + (i32.const 2856) + ) + ) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.or + (i32.and + (get_local $1) + (i32.const 65535) + ) + (i32.shl + (tee_local $5 + (i32.and + (i32.add + (tee_local $10 + (i32.load + (i32.add + (get_local $0) + (i32.const 2844) + ) + ) + ) + (i32.const 65280) + ) + (i32.const 65535) + ) + ) + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $2 + (if i32 + (i32.gt_s + (get_local $2) + (i32.const 11) + ) + (block i32 + (set_local $2 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (get_local $1) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $8) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $2) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.sub + (i32.const 16) + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $2) + (i32.const -11) + ) + ) + (i32.add + (get_local $2) + (i32.const 5) + ) + ) + ) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.or + (i32.shl + (tee_local $5 + (i32.and + (get_local $11) + (i32.const 65535) + ) + ) + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $2 + (if i32 + (i32.gt_s + (get_local $2) + (i32.const 11) + ) + (block i32 + (set_local $2 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (get_local $1) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $8) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $2) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.shr_u + (get_local $5) + (i32.sub + (i32.const 16) + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $2) + (i32.const -11) + ) + ) + (i32.add + (get_local $2) + (i32.const 5) + ) + ) + ) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.or + (i32.shl + (tee_local $6 + (i32.and + (i32.add + (get_local $7) + (i32.const 65533) + ) + (i32.const 65535) + ) + ) + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $2 + (if i32 + (i32.gt_s + (get_local $2) + (i32.const 12) + ) + (block i32 + (set_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (get_local $1) + ) + (set_local $4 + (i32.shr_u + (i32.load16_u + (get_local $8) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $1 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $2) + ) + (get_local $1) + ) + (get_local $4) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.shr_u + (get_local $6) + (i32.sub + (i32.const 16) + (tee_local $6 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (set_local $4 + (get_local $2) + ) + (i32.add + (get_local $6) + (i32.const -12) + ) + ) + (block i32 + (set_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (i32.add + (get_local $2) + (i32.const 4) + ) + ) + ) + ) + ) + (set_local $12 + (i32.const 0) + ) + (loop $while-in12 + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.or + (i32.shl + (tee_local $6 + (i32.load16_u + (i32.add + (i32.add + (get_local $0) + (i32.shl + (i32.load8_u + (i32.add + (get_local $12) + (i32.const 15071) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2686) + ) + ) + ) + (get_local $2) + ) + (i32.and + (get_local $1) + (i32.const 65535) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $2 + (if i32 + (i32.gt_s + (get_local $2) + (i32.const 13) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $2 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $8) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $1 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $2) + ) + (i32.store16 + (get_local $8) + (tee_local $1 + (i32.shr_u + (get_local $6) + (i32.sub + (i32.const 16) + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $2) + (i32.const -13) + ) + ) + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + ) + (if + (i32.ne + (get_local $12) + (get_local $7) + ) + (block + (set_local $12 + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (br $while-in12) + ) + ) + ) + (call $_send_tree + (get_local $0) + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 148) + ) + ) + (get_local $10) + ) + (call $_send_tree + (get_local $0) + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 2440) + ) + ) + (get_local $11) + ) + (call $_compress_block + (get_local $0) + (get_local $2) + (get_local $1) + ) + ) + ) + ) + (call $_init_block + (get_local $0) + ) + (if + (i32.eqz + (get_local $3) + ) + (return) + ) + (i32.store16 + (tee_local $0 + (if i32 + (i32.gt_s + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + ) + ) + (i32.const 8) + ) + (block i32 + (set_local $2 + (i32.and + (i32.load16_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (i32.const 255) + ) + ) + (set_local $5 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $6) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $5) + ) + (get_local $2) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $1) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (tee_local $0 + (i32.load + (get_local $6) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $3) + ) + (get_local $0) + ) + (get_local $2) + ) + (get_local $1) + ) + (block i32 + (set_local $1 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + (if i32 + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block i32 + (set_local $3 + (i32.and + (i32.load16_s + (get_local $1) + ) + (i32.const 255) + ) + ) + (set_local $5 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $5) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load offset=8 + (get_local $0) + ) + (get_local $5) + ) + (get_local $3) + ) + (get_local $1) + ) + (get_local $1) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $4) + (i32.const 0) + ) + ) + (func $_free (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (if + (i32.eqz + (get_local $0) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $0) + (i32.const -8) + ) + ) + (tee_local $11 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (tee_local $5 + (i32.and + (tee_local $7 + (i32.load + (i32.add + (get_local $0) + (i32.const -4) + ) + ) + ) + (i32.const 3) + ) + ) + (i32.const 1) + ) + (call $_abort) + ) + (set_local $8 + (i32.add + (get_local $1) + (tee_local $0 + (i32.and + (get_local $7) + (i32.const -8) + ) + ) + ) + ) + (block $do-once + (if + (i32.and + (get_local $7) + (i32.const 1) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + (block + (set_local $7 + (i32.load + (get_local $1) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (return) + ) + (if + (i32.lt_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.sub + (i32.const 0) + (get_local $7) + ) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (set_local $0 + (i32.add + (get_local $7) + (get_local $0) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.load + (i32.const 17816) + ) + ) + (block + (if + (i32.ne + (i32.and + (tee_local $3 + (i32.load + (tee_local $2 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 3) + ) + (i32.const 3) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (i32.store + (i32.const 17804) + (get_local $0) + ) + (i32.store + (get_local $2) + (i32.and + (get_local $3) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $1) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.shr_u + (get_local $7) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $7) + (i32.const 256) + ) + (block + (set_local $6 + (i32.load offset=12 + (get_local $1) + ) + ) + (if + (i32.ne + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (tee_local $3 + (i32.add + (i32.shl + (get_local $5) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $2) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $2) + ) + (get_local $1) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $2) + ) + (block + (i32.store + (i32.const 17796) + (i32.and + (i32.load + (i32.const 17796) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $3) + ) + (set_local $4 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (set_local $4 + (get_local $3) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (get_local $6) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + (set_local $12 + (i32.load offset=24 + (get_local $1) + ) + ) + (block $do-once0 + (if + (i32.eq + (tee_local $4 + (i32.load offset=12 + (get_local $1) + ) + ) + (get_local $1) + ) + (block + (if + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $4 + (i32.add + (tee_local $7 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (set_local $4 + (get_local $7) + ) + (block + (set_local $6 + (i32.const 0) + ) + (br $do-once0) + ) + ) + ) + (loop $while-in + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + (if + (tee_local $7 + (i32.load + (tee_local $10 + (i32.add + (get_local $5) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $5 + (get_local $7) + ) + (set_local $4 + (get_local $10) + ) + (br $while-in) + ) + ) + ) + (if + (i32.lt_u + (get_local $4) + (get_local $11) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (i32.const 0) + ) + (set_local $6 + (get_local $5) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $10 + (i32.load offset=8 + (get_local $1) + ) + ) + (get_local $11) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $7 + (i32.add + (get_local $10) + (i32.const 12) + ) + ) + ) + (get_local $1) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $5 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (block + (i32.store + (get_local $7) + (get_local $4) + ) + (i32.store + (get_local $5) + (get_local $10) + ) + (set_local $6 + (get_local $4) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $12) + (block + (if + (i32.eq + (get_local $1) + (i32.load + (tee_local $4 + (i32.add + (i32.shl + (tee_local $5 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (block + (i32.store + (get_local $4) + (get_local $6) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (i32.store + (i32.const 17800) + (i32.and + (i32.load + (i32.const 17800) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $12) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $4 + (i32.add + (get_local $12) + (i32.const 16) + ) + ) + ) + (get_local $1) + ) + (i32.store + (get_local $4) + (get_local $6) + ) + (i32.store offset=20 + (get_local $12) + (get_local $6) + ) + ) + (if + (i32.eqz + (get_local $6) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + (br $do-once) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $6) + (tee_local $5 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $6) + (get_local $12) + ) + (if + (tee_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $1) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $7) + (get_local $5) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $6) + (get_local $7) + ) + (i32.store offset=24 + (get_local $7) + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $4 + (i32.load offset=4 + (get_local $4) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $6) + (get_local $4) + ) + (i32.store offset=24 + (get_local $4) + (get_local $6) + ) + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + (block + (set_local $2 + (get_local $1) + ) + (set_local $3 + (get_local $0) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_u + (get_local $2) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eqz + (i32.and + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 4) + ) + ) + ) + ) + (i32.const 1) + ) + ) + (call $_abort) + ) + (if + (i32.and + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $0) + (i32.and + (get_local $1) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $3) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $3) + ) + (get_local $3) + ) + ) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 17820) + ) + ) + (block + (i32.store + (i32.const 17808) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17808) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17820) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.ne + (get_local $2) + (i32.load + (i32.const 17816) + ) + ) + (return) + ) + (i32.store + (i32.const 17816) + (i32.const 0) + ) + (i32.store + (i32.const 17804) + (i32.const 0) + ) + (return) + ) + ) + (if + (i32.eq + (get_local $8) + (i32.load + (i32.const 17816) + ) + ) + (block + (i32.store + (i32.const 17804) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17804) + ) + (get_local $3) + ) + ) + ) + (i32.store + (i32.const 17816) + (get_local $2) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $0) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $0) + ) + (get_local $0) + ) + (return) + ) + ) + (set_local $5 + (i32.add + (i32.and + (get_local $1) + (i32.const -8) + ) + (get_local $3) + ) + ) + (set_local $3 + (i32.shr_u + (get_local $1) + (i32.const 3) + ) + ) + (block $do-once4 + (if + (i32.lt_u + (get_local $1) + (i32.const 256) + ) + (block + (set_local $4 + (i32.load offset=12 + (get_local $8) + ) + ) + (if + (i32.ne + (tee_local $1 + (i32.load offset=8 + (get_local $8) + ) + ) + (tee_local $0 + (i32.add + (i32.shl + (get_local $3) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $1) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load offset=12 + (get_local $1) + ) + (get_local $8) + ) + (call $_abort) + ) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $1) + ) + (block + (i32.store + (i32.const 17796) + (i32.and + (i32.load + (i32.const 17796) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $0) + ) + (set_local $14 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + (block + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (set_local $14 + (get_local $0) + ) + (call $_abort) + ) + ) + ) + (i32.store offset=12 + (get_local $1) + (get_local $4) + ) + (i32.store + (get_local $14) + (get_local $1) + ) + ) + (block + (set_local $6 + (i32.load offset=24 + (get_local $8) + ) + ) + (block $do-once6 + (if + (i32.eq + (tee_local $0 + (i32.load offset=12 + (get_local $8) + ) + ) + (get_local $8) + ) + (block + (if + (i32.eqz + (tee_local $3 + (i32.load + (tee_local $0 + (i32.add + (tee_local $1 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + (if + (tee_local $3 + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (get_local $1) + ) + (block + (set_local $9 + (i32.const 0) + ) + (br $do-once6) + ) + ) + ) + (loop $while-in9 + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + (if + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $0 + (get_local $4) + ) + (br $while-in9) + ) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $0) + (i32.const 0) + ) + (set_local $9 + (get_local $3) + ) + ) + ) + ) + (block + (if + (i32.lt_u + (tee_local $4 + (i32.load offset=8 + (get_local $8) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.ne + (i32.load + (tee_local $1 + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + ) + (get_local $8) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $8) + ) + (block + (i32.store + (get_local $1) + (get_local $0) + ) + (i32.store + (get_local $3) + (get_local $4) + ) + (set_local $9 + (get_local $0) + ) + ) + (call $_abort) + ) + ) + ) + ) + (if + (get_local $6) + (block + (if + (i32.eq + (get_local $8) + (i32.load + (tee_local $0 + (i32.add + (i32.shl + (tee_local $3 + (i32.load offset=28 + (get_local $8) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + ) + ) + (block + (i32.store + (get_local $0) + (get_local $9) + ) + (if + (i32.eqz + (get_local $9) + ) + (block + (i32.store + (i32.const 17800) + (i32.and + (i32.load + (i32.const 17800) + ) + (i32.xor + (i32.shl + (i32.const 1) + (get_local $3) + ) + (i32.const -1) + ) + ) + ) + (br $do-once4) + ) + ) + ) + (block + (if + (i32.lt_u + (get_local $6) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + ) + (if + (i32.eq + (i32.load + (tee_local $0 + (i32.add + (get_local $6) + (i32.const 16) + ) + ) + ) + (get_local $8) + ) + (i32.store + (get_local $0) + (get_local $9) + ) + (i32.store offset=20 + (get_local $6) + (get_local $9) + ) + ) + (br_if $do-once4 + (i32.eqz + (get_local $9) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $9) + (tee_local $3 + (i32.load + (i32.const 17812) + ) + ) + ) + (call $_abort) + ) + (i32.store offset=24 + (get_local $9) + (get_local $6) + ) + (if + (tee_local $1 + (i32.load + (tee_local $0 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (get_local $3) + ) + (call $_abort) + (block + (i32.store offset=16 + (get_local $9) + (get_local $1) + ) + (i32.store offset=24 + (get_local $1) + (get_local $9) + ) + ) + ) + ) + (if + (tee_local $0 + (i32.load offset=4 + (get_local $0) + ) + ) + (if + (i32.lt_u + (get_local $0) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store offset=20 + (get_local $9) + (get_local $0) + ) + (i32.store offset=24 + (get_local $0) + (get_local $9) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.or + (get_local $5) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $2) + (get_local $5) + ) + (get_local $5) + ) + (if + (i32.eq + (get_local $2) + (i32.load + (i32.const 17816) + ) + ) + (block + (i32.store + (i32.const 17804) + (get_local $5) + ) + (return) + ) + (set_local $3 + (get_local $5) + ) + ) + ) + ) + (set_local $0 + (i32.shr_u + (get_local $3) + (i32.const 3) + ) + ) + (if + (i32.lt_u + (get_local $3) + (i32.const 256) + ) + (block + (set_local $1 + (i32.add + (i32.shl + (get_local $0) + (i32.const 3) + ) + (i32.const 17836) + ) + ) + (if + (i32.and + (tee_local $3 + (i32.load + (i32.const 17796) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $0) + ) + ) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + ) + ) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (set_local $15 + (get_local $3) + ) + (set_local $13 + (get_local $0) + ) + ) + ) + (block + (i32.store + (i32.const 17796) + (i32.or + (get_local $3) + (get_local $0) + ) + ) + (set_local $15 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $13 + (get_local $1) + ) + ) + ) + (i32.store + (get_local $15) + (get_local $2) + ) + (i32.store offset=12 + (get_local $13) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $13) + ) + (i32.store offset=12 + (get_local $2) + (get_local $1) + ) + (return) + ) + ) + (set_local $4 + (i32.add + (i32.shl + (tee_local $5 + (if i32 + (tee_local $0 + (i32.shr_u + (get_local $3) + (i32.const 8) + ) + ) + (if i32 + (i32.gt_u + (get_local $3) + (i32.const 16777215) + ) + (i32.const 31) + (i32.or + (i32.and + (i32.shr_u + (get_local $3) + (i32.add + (tee_local $0 + (i32.add + (i32.sub + (i32.const 14) + (i32.or + (i32.or + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $0) + (tee_local $4 + (i32.and + (i32.shr_u + (i32.add + (get_local $0) + (i32.const 1048320) + ) + (i32.const 16) + ) + (i32.const 8) + ) + ) + ) + ) + (i32.const 520192) + ) + (i32.const 16) + ) + (i32.const 4) + ) + ) + (get_local $4) + ) + (tee_local $0 + (i32.and + (i32.shr_u + (i32.add + (tee_local $1 + (i32.shl + (get_local $1) + (get_local $0) + ) + ) + (i32.const 245760) + ) + (i32.const 16) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.shr_u + (i32.shl + (get_local $1) + (get_local $0) + ) + (i32.const 15) + ) + ) + ) + (i32.const 7) + ) + ) + (i32.const 1) + ) + (i32.shl + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 0) + ) + ) + (i32.const 2) + ) + (i32.const 18100) + ) + ) + (i32.store offset=28 + (get_local $2) + (get_local $5) + ) + (i32.store offset=20 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $2) + (i32.const 0) + ) + (block $do-once12 + (if + (i32.and + (tee_local $1 + (i32.load + (i32.const 17800) + ) + ) + (tee_local $0 + (i32.shl + (i32.const 1) + (get_local $5) + ) + ) + ) + (block + (set_local $5 + (i32.shl + (get_local $3) + (if i32 + (i32.eq + (get_local $5) + (i32.const 31) + ) + (i32.const 0) + (i32.sub + (i32.const 25) + (i32.shr_u + (get_local $5) + (i32.const 1) + ) + ) + ) + ) + ) + (set_local $0 + (i32.load + (get_local $4) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in15 + (br_if $__rjti$1 + (i32.eq + (i32.and + (i32.load offset=4 + (get_local $0) + ) + (i32.const -8) + ) + (get_local $3) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (i32.add + (get_local $0) + (i32.const 16) + ) + (i32.shl + (i32.shr_u + (get_local $5) + (i32.const 31) + ) + (i32.const 2) + ) + ) + ) + ) + ) + ) + ) + (set_local $5 + (i32.shl + (get_local $5) + (i32.const 1) + ) + ) + (set_local $0 + (get_local $1) + ) + (br $while-in15) + ) + ) + (if + (i32.lt_u + (get_local $4) + (i32.load + (i32.const 17812) + ) + ) + (call $_abort) + (block + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $0) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + (br $do-once12) + ) + ) + (br $__rjto$1) + ) + (if + (i32.and + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + (tee_local $3 + (i32.load + (i32.const 17812) + ) + ) + ) + (i32.ge_u + (get_local $0) + (get_local $3) + ) + ) + (block + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $1) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (i32.const 0) + ) + ) + (call $_abort) + ) + ) + ) + (block + (i32.store + (i32.const 17800) + (i32.or + (get_local $1) + (get_local $0) + ) + ) + (i32.store + (get_local $4) + (get_local $2) + ) + (i32.store offset=24 + (get_local $2) + (get_local $4) + ) + (i32.store offset=12 + (get_local $2) + (get_local $2) + ) + (i32.store offset=8 + (get_local $2) + (get_local $2) + ) + ) + ) + ) + (i32.store + (i32.const 17828) + (tee_local $0 + (i32.add + (i32.load + (i32.const 17828) + ) + (i32.const -1) + ) + ) + ) + (if + (get_local $0) + (return) + (set_local $0 + (i32.const 18252) + ) + ) + (loop $while-in17 + (if + (tee_local $0 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (br $while-in17) + ) + ) + ) + (i32.store + (i32.const 17828) + (i32.const -1) + ) + ) + (func $_deflate_slow (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 116) + ) + ) + (set_local $28 + (i32.eqz + (get_local $1) + ) + ) + (set_local $16 + (i32.add + (get_local $0) + (i32.const 72) + ) + ) + (set_local $22 + (i32.add + (get_local $0) + (i32.const 88) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (set_local $23 + (i32.add + (get_local $0) + (i32.const 84) + ) + ) + (set_local $24 + (i32.add + (get_local $0) + (i32.const 68) + ) + ) + (set_local $25 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (set_local $26 + (i32.add + (get_local $0) + (i32.const 64) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 96) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 120) + ) + ) + (set_local $17 + (i32.add + (get_local $0) + (i32.const 112) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 100) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 5792) + ) + ) + (set_local $19 + (i32.add + (get_local $0) + (i32.const 5796) + ) + ) + (set_local $20 + (i32.add + (get_local $0) + (i32.const 5784) + ) + ) + (set_local $27 + (i32.add + (get_local $0) + (i32.const 5788) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 104) + ) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 92) + ) + ) + (set_local $29 + (i32.add + (get_local $0) + (i32.const 128) + ) + ) + (set_local $30 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $31 + (i32.add + (get_local $0) + (i32.const 136) + ) + ) + (block $__rjti$3 + (block $__rjti$2 + (loop $label$continue$L1 + (set_local $2 + (i32.load + (get_local $7) + ) + ) + (loop $while-in + (block $while-out + (block $__rjto$1 + (block $__rjti$1 + (if + (i32.lt_u + (get_local $2) + (i32.const 262) + ) + (block + (call $_fill_window + (get_local $0) + ) + (if + (i32.and + (get_local $28) + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 262) + ) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $2) + ) + ) + (if + (i32.le_u + (get_local $2) + (i32.const 2) + ) + (block + (i32.store + (get_local $12) + (i32.load + (get_local $11) + ) + ) + (i32.store + (get_local $18) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $11) + (i32.const 2) + ) + (set_local $2 + (i32.const 2) + ) + (br $__rjti$1) + ) + ) + ) + ) + (i32.store + (get_local $16) + (tee_local $3 + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (i32.load + (get_local $10) + ) + (i32.add + (tee_local $2 + (i32.load + (get_local $5) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.load + (get_local $16) + ) + (i32.load + (get_local $22) + ) + ) + ) + (i32.load + (get_local $23) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $26) + ) + (i32.shl + (i32.and + (i32.load + (get_local $25) + ) + (get_local $2) + ) + (i32.const 1) + ) + ) + (tee_local $4 + (i32.load16_s + (tee_local $3 + (i32.add + (i32.load + (get_local $24) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (set_local $6 + (i32.and + (get_local $4) + (i32.const 65535) + ) + ) + (i32.store16 + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $12) + (tee_local $3 + (i32.load + (get_local $11) + ) + ) + ) + (i32.store + (get_local $18) + (i32.load + (get_local $17) + ) + ) + (i32.store + (get_local $11) + (i32.const 2) + ) + (if + (get_local $4) + (if + (i32.lt_u + (get_local $3) + (i32.load + (get_local $29) + ) + ) + (if + (i32.gt_u + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $6) + ) + (i32.add + (i32.load + (get_local $30) + ) + (i32.const -262) + ) + ) + (block + (set_local $2 + (i32.const 2) + ) + (br $__rjti$1) + ) + (block + (i32.store + (get_local $11) + (tee_local $2 + (call $_longest_match + (get_local $0) + (get_local $6) + ) + ) + ) + (br_if $__rjti$1 + (i32.ge_u + (get_local $2) + (i32.const 6) + ) + ) + (if + (i32.ne + (i32.load + (get_local $31) + ) + (i32.const 1) + ) + (block + (br_if $__rjti$1 + (i32.ne + (get_local $2) + (i32.const 3) + ) + ) + (if + (i32.le_u + (i32.sub + (i32.load + (get_local $5) + ) + (i32.load + (get_local $17) + ) + ) + (i32.const 4096) + ) + (block + (set_local $2 + (i32.const 3) + ) + (br $__rjti$1) + ) + ) + ) + ) + (i32.store + (get_local $11) + (i32.const 2) + ) + (set_local $2 + (i32.const 2) + ) + (br $__rjti$1) + ) + ) + (set_local $2 + (i32.const 2) + ) + ) + (block + (set_local $2 + (i32.const 2) + ) + (br $__rjti$1) + ) + ) + (br $__rjto$1) + ) + (set_local $3 + (i32.load + (get_local $12) + ) + ) + ) + (br_if $while-out + (i32.eqz + (i32.or + (i32.lt_u + (get_local $3) + (i32.const 3) + ) + (i32.gt_u + (get_local $2) + (get_local $3) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $14) + ) + ) + (block + (i32.store + (get_local $14) + (i32.const 1) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $7) + (tee_local $2 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br $while-in) + ) + ) + (set_local $2 + (i32.load8_s + (i32.add + (i32.load + (get_local $10) + ) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $19) + ) + (i32.shl + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $3) + ) + (get_local $2) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (if + (i32.eq + (i32.load + (get_local $9) + ) + (i32.add + (i32.load + (get_local $27) + ) + (i32.const -1) + ) + ) + (block + (call $__tr_flush_block + (get_local $0) + (tee_local $3 + (if i32 + (i32.gt_s + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $10) + ) + (get_local $2) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $5) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $6 + (i32.load offset=20 + (tee_local $15 + (i32.load + (tee_local $8 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $6) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (i32.load + (get_local $4) + ) + (get_local $2) + ) + ) + (set_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $6) + ) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $7) + (tee_local $2 + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + ) + (br_if $while-in + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (set_local $6 + (i32.add + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const -3) + ) + (i32.load + (get_local $7) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $19) + ) + (i32.shl + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (tee_local $4 + (i32.sub + (i32.add + (get_local $4) + (i32.const 65535) + ) + (i32.load + (get_local $18) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $2) + ) + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 253) + ) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.shl + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 14815) + ) + ) + (i32.const 256) + ) + (i32.const 2) + ) + ) + (i32.const 152) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 2440) + ) + (i32.shl + (i32.load8_u + (i32.add + (if i32 + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (get_local $4) + (i32.const 65535) + ) + (i32.const 65535) + ) + ) + (i32.const 256) + ) + (get_local $2) + (i32.add + (i32.shr_u + (get_local $2) + (i32.const 7) + ) + (i32.const 256) + ) + ) + (i32.const 14303) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $8 + (i32.load + (get_local $9) + ) + ) + (set_local $15 + (i32.add + (i32.load + (get_local $27) + ) + (i32.const -1) + ) + ) + (i32.store + (get_local $7) + (i32.add + (i32.sub + (i32.const 1) + (tee_local $2 + (i32.load + (get_local $12) + ) + ) + ) + (i32.load + (get_local $7) + ) + ) + ) + (i32.store + (get_local $12) + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -2) + ) + ) + ) + (set_local $2 + (i32.load + (get_local $5) + ) + ) + (loop $while-in1 + (i32.store + (get_local $5) + (tee_local $3 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (if + (i32.le_u + (get_local $3) + (get_local $6) + ) + (block + (i32.store + (get_local $16) + (tee_local $21 + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (i32.load + (get_local $10) + ) + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + (i32.shl + (i32.load + (get_local $16) + ) + (i32.load + (get_local $22) + ) + ) + ) + (i32.load + (get_local $23) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $26) + ) + (i32.shl + (i32.and + (i32.load + (get_local $25) + ) + (get_local $3) + ) + (i32.const 1) + ) + ) + (i32.load16_s + (tee_local $21 + (i32.add + (i32.load + (get_local $24) + ) + (i32.shl + (get_local $21) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $21) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $12) + (tee_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + ) + (if + (get_local $4) + (block + (set_local $2 + (get_local $3) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $14) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 2) + ) + (i32.store + (get_local $5) + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + (br_if $label$continue$L1 + (i32.ne + (get_local $8) + (get_local $15) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $3 + (if i32 + (i32.gt_s + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $10) + ) + (get_local $2) + ) + (i32.const 0) + ) + ) + (i32.sub + (get_local $4) + (get_local $2) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $5) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $6 + (i32.load offset=20 + (tee_local $15 + (i32.load + (tee_local $8 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $6) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $15) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $6 + (i32.load + (get_local $8) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (i32.load + (get_local $4) + ) + (get_local $2) + ) + ) + (set_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $6) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $6) + ) + ) + ) + ) + ) + (br_if $label$continue$L1 + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (if + (i32.load + (get_local $14) + ) + (block + (set_local $2 + (i32.load8_s + (i32.add + (i32.load + (get_local $10) + ) + (i32.add + (i32.load + (get_local $5) + ) + (i32.const -1) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $19) + ) + (i32.shl + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $20) + ) + (get_local $3) + ) + (get_local $2) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.store + (get_local $14) + (i32.const 0) + ) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $3 + (if i32 + (i32.gt_s + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $10) + ) + (get_local $2) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $2) + ) + (tee_local $3 + (i32.eq + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $5) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $5 + (i32.load offset=20 + (tee_local $9 + (i32.load + (tee_local $7 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $1) + (tee_local $1 + (get_local $5) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $9) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (tee_local $5 + (i32.load + (get_local $7) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $7) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (i32.load + (get_local $4) + ) + (get_local $1) + ) + ) + (set_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $1) + ) + (i32.store + (get_local $7) + (i32.load offset=8 + (get_local $5) + ) + ) + ) + ) + ) + (if + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (return + (if i32 + (get_local $3) + (i32.const 3) + (i32.const 1) + ) + ) + (return + (if i32 + (get_local $3) + (i32.const 2) + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $_send_tree (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 2754) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + (set_local $19 + (i32.add + (get_local $0) + (i32.const 2752) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $20 + (i32.add + (get_local $0) + (i32.const 2758) + ) + ) + (set_local $21 + (i32.add + (get_local $0) + (i32.const 2756) + ) + ) + (set_local $22 + (i32.add + (get_local $0) + (i32.const 2750) + ) + ) + (set_local $23 + (i32.add + (get_local $0) + (i32.const 2748) + ) + ) + (set_local $12 + (if i32 + (tee_local $3 + (i32.eqz + (tee_local $14 + (i32.load16_s offset=2 + (get_local $1) + ) + ) + ) + ) + (i32.const 138) + (i32.const 7) + ) + ) + (set_local $10 + (if i32 + (get_local $3) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $15 + (i32.const 0) + ) + (set_local $13 + (i32.and + (get_local $14) + (i32.const 65535) + ) + ) + (set_local $4 + (i32.const -1) + ) + (loop $label$continue$L1 + (block $label$break$L1 + (set_local $6 + (i32.const 0) + ) + (loop $while-in + (br_if $label$break$L1 + (i32.gt_s + (get_local $15) + (get_local $2) + ) + ) + (if + (i32.and + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (get_local $12) + ) + (tee_local $8 + (i32.eq + (get_local $13) + (tee_local $14 + (i32.and + (tee_local $24 + (i32.load16_s offset=2 + (i32.add + (get_local $1) + (i32.shl + (tee_local $15 + (i32.add + (get_local $15) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + ) + ) + (block + (set_local $6 + (get_local $3) + ) + (br $while-in) + ) + (set_local $17 + (get_local $8) + ) + ) + ) + (block $do-once + (if + (i32.lt_s + (get_local $3) + (get_local $10) + ) + (block + (set_local $25 + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const 2686) + ) + ) + (set_local $12 + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $9) + ) + ) + (set_local $6 + (i32.load16_u + (get_local $7) + ) + ) + (set_local $8 + (get_local $3) + ) + (loop $while-in1 + (set_local $16 + (i32.load16_u + (get_local $25) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.and + (tee_local $6 + (i32.or + (i32.and + (get_local $6) + (i32.const 65535) + ) + (i32.shl + (tee_local $10 + (i32.load16_u + (get_local $12) + ) + ) + (get_local $4) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $6 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $16) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $10) + (i32.sub + (i32.const 16) + (tee_local $6 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $16) + (i32.const -16) + ) + (get_local $6) + ) + ) + (i32.add + (get_local $4) + (get_local $16) + ) + ) + ) + ) + (if + (tee_local $8 + (i32.add + (get_local $8) + (i32.const -1) + ) + ) + (block + (set_local $4 + (get_local $6) + ) + (set_local $6 + (get_local $3) + ) + (br $while-in1) + ) + ) + ) + ) + (block + (if + (get_local $13) + (block + (set_local $4 + (if i32 + (i32.eq + (get_local $13) + (get_local $4) + ) + (block i32 + (set_local $8 + (i32.load + (get_local $9) + ) + ) + (set_local $6 + (get_local $3) + ) + (i32.load16_u + (get_local $7) + ) + ) + (block i32 + (set_local $12 + (i32.load16_u + (i32.add + (i32.add + (get_local $0) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + (i32.const 2686) + ) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.and + (tee_local $4 + (i32.or + (i32.load16_u + (get_local $7) + ) + (i32.shl + (tee_local $8 + (i32.load16_u + (i32.add + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.shl + (get_local $13) + (i32.const 2) + ) + ) + ) + ) + (tee_local $10 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $8 + (if i32 + (i32.gt_s + (get_local $10) + (i32.sub + (i32.const 16) + (get_local $12) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + (set_local $4 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $8) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $12) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $10) + (get_local $12) + ) + ) + ) + ) + (get_local $3) + ) + ) + ) + (set_local $12 + (i32.load16_u + (get_local $22) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.or + (i32.and + (get_local $4) + (i32.const 65535) + ) + (i32.shl + (tee_local $10 + (i32.load16_u + (get_local $23) + ) + ) + (get_local $8) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $8 + (if i32 + (i32.gt_s + (get_local $8) + (i32.sub + (i32.const 16) + (get_local $12) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (set_local $4 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.shr_u + (get_local $10) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (i32.add + (get_local $12) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $8) + (get_local $12) + ) + ) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $6 + (i32.or + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.shl + (tee_local $4 + (i32.and + (i32.add + (get_local $6) + (i32.const 65533) + ) + (i32.const 65535) + ) + ) + (get_local $8) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $3 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 14) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (i32.store16 + (get_local $7) + (i32.shr_u + (get_local $4) + (i32.sub + (i32.const 16) + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.add + (get_local $3) + (i32.const -14) + ) + ) + (i32.add + (get_local $8) + (i32.const 2) + ) + ) + ) + ) + (br $do-once) + ) + ) + (if + (i32.lt_s + (get_local $3) + (i32.const 11) + ) + (block + (set_local $10 + (i32.load16_u + (get_local $18) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.or + (i32.load16_u + (get_local $7) + ) + (i32.shl + (tee_local $8 + (i32.load16_u + (get_local $19) + ) + ) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $8 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (set_local $4 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.shr_u + (get_local $8) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (i32.add + (get_local $10) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $4) + (get_local $10) + ) + ) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $6 + (i32.or + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.shl + (tee_local $4 + (i32.and + (i32.add + (get_local $6) + (i32.const 65534) + ) + (i32.const 65535) + ) + ) + (get_local $8) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $3 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 13) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (i32.store16 + (get_local $7) + (i32.shr_u + (get_local $4) + (i32.sub + (i32.const 16) + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.add + (get_local $3) + (i32.const -13) + ) + ) + (i32.add + (get_local $8) + (i32.const 3) + ) + ) + ) + ) + ) + (block + (set_local $10 + (i32.load16_u + (get_local $20) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.or + (i32.load16_u + (get_local $7) + ) + (i32.shl + (tee_local $8 + (i32.load16_u + (get_local $21) + ) + ) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $8 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $10) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (set_local $4 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $4) + ) + (i32.store16 + (get_local $7) + (tee_local $3 + (i32.shr_u + (get_local $8) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + ) + (i32.add + (i32.add + (get_local $10) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $4) + (get_local $10) + ) + ) + ) + ) + (i32.store16 + (get_local $7) + (tee_local $6 + (i32.or + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.shl + (tee_local $4 + (i32.and + (i32.add + (get_local $6) + (i32.const 65526) + ) + (i32.const 65535) + ) + ) + (get_local $8) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $3 + (if i32 + (i32.gt_s + (get_local $8) + (i32.const 9) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (set_local $6 + (i32.shr_u + (i32.load16_u + (get_local $7) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $6) + ) + (i32.store16 + (get_local $7) + (i32.shr_u + (get_local $4) + (i32.sub + (i32.const 16) + (tee_local $3 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.add + (get_local $3) + (i32.const -9) + ) + ) + (i32.add + (get_local $8) + (i32.const 7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set_local $3 + (get_local $13) + ) + (set_local $12 + (if i32 + (tee_local $6 + (i32.eqz + (i32.and + (get_local $24) + (i32.const 65535) + ) + ) + ) + (i32.const 138) + (if i32 + (get_local $17) + (i32.const 6) + (i32.const 7) + ) + ) + ) + (set_local $10 + (if i32 + (i32.or + (get_local $6) + (get_local $17) + ) + (i32.const 3) + (i32.const 4) + ) + ) + (set_local $13 + (get_local $14) + ) + (set_local $4 + (get_local $3) + ) + (br $label$continue$L1) + ) + ) + ) + (func $___udivmoddi4 (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (local $x64 i64) + (local $y64 i64) + (set_local $x64 + (i64.or + (i64.extend_u/i32 + (get_local $xl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $xh) + ) + (i64.const 32) + ) + ) + ) + (set_local $y64 + (i64.or + (i64.extend_u/i32 + (get_local $yl) + ) + (i64.shl + (i64.extend_u/i32 + (get_local $yh) + ) + (i64.const 32) + ) + ) + ) + (if + (get_local $r) + (i64.store + (get_local $r) + (i64.rem_u + (get_local $x64) + (get_local $y64) + ) + ) + ) + (set_local $x64 + (i64.div_u + (get_local $x64) + (get_local $y64) + ) + ) + (set_global $tempRet0 + (i32.wrap/i64 + (i64.shr_u + (get_local $x64) + (i64.const 32) + ) + ) + ) + (i32.wrap/i64 + (get_local $x64) + ) + ) + (func $_deflate_fast (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 116) + ) + ) + (set_local $23 + (i32.eqz + (get_local $1) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 72) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 88) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (set_local $15 + (i32.add + (get_local $0) + (i32.const 84) + ) + ) + (set_local $17 + (i32.add + (get_local $0) + (i32.const 68) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 52) + ) + ) + (set_local $19 + (i32.add + (get_local $0) + (i32.const 64) + ) + ) + (set_local $24 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 96) + ) + ) + (set_local $25 + (i32.add + (get_local $0) + (i32.const 112) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 5792) + ) + ) + (set_local $20 + (i32.add + (get_local $0) + (i32.const 5796) + ) + ) + (set_local $21 + (i32.add + (get_local $0) + (i32.const 5784) + ) + ) + (set_local $22 + (i32.add + (get_local $0) + (i32.const 5788) + ) + ) + (set_local $26 + (i32.add + (get_local $0) + (i32.const 128) + ) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 92) + ) + ) + (block $__rjti$3 + (block $__rjti$2 + (loop $while-in + (block $__rjto$1 + (block $__rjti$1 + (if + (i32.lt_u + (i32.load + (get_local $7) + ) + (i32.const 262) + ) + (block + (call $_fill_window + (get_local $0) + ) + (if + (i32.and + (get_local $23) + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $7) + ) + ) + (i32.const 262) + ) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (get_local $2) + ) + ) + (br_if $__rjti$1 + (i32.le_u + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $3 + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (i32.load + (get_local $10) + ) + (i32.add + (tee_local $2 + (i32.load + (get_local $6) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.shl + (i32.load + (get_local $9) + ) + (i32.load + (get_local $14) + ) + ) + ) + (i32.load + (get_local $15) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $19) + ) + (i32.shl + (i32.and + (i32.load + (get_local $18) + ) + (get_local $2) + ) + (i32.const 1) + ) + ) + (tee_local $3 + (i32.load16_s + (tee_local $4 + (i32.add + (i32.load + (get_local $17) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $4) + (get_local $2) + ) + (br_if $__rjti$1 + (i32.eqz + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.gt_u + (i32.sub + (get_local $2) + (tee_local $2 + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.load + (get_local $24) + ) + (i32.const -262) + ) + ) + ) + (i32.store + (get_local $11) + (tee_local $2 + (call $_longest_match + (get_local $0) + (get_local $2) + ) + ) + ) + (br $__rjto$1) + ) + (set_local $2 + (i32.load + (get_local $11) + ) + ) + ) + (block $do-once + (if + (i32.gt_u + (get_local $2) + (i32.const 2) + ) + (block + (i32.store16 + (i32.add + (i32.load + (get_local $20) + ) + (i32.shl + (tee_local $3 + (i32.load + (get_local $12) + ) + ) + (i32.const 1) + ) + ) + (tee_local $4 + (i32.sub + (i32.load + (get_local $6) + ) + (i32.load + (get_local $25) + ) + ) + ) + ) + (i32.store + (get_local $12) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $21) + ) + (get_local $3) + ) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 253) + ) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.shl + (i32.or + (i32.load8_u + (i32.add + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 14815) + ) + ) + (i32.const 256) + ) + (i32.const 2) + ) + ) + (i32.const 152) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 2440) + ) + (i32.shl + (i32.load8_u + (i32.add + (if i32 + (i32.lt_u + (tee_local $2 + (i32.and + (i32.add + (get_local $4) + (i32.const 65535) + ) + (i32.const 65535) + ) + ) + (i32.const 256) + ) + (get_local $2) + (i32.add + (i32.shr_u + (get_local $2) + (i32.const 7) + ) + (i32.const 256) + ) + ) + (i32.const 14303) + ) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $3 + (i32.eq + (i32.load + (get_local $12) + ) + (i32.add + (i32.load + (get_local $22) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $7) + (tee_local $4 + (i32.sub + (i32.load + (get_local $7) + ) + (tee_local $2 + (i32.load + (get_local $11) + ) + ) + ) + ) + ) + (if + (i32.eqz + (if i32 + (i32.gt_u + (get_local $4) + (i32.const 2) + ) + (i32.le_u + (get_local $2) + (i32.load + (get_local $26) + ) + ) + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $6) + (tee_local $2 + (i32.add + (i32.load + (get_local $6) + ) + (get_local $2) + ) + ) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $9) + (tee_local $5 + (i32.load8_u + (i32.add + (tee_local $4 + (i32.load + (get_local $10) + ) + ) + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (get_local $4) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.shl + (get_local $5) + (i32.load + (get_local $14) + ) + ) + ) + (i32.load + (get_local $15) + ) + ) + ) + (br $do-once) + ) + ) + (i32.store + (get_local $11) + (tee_local $5 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + (set_local $16 + (i32.load + (get_local $14) + ) + ) + (set_local $27 + (i32.load + (get_local $10) + ) + ) + (set_local $28 + (i32.load + (get_local $15) + ) + ) + (set_local $29 + (i32.load + (get_local $17) + ) + ) + (set_local $30 + (i32.load + (get_local $18) + ) + ) + (set_local $31 + (i32.load + (get_local $19) + ) + ) + (set_local $2 + (i32.load + (get_local $6) + ) + ) + (set_local $8 + (i32.load + (get_local $9) + ) + ) + (loop $while-in1 + (i32.store + (get_local $6) + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $8 + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (get_local $27) + (i32.add + (get_local $2) + (i32.const 3) + ) + ) + ) + (i32.shl + (get_local $8) + (get_local $16) + ) + ) + (get_local $28) + ) + ) + ) + (i32.store16 + (i32.add + (get_local $31) + (i32.shl + (i32.and + (get_local $30) + (get_local $4) + ) + (i32.const 1) + ) + ) + (i32.load16_s + (tee_local $32 + (i32.add + (get_local $29) + (i32.shl + (get_local $8) + (i32.const 1) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $32) + (get_local $4) + ) + (i32.store + (get_local $11) + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + (if + (get_local $5) + (block + (set_local $2 + (get_local $4) + ) + (br $while-in1) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 2) + ) + ) + ) + ) + (block + (set_local $2 + (i32.load8_s + (i32.add + (i32.load + (get_local $10) + ) + (i32.load + (get_local $6) + ) + ) + ) + ) + (i32.store16 + (i32.add + (i32.load + (get_local $20) + ) + (i32.shl + (tee_local $3 + (i32.load + (get_local $12) + ) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $12) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $21) + ) + (get_local $3) + ) + (get_local $2) + ) + (i32.store16 + (tee_local $2 + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (i32.and + (get_local $2) + (i32.const 255) + ) + (i32.const 2) + ) + ) + ) + (i32.add + (i32.load16_s + (get_local $2) + ) + (i32.const 1) + ) + ) + (set_local $3 + (i32.eq + (i32.load + (get_local $12) + ) + (i32.add + (i32.load + (get_local $22) + ) + (i32.const -1) + ) + ) + ) + (i32.store + (get_local $7) + (i32.add + (i32.load + (get_local $7) + ) + (i32.const -1) + ) + ) + (i32.store + (get_local $6) + (tee_local $2 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const 1) + ) + ) + ) + ) + ) + ) + (br_if $while-in + (i32.eqz + (get_local $3) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $4 + (if i32 + (i32.gt_s + (tee_local $3 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $10) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 0) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $6) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $5 + (i32.load offset=20 + (tee_local $16 + (i32.load + (tee_local $8 + (i32.add + (tee_local $3 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $5) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $16) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $8 + (i32.add + (tee_local $5 + (i32.load + (get_local $8) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (i32.load + (get_local $4) + ) + (get_local $2) + ) + ) + (set_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $3) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $3) + (get_local $2) + ) + (i32.store + (get_local $8) + (i32.load offset=8 + (get_local $5) + ) + ) + ) + ) + ) + (br_if $while-in + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (br $__rjti$3) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $3 + (if i32 + (i32.gt_s + (tee_local $2 + (i32.load + (get_local $13) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $10) + ) + (get_local $2) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $6) + ) + (get_local $2) + ) + (tee_local $3 + (i32.eq + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $13) + (i32.load + (get_local $6) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $5 + (i32.load offset=20 + (tee_local $7 + (i32.load + (tee_local $6 + (i32.add + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $1) + (tee_local $1 + (get_local $5) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $7) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (tee_local $5 + (i32.load + (get_local $6) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (i32.load + (get_local $4) + ) + (get_local $1) + ) + ) + (set_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $5) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.sub + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.eq + (get_local $2) + (get_local $1) + ) + (i32.store + (get_local $6) + (i32.load offset=8 + (get_local $5) + ) + ) + ) + ) + ) + (if + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (return + (if i32 + (get_local $3) + (i32.const 3) + (i32.const 1) + ) + ) + (return + (if i32 + (get_local $3) + (i32.const 2) + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $_compress_block (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (if + (i32.load + (tee_local $15 + (i32.add + (get_local $0) + (i32.const 5792) + ) + ) + ) + (block + (set_local $16 + (i32.add + (get_local $0) + (i32.const 5796) + ) + ) + (set_local $17 + (i32.add + (get_local $0) + (i32.const 5784) + ) + ) + (set_local $9 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + (set_local $6 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + (set_local $5 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (set_local $12 + (i32.const 0) + ) + (loop $do-in + (set_local $13 + (i32.and + (tee_local $3 + (i32.load16_s + (i32.add + (i32.load + (get_local $16) + ) + (i32.shl + (get_local $12) + (i32.const 1) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (set_local $7 + (i32.load8_u + (i32.add + (i32.load + (get_local $17) + ) + (get_local $12) + ) + ) + ) + (set_local $12 + (i32.add + (get_local $12) + (i32.const 1) + ) + ) + (if + (get_local $3) + (block + (set_local $4 + (i32.load16_u offset=2 + (i32.add + (get_local $1) + (i32.shl + (tee_local $3 + (i32.add + (i32.or + (tee_local $10 + (i32.load8_u + (i32.add + (get_local $7) + (i32.const 14815) + ) + ) + ) + (i32.const 256) + ) + (i32.const 1) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (tee_local $18 + (i32.or + (i32.load16_u + (get_local $6) + ) + (i32.shl + (tee_local $14 + (i32.load16_u + (i32.add + (get_local $1) + (i32.shl + (get_local $3) + (i32.const 2) + ) + ) + ) + ) + (tee_local $8 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $8) + (i32.sub + (i32.const 16) + (get_local $4) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $18) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $8 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $8) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $14) + (i32.sub + (i32.const 16) + (tee_local $8 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $4) + (i32.const -16) + ) + (get_local $8) + ) + ) + (i32.add + (get_local $8) + (get_local $4) + ) + ) + ) + ) + (set_local $8 + (i32.load + (i32.add + (i32.shl + (get_local $10) + (i32.const 2) + ) + (i32.const 9356) + ) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $10) + (i32.const -8) + ) + (i32.const 20) + ) + (block + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (tee_local $10 + (i32.or + (i32.shl + (tee_local $7 + (i32.and + (i32.sub + (get_local $7) + (i32.load + (i32.add + (i32.shl + (get_local $10) + (i32.const 2) + ) + (i32.const 9708) + ) + ) + ) + (i32.const 65535) + ) + ) + (get_local $4) + ) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $8) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $10) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $7) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $8) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $4) + (get_local $8) + ) + ) + ) + ) + ) + ) + (set_local $8 + (i32.load16_u offset=2 + (i32.add + (get_local $2) + (i32.shl + (tee_local $7 + (i32.load8_u + (i32.add + (if i32 + (i32.lt_u + (tee_local $10 + (i32.add + (get_local $13) + (i32.const -1) + ) + ) + (i32.const 256) + ) + (get_local $10) + (i32.add + (i32.shr_u + (get_local $10) + (i32.const 7) + ) + (i32.const 256) + ) + ) + (i32.const 14303) + ) + ) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (tee_local $14 + (i32.or + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.shl + (tee_local $13 + (i32.load16_u + (i32.add + (get_local $2) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + ) + (get_local $4) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $8) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $14) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $13) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $8) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $4) + (get_local $8) + ) + ) + ) + ) + (set_local $8 + (i32.load + (i32.add + (i32.shl + (get_local $7) + (i32.const 2) + ) + (i32.const 9492) + ) + ) + ) + (if + (i32.lt_u + (i32.add + (get_local $7) + (i32.const -4) + ) + (i32.const 26) + ) + (block + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (tee_local $10 + (i32.or + (i32.shl + (tee_local $7 + (i32.and + (i32.sub + (get_local $10) + (i32.load + (i32.add + (i32.shl + (get_local $7) + (i32.const 2) + ) + (i32.const 9824) + ) + ) + ) + (i32.const 65535) + ) + ) + (get_local $4) + ) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $8) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $10) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $4 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $4) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $7) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $8) + (i32.const -16) + ) + (get_local $4) + ) + ) + (i32.add + (get_local $4) + (get_local $8) + ) + ) + ) + ) + ) + ) + ) + (block + (set_local $4 + (i32.load16_u offset=2 + (i32.add + (get_local $1) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (tee_local $8 + (i32.or + (i32.load16_u + (get_local $6) + ) + (i32.shl + (tee_local $10 + (i32.load16_u + (i32.add + (get_local $1) + (i32.shl + (get_local $7) + (i32.const 2) + ) + ) + ) + ) + (tee_local $7 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $4 + (if i32 + (i32.gt_s + (get_local $7) + (i32.sub + (i32.const 16) + (get_local $4) + ) + ) + (block i32 + (i32.store + (get_local $5) + (i32.add + (tee_local $3 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $3) + ) + (get_local $8) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $5) + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $11) + ) + (get_local $7) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (tee_local $3 + (i32.and + (i32.shr_u + (get_local $10) + (i32.sub + (i32.const 16) + (tee_local $7 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (i32.add + (get_local $4) + (i32.const -16) + ) + (get_local $7) + ) + ) + (i32.add + (get_local $7) + (get_local $4) + ) + ) + ) + ) + ) + ) + (br_if $do-in + (i32.lt_u + (get_local $12) + (i32.load + (get_local $15) + ) + ) + ) + ) + ) + (block + (set_local $6 + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (set_local $9 + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + ) + (set_local $4 + (i32.load + (get_local $3) + ) + ) + (set_local $3 + (i32.load16_u + (get_local $2) + ) + ) + ) + ) + (set_local $2 + (i32.load16_u + (tee_local $5 + (i32.add + (get_local $1) + (i32.const 1026) + ) + ) + ) + ) + (i32.store16 + (get_local $6) + (tee_local $12 + (i32.or + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.shl + (tee_local $11 + (i32.load16_u + (i32.add + (get_local $1) + (i32.const 1024) + ) + ) + ) + (get_local $4) + ) + ) + ) + ) + (if + (i32.gt_s + (get_local $4) + (i32.sub + (i32.const 16) + (get_local $2) + ) + ) + (block + (set_local $3 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $3) + ) + (get_local $12) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $6) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $1) + (i32.add + (tee_local $1 + (i32.load + (get_local $1) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $1) + ) + (get_local $3) + ) + (i32.store16 + (get_local $6) + (i32.shr_u + (get_local $11) + (i32.sub + (i32.const 16) + (tee_local $1 + (i32.load + (get_local $9) + ) + ) + ) + ) + ) + (i32.store + (get_local $9) + (i32.add + (i32.add + (get_local $2) + (i32.const -16) + ) + (get_local $1) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5812) + ) + (i32.load16_u + (get_local $5) + ) + ) + ) + (block + (i32.store + (get_local $9) + (i32.add + (get_local $4) + (get_local $2) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5812) + ) + (i32.load16_u + (get_local $5) + ) + ) + ) + ) + ) + (func $_adler32 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (set_local $4 + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + ) + (set_local $0 + (i32.and + (get_local $0) + (i32.const 65535) + ) + ) + (if + (i32.eq + (get_local $2) + (i32.const 1) + ) + (return + (i32.or + (i32.shl + (if i32 + (i32.gt_u + (tee_local $1 + (i32.add + (if i32 + (i32.gt_u + (tee_local $0 + (i32.add + (i32.load8_u + (get_local $1) + ) + (get_local $0) + ) + ) + (i32.const 65520) + ) + (tee_local $0 + (i32.add + (get_local $0) + (i32.const -65521) + ) + ) + (get_local $0) + ) + (get_local $4) + ) + ) + (i32.const 65520) + ) + (i32.add + (get_local $1) + (i32.const 15) + ) + (get_local $1) + ) + (i32.const 16) + ) + (get_local $0) + ) + ) + ) + (if + (i32.eqz + (get_local $1) + ) + (return + (i32.const 1) + ) + ) + (if + (i32.lt_u + (get_local $2) + (i32.const 16) + ) + (block + (if + (get_local $2) + (loop $while-in + (set_local $4 + (i32.add + (tee_local $0 + (i32.add + (i32.load8_u + (get_local $1) + ) + (get_local $0) + ) + ) + (get_local $4) + ) + ) + (if + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (return + (i32.or + (i32.shl + (i32.rem_u + (get_local $4) + (i32.const 65521) + ) + (i32.const 16) + ) + (if i32 + (i32.gt_u + (get_local $0) + (i32.const 65520) + ) + (i32.add + (get_local $0) + (i32.const -65521) + ) + (get_local $0) + ) + ) + ) + ) + ) + (block $__rjto$2 + (block $__rjti$2 + (block $__rjti$1 + (block $__rjti$0 + (if + (i32.gt_u + (get_local $2) + (i32.const 5551) + ) + (block + (loop $while-in1 + (set_local $2 + (i32.add + (get_local $2) + (i32.const -5552) + ) + ) + (set_local $3 + (get_local $1) + ) + (set_local $5 + (i32.const 347) + ) + (loop $while-in3 + (set_local $0 + (i32.add + (tee_local $20 + (i32.add + (tee_local $19 + (i32.add + (tee_local $18 + (i32.add + (tee_local $17 + (i32.add + (tee_local $16 + (i32.add + (tee_local $15 + (i32.add + (tee_local $14 + (i32.add + (tee_local $13 + (i32.add + (tee_local $12 + (i32.add + (tee_local $11 + (i32.add + (tee_local $10 + (i32.add + (tee_local $9 + (i32.add + (tee_local $8 + (i32.add + (tee_local $7 + (i32.add + (tee_local $6 + (i32.add + (i32.load8_u + (get_local $3) + ) + (get_local $0) + ) + ) + (i32.load8_u offset=1 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=2 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=3 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=4 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=5 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=6 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=7 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=8 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=9 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=10 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=11 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=12 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=13 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=14 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=15 + (get_local $3) + ) + ) + ) + (set_local $4 + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $6) + (get_local $4) + ) + (get_local $7) + ) + (get_local $8) + ) + (get_local $9) + ) + (get_local $10) + ) + (get_local $11) + ) + (get_local $12) + ) + (get_local $13) + ) + (get_local $14) + ) + (get_local $15) + ) + (get_local $16) + ) + (get_local $17) + ) + (get_local $18) + ) + (get_local $19) + ) + (get_local $20) + ) + (get_local $0) + ) + ) + (if + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (br $while-in3) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $1) + (i32.const 5552) + ) + ) + (set_local $0 + (i32.rem_u + (get_local $0) + (i32.const 65521) + ) + ) + (set_local $4 + (i32.rem_u + (get_local $4) + (i32.const 65521) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.const 5551) + ) + (block + (set_local $1 + (get_local $3) + ) + (br $while-in1) + ) + (set_local $1 + (get_local $4) + ) + ) + ) + (if + (get_local $2) + (if + (i32.gt_u + (get_local $2) + (i32.const 15) + ) + (br $__rjti$0) + (br $__rjti$1) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (set_local $1 + (get_local $4) + ) + (br $__rjti$0) + ) + ) + (br $__rjto$2) + ) + (set_local $4 + (i32.add + (get_local $3) + (i32.add + (tee_local $6 + (i32.and + (tee_local $5 + (i32.add + (get_local $2) + (i32.const -16) + ) + ) + (i32.const -16) + ) + ) + (i32.const 16) + ) + ) + ) + (loop $while-in5 + (set_local $0 + (i32.add + (tee_local $21 + (i32.add + (tee_local $20 + (i32.add + (tee_local $19 + (i32.add + (tee_local $18 + (i32.add + (tee_local $17 + (i32.add + (tee_local $16 + (i32.add + (tee_local $15 + (i32.add + (tee_local $14 + (i32.add + (tee_local $13 + (i32.add + (tee_local $12 + (i32.add + (tee_local $11 + (i32.add + (tee_local $10 + (i32.add + (tee_local $9 + (i32.add + (tee_local $8 + (i32.add + (tee_local $7 + (i32.add + (i32.load8_u + (get_local $3) + ) + (get_local $0) + ) + ) + (i32.load8_u offset=1 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=2 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=3 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=4 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=5 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=6 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=7 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=8 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=9 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=10 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=11 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=12 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=13 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=14 + (get_local $3) + ) + ) + ) + (i32.load8_u offset=15 + (get_local $3) + ) + ) + ) + (set_local $1 + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $7) + (get_local $1) + ) + (get_local $8) + ) + (get_local $9) + ) + (get_local $10) + ) + (get_local $11) + ) + (get_local $12) + ) + (get_local $13) + ) + (get_local $14) + ) + (get_local $15) + ) + (get_local $16) + ) + (get_local $17) + ) + (get_local $18) + ) + (get_local $19) + ) + (get_local $20) + ) + (get_local $21) + ) + (get_local $0) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -16) + ) + ) + (i32.const 15) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 16) + ) + ) + (br $while-in5) + ) + ) + ) + (br_if $__rjti$2 + (i32.eq + (get_local $5) + (get_local $6) + ) + ) + (set_local $2 + (i32.sub + (get_local $5) + (get_local $6) + ) + ) + (set_local $3 + (get_local $4) + ) + ) + (loop $while-in7 + (set_local $1 + (i32.add + (tee_local $0 + (i32.add + (i32.load8_u + (get_local $3) + ) + (get_local $0) + ) + ) + (get_local $1) + ) + ) + (br_if $__rjti$2 + (i32.eqz + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const 1) + ) + ) + (br $while-in7) + ) + (br $__rjto$2) + ) + (set_local $0 + (i32.rem_u + (get_local $0) + (i32.const 65521) + ) + ) + (set_local $1 + (i32.rem_u + (get_local $1) + (i32.const 65521) + ) + ) + ) + (i32.or + (i32.shl + (get_local $1) + (i32.const 16) + ) + (get_local $0) + ) + ) + (func $_deflate_stored (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $6 + (if i32 + (i32.lt_u + (tee_local $2 + (i32.add + (i32.load offset=12 + (get_local $0) + ) + (i32.const -5) + ) + ) + (i32.const 65535) + ) + (get_local $2) + (i32.const 65535) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 116) + ) + ) + (set_local $8 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 92) + ) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.lt_u + (tee_local $2 + (i32.load + (get_local $12) + ) + ) + (i32.const 2) + ) + (block + (call $_fill_window + (get_local $0) + ) + (if + (i32.eqz + (i32.or + (tee_local $2 + (i32.load + (get_local $12) + ) + ) + (get_local $1) + ) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (get_local $2) + ) + ) + ) + ) + (i32.store + (get_local $8) + (tee_local $2 + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + ) + ) + (i32.store + (get_local $12) + (i32.const 0) + ) + (if + (i32.eqz + (i32.and + (i32.ne + (get_local $2) + (i32.const 0) + ) + (i32.lt_u + (get_local $2) + (tee_local $4 + (i32.add + (tee_local $3 + (i32.load + (get_local $10) + ) + ) + (get_local $6) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $12) + (i32.sub + (get_local $2) + (get_local $4) + ) + ) + (i32.store + (get_local $8) + (get_local $4) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $2 + (if i32 + (i32.gt_s + (get_local $3) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $14) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $8) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $9 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $11) + (i32.sub + (i32.load + (get_local $11) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (block + (set_local $0 + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + (set_local $2 + (i32.load + (get_local $8) + ) + ) + (set_local $3 + (i32.load + (get_local $10) + ) + ) + ) + ) + (br_if $while-in + (i32.lt_u + (tee_local $2 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.add + (i32.load + (get_local $13) + ) + (i32.const -262) + ) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $3 + (if i32 + (i32.gt_s + (get_local $3) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $14) + ) + (get_local $3) + ) + (i32.const 0) + ) + ) + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $8) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $3 + (i32.load offset=20 + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (tee_local $9 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $2 + (i32.load + (tee_local $11 + (i32.add + (get_local $9) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $2) + (tee_local $2 + (get_local $3) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $4) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $3) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (tee_local $7 + (i32.load + (get_local $5) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $2) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $9) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $2) + ) + ) + (i32.store + (get_local $11) + (i32.sub + (i32.load + (get_local $11) + ) + (get_local $2) + ) + ) + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.sub + (get_local $4) + (get_local $2) + ) + ) + (if + (i32.eq + (get_local $4) + (get_local $2) + ) + (i32.store + (get_local $5) + (i32.load offset=8 + (get_local $7) + ) + ) + ) + ) + ) + (br_if $while-in + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + ) + (set_local $0 + (i32.const 0) + ) + (br $__rjti$1) + ) + ) + (call $__tr_flush_block + (get_local $0) + (tee_local $2 + (if i32 + (i32.gt_s + (tee_local $6 + (i32.load + (get_local $10) + ) + ) + (i32.const -1) + ) + (i32.add + (i32.load + (get_local $14) + ) + (get_local $6) + ) + (i32.const 0) + ) + ) + (i32.sub + (i32.load + (get_local $8) + ) + (get_local $6) + ) + (tee_local $13 + (i32.eq + (get_local $1) + (i32.const 4) + ) + ) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $8) + ) + ) + (if + (if i32 + (i32.gt_u + (tee_local $2 + (i32.load offset=20 + (tee_local $6 + (i32.load + (tee_local $3 + (i32.add + (tee_local $7 + (i32.load + (get_local $0) + ) + ) + (i32.const 28) + ) + ) + ) + ) + ) + ) + (tee_local $1 + (i32.load + (tee_local $5 + (i32.add + (get_local $7) + (i32.const 16) + ) + ) + ) + ) + ) + (get_local $1) + (tee_local $1 + (get_local $2) + ) + ) + (block + (drop + (call $_memcpy + (i32.load + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 12) + ) + ) + ) + (i32.load offset=16 + (get_local $6) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $3 + (i32.add + (tee_local $4 + (i32.load + (get_local $3) + ) + ) + (i32.const 16) + ) + ) + (i32.add + (i32.load + (get_local $3) + ) + (get_local $1) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $7) + (i32.const 20) + ) + ) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.sub + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $6 + (i32.load + (tee_local $2 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.sub + (get_local $6) + (get_local $1) + ) + ) + (if + (i32.eq + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $3) + (i32.load offset=8 + (get_local $4) + ) + ) + ) + ) + ) + (if + (i32.load offset=16 + (i32.load + (get_local $0) + ) + ) + (return + (if i32 + (get_local $13) + (i32.const 3) + (i32.const 1) + ) + ) + (return + (if i32 + (get_local $13) + (i32.const 2) + (i32.const 0) + ) + ) + ) + ) + (get_local $0) + ) + (func $_crc32 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (if + (i32.eqz + (get_local $1) + ) + (return + (i32.const 0) + ) + ) + (set_local $0 + (i32.xor + (get_local $0) + (i32.const -1) + ) + ) + (block $label$break$L4 + (if + (get_local $2) + (block + (loop $while-in + (if + (i32.and + (get_local $1) + (i32.const 3) + ) + (block + (set_local $0 + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.xor + (i32.load8_u + (get_local $1) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + ) + (br_if $label$break$L4 + (i32.eqz + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.const 31) + ) + (block + (set_local $6 + (i32.add + (tee_local $5 + (i32.and + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -32) + ) + ) + (i32.const -32) + ) + ) + (i32.const 32) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $while-in1 + (set_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.load + (get_local $3) + ) + (get_local $0) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=4 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=8 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=12 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=16 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=20 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=24 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + (i32.load offset=28 + (get_local $3) + ) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -32) + ) + ) + (i32.const 31) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 32) + ) + ) + (br $while-in1) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $4) + (get_local $5) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (get_local $6) + ) + ) + ) + ) + (if + (i32.gt_u + (get_local $2) + (i32.const 3) + ) + (block + (set_local $6 + (i32.shl + (tee_local $5 + (i32.shr_u + (tee_local $4 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + (i32.const 2) + ) + ) + (i32.const 2) + ) + ) + (set_local $3 + (get_local $1) + ) + (loop $while-in3 + (set_local $0 + (i32.xor + (i32.xor + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (tee_local $0 + (i32.xor + (i32.load + (get_local $3) + ) + (get_local $0) + ) + ) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 3072) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 4096) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.and + (i32.shr_u + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 2) + ) + (i32.const 2048) + ) + ) + ) + (i32.load + (i32.add + (i32.shl + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + (i32.const 3) + ) + (block + (set_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (br $while-in3) + ) + ) + ) + (set_local $2 + (i32.sub + (get_local $4) + (get_local $6) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.shl + (i32.add + (get_local $5) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + ) + ) + (if + (get_local $2) + (loop $while-in5 + (set_local $0 + (i32.xor + (i32.load + (i32.add + (i32.shl + (i32.xor + (i32.load8_u + (get_local $1) + ) + (i32.and + (get_local $0) + (i32.const 255) + ) + ) + (i32.const 2) + ) + (i32.const 1024) + ) + ) + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + ) + (if + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in5) + ) + ) + ) + ) + ) + ) + ) + (i32.xor + (get_local $0) + (i32.const -1) + ) + ) + (func $__tr_align (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $2 + (i32.and + (tee_local $1 + (i32.or + (i32.load16_u + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (i32.shl + (i32.const 2) + (tee_local $4 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + ) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + (i32.store16 + (get_local $5) + (get_local $2) + ) + (i32.store + (get_local $6) + (tee_local $1 + (if i32 + (i32.gt_s + (get_local $4) + (i32.const 13) + ) + (block i32 + (set_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $2) + ) + (get_local $1) + ) + (set_local $1 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (i32.store16 + (get_local $5) + (tee_local $2 + (i32.and + (i32.shr_u + (i32.const 2) + (i32.sub + (i32.const 16) + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + ) + ) + (i32.const 65535) + ) + ) + ) + (i32.add + (get_local $1) + (i32.const -13) + ) + ) + (i32.add + (get_local $4) + (i32.const 3) + ) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $1 + (if i32 + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (block i32 + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (i32.store16 + (get_local $5) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -9) + ) + ) + (i32.add + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 16) + ) + (block + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (i32.store16 + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (set_local $1 + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + ) + (if + (i32.gt_s + (get_local $1) + (i32.const 7) + ) + (block + (set_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load offset=8 + (get_local $0) + ) + (get_local $4) + ) + (get_local $2) + ) + (i32.store16 + (get_local $5) + (tee_local $2 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + ) + (i32.store + (get_local $6) + (tee_local $1 + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -8) + ) + ) + ) + ) + ) + ) + (if + (i32.ge_s + (i32.add + (i32.sub + (i32.const 11) + (get_local $1) + ) + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 5812) + ) + ) + ) + ) + (i32.const 9) + ) + (block + (i32.store + (get_local $7) + (i32.const 7) + ) + (return) + ) + ) + (i32.store16 + (get_local $5) + (tee_local $2 + (i32.or + (i32.and + (get_local $2) + (i32.const 65535) + ) + (i32.shl + (i32.const 2) + (get_local $1) + ) + ) + ) + ) + (set_local $1 + (if i32 + (i32.gt_s + (get_local $1) + (i32.const 13) + ) + (block i32 + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (i32.store16 + (get_local $5) + (tee_local $2 + (i32.shr_u + (i32.const 2) + (i32.sub + (i32.const 16) + (tee_local $1 + (i32.load + (get_local $6) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $1) + (i32.const -13) + ) + ) + (i32.add + (get_local $1) + (i32.const 3) + ) + ) + ) + (set_local $2 + (i32.and + (get_local $2) + (i32.const 255) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $6) + (tee_local $1 + (if i32 + (i32.gt_s + (get_local $1) + (i32.const 9) + ) + (block i32 + (set_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $1) + ) + (get_local $2) + ) + (set_local $1 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $2 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $2) + ) + (get_local $1) + ) + (i32.store16 + (get_local $5) + (i32.const 0) + ) + (set_local $2 + (i32.const 0) + ) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -9) + ) + ) + (i32.add + (get_local $1) + (i32.const 7) + ) + ) + ) + ) + (if + (i32.eq + (get_local $1) + (i32.const 16) + ) + (block + (set_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $4) + ) + (get_local $2) + ) + (set_local $2 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $1) + ) + (get_local $0) + ) + (get_local $2) + ) + (i32.store16 + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $7) + (i32.const 7) + ) + (return) + ) + ) + (if + (i32.le_s + (get_local $1) + (i32.const 7) + ) + (block + (i32.store + (get_local $7) + (i32.const 7) + ) + (return) + ) + ) + (set_local $4 + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load offset=8 + (get_local $0) + ) + (get_local $4) + ) + (get_local $2) + ) + (i32.store16 + (get_local $5) + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (i32.const -8) + ) + ) + (i32.store + (get_local $7) + (i32.const 7) + ) + ) + (func $_deflateInit2_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (result i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (if + (i32.eqz + (get_local $6) + ) + (return + (i32.const -6) + ) + ) + (if + (i32.or + (i32.ne + (get_local $7) + (i32.const 56) + ) + (i32.ne + (i32.load8_s + (get_local $6) + ) + (i32.const 49) + ) + ) + (return + (i32.const -6) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (i32.store + (tee_local $13 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (i32.const 0) + ) + (if + (i32.eqz + (tee_local $6 + (i32.load + (tee_local $10 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $10) + (i32.const 3) + ) + (i32.store offset=40 + (get_local $0) + (i32.const 0) + ) + (set_local $6 + (i32.const 3) + ) + ) + ) + (if + (i32.eqz + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + ) + ) + (i32.store + (get_local $8) + (i32.const 1) + ) + ) + (set_local $9 + (if i32 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + (block i32 + (set_local $3 + (i32.sub + (i32.const 0) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block i32 + (if + (tee_local $7 + (i32.gt_s + (get_local $3) + (i32.const 15) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (i32.const -16) + ) + ) + ) + (if i32 + (get_local $7) + (i32.const 2) + (i32.const 1) + ) + ) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $5) + (i32.const 4) + ) + (i32.or + (i32.gt_u + (if i32 + (i32.eq + (get_local $1) + (i32.const -1) + ) + (tee_local $1 + (i32.const 6) + ) + (get_local $1) + ) + (i32.const 9) + ) + (i32.or + (i32.or + (i32.ne + (get_local $2) + (i32.const 8) + ) + (i32.gt_u + (i32.add + (get_local $4) + (i32.const -1) + ) + (i32.const 8) + ) + ) + (i32.ne + (i32.and + (get_local $3) + (i32.const -8) + ) + (i32.const 8) + ) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (tee_local $2 + (call_indirect $FUNCSIG$iiii + (i32.load + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + (i32.const 1) + (i32.const 5828) + (i32.add + (i32.and + (get_local $6) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (return + (i32.const -4) + ) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $2) + ) + (i32.store + (get_local $2) + (get_local $0) + ) + (i32.store offset=24 + (get_local $2) + (get_local $9) + ) + (i32.store offset=28 + (get_local $2) + (i32.const 0) + ) + (i32.store offset=48 + (get_local $2) + (if i32 + (i32.eq + (get_local $3) + (i32.const 8) + ) + (tee_local $3 + (i32.const 9) + ) + (get_local $3) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $2) + (i32.const 44) + ) + ) + (tee_local $3 + (i32.shl + (i32.const 1) + (get_local $3) + ) + ) + ) + (i32.store offset=52 + (get_local $2) + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + (i32.store offset=80 + (get_local $2) + (tee_local $11 + (i32.add + (get_local $4) + (i32.const 7) + ) + ) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $2) + (i32.const 76) + ) + ) + (tee_local $11 + (i32.shl + (i32.const 1) + (get_local $11) + ) + ) + ) + (i32.store offset=84 + (get_local $2) + (i32.add + (get_local $11) + (i32.const -1) + ) + ) + (i32.store offset=88 + (get_local $2) + (i32.div_u + (i32.add + (get_local $4) + (i32.const 9) + ) + (i32.const 3) + ) + ) + (i32.store + (tee_local $11 + (i32.add + (get_local $2) + (i32.const 56) + ) + ) + (call_indirect $FUNCSIG$iiii + (i32.load + (get_local $7) + ) + (get_local $3) + (i32.const 2) + (i32.add + (i32.and + (i32.load + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (tee_local $14 + (i32.add + (get_local $2) + (i32.const 64) + ) + ) + (tee_local $3 + (call_indirect $FUNCSIG$iiii + (i32.load + (get_local $7) + ) + (i32.load + (get_local $9) + ) + (i32.const 2) + (i32.add + (i32.and + (i32.load + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (drop + (call $_memset + (get_local $3) + (i32.const 0) + (i32.shl + (i32.load + (get_local $9) + ) + (i32.const 1) + ) + ) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $2) + (i32.const 68) + ) + ) + (call_indirect $FUNCSIG$iiii + (i32.load + (get_local $7) + ) + (i32.load + (get_local $12) + ) + (i32.const 2) + (i32.add + (i32.and + (i32.load + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (i32.store + (i32.add + (get_local $2) + (i32.const 5824) + ) + (i32.const 0) + ) + (i32.store + (tee_local $12 + (i32.add + (get_local $2) + (i32.const 5788) + ) + ) + (tee_local $3 + (i32.shl + (i32.const 1) + (i32.add + (get_local $4) + (i32.const 6) + ) + ) + ) + ) + (i32.store offset=8 + (get_local $2) + (tee_local $3 + (call_indirect $FUNCSIG$iiii + (i32.load + (get_local $7) + ) + (get_local $3) + (i32.const 4) + (i32.add + (i32.and + (i32.load + (get_local $10) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=12 + (get_local $2) + (i32.shl + (tee_local $4 + (i32.load + (get_local $12) + ) + ) + (i32.const 2) + ) + ) + (if + (i32.load + (get_local $11) + ) + (if + (i32.load + (get_local $14) + ) + (if + (i32.eqz + (i32.or + (i32.eqz + (i32.load + (get_local $9) + ) + ) + (i32.eqz + (get_local $3) + ) + ) + ) + (block + (i32.store + (i32.add + (get_local $2) + (i32.const 5796) + ) + (i32.add + (get_local $3) + (i32.shl + (i32.shr_u + (get_local $4) + (i32.const 1) + ) + (i32.const 1) + ) + ) + ) + (i32.store + (i32.add + (get_local $2) + (i32.const 5784) + ) + (i32.add + (get_local $3) + (i32.mul + (get_local $4) + (i32.const 3) + ) + ) + ) + (i32.store offset=132 + (get_local $2) + (get_local $1) + ) + (i32.store offset=136 + (get_local $2) + (get_local $5) + ) + (i32.store8 offset=36 + (get_local $2) + (i32.const 8) + ) + (return + (call $_deflateReset + (get_local $0) + ) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $2) + (i32.const 666) + ) + (i32.store + (get_local $13) + (i32.load + (i32.const 9968) + ) + ) + (if + (i32.eqz + (tee_local $0 + (i32.load + (get_local $6) + ) + ) + ) + (return + (i32.const -4) + ) + ) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (i32.load offset=4 + (get_local $0) + ) + (i32.const 42) + ) + ) + ) + (br $switch) + ) + (return + (i32.const -4) + ) + ) + (if + (tee_local $1 + (i32.load offset=8 + (get_local $0) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $7) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=68 + (get_local $0) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $7) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=64 + (get_local $0) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $7) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + ) + ) + (if + (tee_local $1 + (i32.load offset=56 + (get_local $0) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $7) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $0 + (i32.load + (get_local $6) + ) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $7) + ) + (get_local $0) + (i32.add + (i32.and + (i32.load + (get_local $8) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.const -4) + ) + (func $_longest_match (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (set_local $7 + (i32.load offset=124 + (get_local $0) + ) + ) + (set_local $2 + (i32.add + (tee_local $12 + (i32.load offset=56 + (get_local $0) + ) + ) + (tee_local $4 + (i32.load offset=108 + (get_local $0) + ) + ) + ) + ) + (set_local $5 + (i32.load offset=120 + (get_local $0) + ) + ) + (set_local $6 + (i32.load offset=144 + (get_local $0) + ) + ) + (set_local $13 + (if i32 + (i32.gt_u + (get_local $4) + (tee_local $3 + (i32.add + (i32.load offset=44 + (get_local $0) + ) + (i32.const -262) + ) + ) + ) + (i32.sub + (get_local $4) + (get_local $3) + ) + (i32.const 0) + ) + ) + (set_local $14 + (i32.load offset=64 + (get_local $0) + ) + ) + (set_local $15 + (i32.load offset=52 + (get_local $0) + ) + ) + (set_local $9 + (i32.add + (get_local $2) + (i32.const 258) + ) + ) + (set_local $16 + (if i32 + (i32.gt_u + (get_local $6) + (tee_local $10 + (i32.load offset=116 + (get_local $0) + ) + ) + ) + (get_local $10) + (get_local $6) + ) + ) + (set_local $17 + (i32.add + (get_local $0) + (i32.const 112) + ) + ) + (set_local $18 + (get_local $9) + ) + (set_local $4 + (i32.add + (get_local $9) + (i32.const -258) + ) + ) + (set_local $8 + (get_local $1) + ) + (set_local $3 + (get_local $5) + ) + (if + (i32.ge_u + (get_local $5) + (i32.load offset=140 + (get_local $0) + ) + ) + (set_local $7 + (i32.shr_u + (get_local $7) + (i32.const 2) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (set_local $6 + (i32.load8_s + (i32.add + (get_local $2) + (get_local $5) + ) + ) + ) + (set_local $5 + (i32.load8_s + (i32.add + (get_local $2) + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (block $__rjti$0 + (loop $while-in + (set_local $0 + (if i32 + (i32.eq + (i32.load8_u + (i32.add + (tee_local $0 + (i32.add + (get_local $12) + (get_local $8) + ) + ) + (get_local $3) + ) + ) + (i32.and + (get_local $6) + (i32.const 255) + ) + ) + (if i32 + (i32.eq + (i32.load8_u + (i32.add + (get_local $0) + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + (i32.and + (get_local $5) + (i32.const 255) + ) + ) + (if i32 + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.load8_s + (get_local $1) + ) + ) + (if i32 + (i32.eq + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.load8_s offset=1 + (get_local $1) + ) + ) + (block i32 + (set_local $0 + (i32.add + (get_local $1) + (i32.const 2) + ) + ) + (loop $while-in1 + (block $while-out0 + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.load8_s offset=2 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 2) + ) + ) + ) + (i32.load8_s offset=3 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 3) + ) + ) + ) + (i32.load8_s offset=4 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + (i32.load8_s offset=5 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 5) + ) + ) + ) + (i32.load8_s offset=6 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 6) + ) + ) + ) + (i32.load8_s offset=7 + (get_local $2) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (set_local $11 + (get_local $2) + ) + (if + (i32.ne + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 7) + ) + ) + ) + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 8) + ) + ) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-out0) + ) + ) + (br_if $while-in1 + (if i32 + (i32.lt_u + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + (get_local $9) + ) + (i32.eq + (i32.load8_s + (get_local $0) + ) + (i32.load8_s offset=9 + (get_local $11) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (if i32 + (i32.gt_s + (tee_local $2 + (i32.add + (tee_local $11 + (i32.sub + (get_local $0) + (get_local $18) + ) + ) + (i32.const 258) + ) + ) + (get_local $3) + ) + (block i32 + (i32.store + (get_local $17) + (get_local $8) + ) + (if + (i32.ge_s + (get_local $2) + (get_local $16) + ) + (block + (set_local $0 + (get_local $2) + ) + (br $__rjti$0) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $6 + (i32.load8_s + (i32.add + (get_local $4) + (get_local $2) + ) + ) + ) + (set_local $5 + (i32.load8_s + (i32.add + (get_local $4) + (i32.add + (get_local $11) + (i32.const 257) + ) + ) + ) + ) + (get_local $2) + ) + (block i32 + (set_local $1 + (get_local $4) + ) + (get_local $3) + ) + ) + ) + (get_local $3) + ) + (get_local $3) + ) + (get_local $3) + ) + (get_local $3) + ) + ) + (br_if $__rjti$0 + (i32.le_u + (tee_local $8 + (i32.load16_u + (i32.add + (get_local $14) + (i32.shl + (i32.and + (get_local $8) + (get_local $15) + ) + (i32.const 1) + ) + ) + ) + ) + (get_local $13) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -1) + ) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (br $while-in) + ) + ) + (if i32 + (i32.gt_u + (get_local $0) + (get_local $10) + ) + (get_local $10) + (get_local $0) + ) + ) + (func $_fill_window (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (set_local $10 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $7 + (i32.add + (get_local $0) + (i32.const 108) + ) + ) + (set_local $15 + (i32.add + (tee_local $3 + (i32.load + (tee_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.const -262) + ) + ) + (set_local $8 + (i32.add + (get_local $0) + (i32.const 56) + ) + ) + (set_local $11 + (i32.add + (get_local $0) + (i32.const 72) + ) + ) + (set_local $16 + (i32.add + (get_local $0) + (i32.const 88) + ) + ) + (set_local $17 + (i32.add + (get_local $0) + (i32.const 84) + ) + ) + (set_local $12 + (i32.add + (get_local $0) + (i32.const 112) + ) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 92) + ) + ) + (set_local $18 + (i32.add + (get_local $0) + (i32.const 76) + ) + ) + (set_local $19 + (i32.add + (get_local $0) + (i32.const 68) + ) + ) + (set_local $20 + (i32.add + (get_local $0) + (i32.const 64) + ) + ) + (set_local $1 + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 116) + ) + ) + ) + ) + (set_local $2 + (get_local $3) + ) + (block $__rjto$0 + (block $__rjti$0 + (loop $while-in + (block $while-out + (set_local $4 + (i32.sub + (i32.sub + (i32.load + (get_local $10) + ) + (get_local $1) + ) + (tee_local $1 + (i32.load + (get_local $7) + ) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.add + (get_local $15) + (get_local $2) + ) + ) + (set_local $2 + (get_local $1) + ) + (block + (drop + (call $_memcpy + (tee_local $1 + (i32.load + (get_local $8) + ) + ) + (i32.add + (get_local $1) + (get_local $3) + ) + (get_local $3) + ) + ) + (i32.store + (get_local $12) + (i32.sub + (i32.load + (get_local $12) + ) + (get_local $3) + ) + ) + (i32.store + (get_local $7) + (tee_local $2 + (i32.sub + (i32.load + (get_local $7) + ) + (get_local $3) + ) + ) + ) + (i32.store + (get_local $13) + (i32.sub + (i32.load + (get_local $13) + ) + (get_local $3) + ) + ) + (set_local $5 + (tee_local $1 + (i32.load + (get_local $18) + ) + ) + ) + (set_local $1 + (i32.add + (i32.load + (get_local $19) + ) + (i32.shl + (get_local $1) + (i32.const 1) + ) + ) + ) + (loop $do-in + (set_local $6 + (i32.load16_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -2) + ) + ) + ) + ) + (i32.store16 + (get_local $1) + (if i32 + (i32.lt_u + (get_local $6) + (get_local $3) + ) + (i32.const 0) + (i32.and + (i32.sub + (get_local $6) + (get_local $3) + ) + (i32.const 65535) + ) + ) + ) + (br_if $do-in + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -1) + ) + ) + ) + ) + (set_local $1 + (get_local $3) + ) + (set_local $5 + (i32.add + (i32.load + (get_local $20) + ) + (i32.shl + (get_local $3) + (i32.const 1) + ) + ) + ) + (loop $do-in1 + (set_local $6 + (i32.load16_u + (tee_local $5 + (i32.add + (get_local $5) + (i32.const -2) + ) + ) + ) + ) + (i32.store16 + (get_local $5) + (if i32 + (i32.lt_u + (get_local $6) + (get_local $3) + ) + (i32.const 0) + (i32.and + (i32.sub + (get_local $6) + (get_local $3) + ) + (i32.const 65535) + ) + ) + ) + (br_if $do-in1 + (tee_local $1 + (i32.add + (get_local $1) + (i32.const -1) + ) + ) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (get_local $3) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eqz + (tee_local $5 + (i32.load + (tee_local $6 + (i32.add + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 4) + ) + ) + ) + ) + ) + ) + (set_local $21 + (i32.add + (i32.add + (i32.load + (get_local $8) + ) + (get_local $2) + ) + (tee_local $2 + (i32.load + (get_local $9) + ) + ) + ) + ) + (i32.store + (get_local $9) + (tee_local $1 + (i32.add + (tee_local $1 + (if i32 + (if i32 + (i32.gt_u + (get_local $5) + (get_local $4) + ) + (get_local $4) + (tee_local $4 + (get_local $5) + ) + ) + (block i32 + (i32.store + (get_local $6) + (i32.sub + (get_local $5) + (get_local $4) + ) + ) + (drop + (call $_memcpy + (get_local $21) + (i32.load + (tee_local $2 + (block $switch i32 + (block $switch-default + (block $switch-case2 + (block $switch-case + (br_table $switch-case $switch-case2 $switch-default + (i32.sub + (i32.load offset=24 + (i32.load offset=28 + (get_local $1) + ) + ) + (i32.const 1) + ) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 48) + ) + ) + (call $_adler32 + (i32.load + (get_local $2) + ) + (i32.load + (get_local $1) + ) + (get_local $4) + ) + ) + (br $switch + (get_local $1) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $1) + (i32.const 48) + ) + ) + (call $_crc32 + (i32.load + (get_local $2) + ) + (i32.load + (get_local $1) + ) + (get_local $4) + ) + ) + (br $switch + (get_local $1) + ) + ) + (get_local $1) + ) + ) + ) + (get_local $4) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $4) + ) + ) + (i32.store + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $4) + ) + ) + (i32.load + (get_local $9) + ) + ) + (block i32 + (set_local $4 + (i32.const 0) + ) + (get_local $2) + ) + ) + ) + (get_local $4) + ) + ) + ) + (if + (i32.gt_u + (get_local $1) + (i32.const 2) + ) + (block + (i32.store + (get_local $11) + (tee_local $5 + (i32.load8_u + (i32.add + (tee_local $2 + (i32.load + (get_local $8) + ) + ) + (tee_local $4 + (i32.load + (get_local $7) + ) + ) + ) + ) + ) + ) + (i32.store + (get_local $11) + (i32.and + (i32.xor + (i32.load8_u + (i32.add + (get_local $2) + (i32.add + (get_local $4) + (i32.const 1) + ) + ) + ) + (i32.shl + (get_local $5) + (i32.load + (get_local $16) + ) + ) + ) + (i32.load + (get_local $17) + ) + ) + ) + (br_if $while-out + (i32.ge_u + (get_local $1) + (i32.const 262) + ) + ) + ) + ) + (if + (i32.load offset=4 + (i32.load + (get_local $0) + ) + ) + (block + (set_local $2 + (i32.load + (get_local $14) + ) + ) + (br $while-in) + ) + ) + ) + ) + (br $__rjto$0) + ) + (return) + ) + (if + (i32.le_u + (tee_local $3 + (i32.load + (get_local $10) + ) + ) + (tee_local $0 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 5824) + ) + ) + ) + ) + ) + (return) + ) + (if + (i32.lt_u + (get_local $0) + (tee_local $1 + (i32.add + (get_local $1) + (i32.load + (get_local $7) + ) + ) + ) + ) + (block + (drop + (call $_memset + (i32.add + (i32.load + (get_local $8) + ) + (get_local $1) + ) + (i32.const 0) + (if i32 + (i32.gt_u + (tee_local $0 + (i32.sub + (get_local $3) + (get_local $1) + ) + ) + (i32.const 258) + ) + (tee_local $0 + (i32.const 258) + ) + (get_local $0) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (return) + ) + ) + (if + (i32.le_u + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 258) + ) + ) + (get_local $0) + ) + (return) + ) + (drop + (call $_memset + (i32.add + (i32.load + (get_local $8) + ) + (get_local $0) + ) + (i32.const 0) + (if i32 + (i32.gt_u + (tee_local $1 + (i32.sub + (get_local $1) + (get_local $0) + ) + ) + (tee_local $0 + (i32.sub + (get_local $3) + (get_local $0) + ) + ) + ) + (get_local $0) + (tee_local $0 + (get_local $1) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (i32.load + (get_local $2) + ) + (get_local $0) + ) + ) + ) + (func $__tr_stored_block (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (set_local $3 + (i32.or + (i32.load16_u + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 5816) + ) + ) + ) + (i32.shl + (tee_local $6 + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (tee_local $4 + (i32.load + (tee_local $8 + (i32.add + (get_local $0) + (i32.const 5820) + ) + ) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $5) + (get_local $3) + ) + (set_local $4 + (if i32 + (i32.gt_s + (get_local $4) + (i32.const 13) + ) + (block i32 + (set_local $7 + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.add + (get_local $7) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $7) + ) + (get_local $3) + ) + (set_local $3 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $4) + (i32.add + (tee_local $4 + (i32.load + (get_local $4) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $9) + ) + (get_local $4) + ) + (get_local $3) + ) + (i32.store16 + (get_local $5) + (tee_local $3 + (i32.shr_u + (get_local $6) + (i32.sub + (i32.const 16) + (tee_local $4 + (i32.load + (get_local $8) + ) + ) + ) + ) + ) + ) + (i32.add + (get_local $4) + (i32.const -13) + ) + ) + (i32.add + (get_local $4) + (i32.const 3) + ) + ) + ) + (set_local $7 + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store + (get_local $8) + (get_local $4) + ) + (if + (i32.gt_s + (get_local $4) + (i32.const 8) + ) + (block + (set_local $6 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $6) + ) + (get_local $7) + ) + (set_local $7 + (i32.shr_u + (i32.load16_u + (get_local $5) + ) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $6 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $6) + ) + (get_local $7) + ) + ) + (block + (set_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (if + (i32.gt_s + (get_local $4) + (i32.const 0) + ) + (block + (i32.store + (get_local $3) + (i32.add + (tee_local $6 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + (get_local $6) + ) + (get_local $7) + ) + ) + (set_local $4 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (i32.store16 + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $8) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5812) + ) + (i32.const 8) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $0) + ) + (get_local $2) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $0) + ) + (i32.shr_u + (get_local $2) + (i32.const 8) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $0 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $0) + ) + (tee_local $0 + (i32.xor + (i32.and + (get_local $2) + (i32.const 65535) + ) + (i32.const 65535) + ) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $5 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $5) + ) + (i32.shr_u + (get_local $0) + (i32.const 8) + ) + ) + (if + (i32.eqz + (get_local $2) + ) + (return) + ) + (loop $while-in + (set_local $0 + (i32.load8_s + (get_local $1) + ) + ) + (i32.store + (get_local $3) + (i32.add + (tee_local $5 + (i32.load + (get_local $3) + ) + ) + (i32.const 1) + ) + ) + (i32.store8 + (i32.add + (i32.load + (get_local $4) + ) + (get_local $5) + ) + (get_local $0) + ) + (if + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (block + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + (func $_pop_arg (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 f64) + (local $5 i32) + (block $label$break$L1 + (if + (i32.le_u + (get_local $1) + (i32.const 20) + ) + (block $switch-default + (block $switch-case9 + (block $switch-case8 + (block $switch-case7 + (block $switch-case6 + (block $switch-case5 + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case + (br_table $switch-case $switch-case1 $switch-case2 $switch-case3 $switch-case4 $switch-case5 $switch-case6 $switch-case7 $switch-case8 $switch-case9 $switch-default + (i32.sub + (get_local $1) + (i32.const 9) + ) + ) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $1 + (i32.load + (tee_local $3 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $1) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (get_local $3) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $5 + (i32.load + (tee_local $3 + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + ) + (set_local $3 + (i32.load offset=4 + (get_local $3) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (i32.store + (get_local $0) + (get_local $5) + ) + (i32.store offset=4 + (get_local $0) + (get_local $3) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 65535) + ) + (i32.const 16) + ) + (i32.const 16) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 65535) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (tee_local $1 + (i32.shr_s + (i32.shl + (i32.and + (get_local $3) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.const 24) + ) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.shr_s + (i32.shl + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (br $label$break$L1) + ) + (set_local $3 + (i32.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 3) + ) + (i32.const -4) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $3) + (i32.const 255) + ) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + (br $label$break$L1) + ) + (set_local $4 + (f64.load + (tee_local $1 + (i32.and + (i32.add + (i32.load + (get_local $2) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (f64.store + (get_local $0) + (get_local $4) + ) + ) + ) + ) + ) + (func $___stdio_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $8 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 48) + ) + ) + (set_local $9 + (i32.add + (get_local $8) + (i32.const 16) + ) + ) + (set_local $10 + (get_local $8) + ) + (i32.store + (tee_local $4 + (i32.add + (get_local $8) + (i32.const 32) + ) + ) + (tee_local $3 + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $4) + (tee_local $3 + (i32.sub + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (get_local $3) + ) + ) + ) + (i32.store offset=8 + (get_local $4) + (get_local $1) + ) + (i32.store offset=12 + (get_local $4) + (get_local $2) + ) + (set_local $13 + (i32.add + (get_local $0) + (i32.const 60) + ) + ) + (set_local $14 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + (set_local $1 + (get_local $4) + ) + (set_local $4 + (i32.const 2) + ) + (set_local $12 + (i32.add + (get_local $3) + (get_local $2) + ) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.load + (i32.const 17748) + ) + (block + (call $_pthread_cleanup_push + (i32.const 1) + (get_local $0) + ) + (i32.store + (get_local $10) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $10) + (get_local $1) + ) + (i32.store offset=8 + (get_local $10) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $10) + ) + ) + ) + (call $_pthread_cleanup_pop + (i32.const 0) + ) + ) + (block + (i32.store + (get_local $9) + (i32.load + (get_local $13) + ) + ) + (i32.store offset=4 + (get_local $9) + (get_local $1) + ) + (i32.store offset=8 + (get_local $9) + (get_local $4) + ) + (set_local $3 + (call $___syscall_ret + (call $___syscall146 + (i32.const 146) + (get_local $9) + ) + ) + ) + ) + ) + (br_if $__rjti$0 + (i32.eq + (get_local $12) + (get_local $3) + ) + ) + (br_if $__rjti$1 + (i32.lt_s + (get_local $3) + (i32.const 0) + ) + ) + (set_local $5 + (if i32 + (i32.gt_u + (get_local $3) + (tee_local $5 + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (block i32 + (i32.store + (get_local $6) + (tee_local $7 + (i32.load + (get_local $14) + ) + ) + ) + (i32.store + (get_local $11) + (get_local $7) + ) + (set_local $7 + (i32.load offset=12 + (get_local $1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 8) + ) + ) + (set_local $4 + (i32.add + (get_local $4) + (i32.const -1) + ) + ) + (i32.sub + (get_local $3) + (get_local $5) + ) + ) + (if i32 + (i32.eq + (get_local $4) + (i32.const 2) + ) + (block i32 + (i32.store + (get_local $6) + (i32.add + (i32.load + (get_local $6) + ) + (get_local $3) + ) + ) + (set_local $7 + (get_local $5) + ) + (set_local $4 + (i32.const 2) + ) + (get_local $3) + ) + (block i32 + (set_local $7 + (get_local $5) + ) + (get_local $3) + ) + ) + ) + ) + (i32.store + (get_local $1) + (i32.add + (i32.load + (get_local $1) + ) + (get_local $5) + ) + ) + (i32.store offset=4 + (get_local $1) + (i32.sub + (get_local $7) + (get_local $5) + ) + ) + (set_local $12 + (i32.sub + (get_local $12) + (get_local $3) + ) + ) + (br $while-in) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (tee_local $1 + (i32.load + (get_local $14) + ) + ) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.store + (get_local $6) + (get_local $1) + ) + (i32.store + (get_local $11) + (get_local $1) + ) + (br $__rjto$1) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $6) + (i32.const 0) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $0) + (i32.or + (i32.load + (get_local $0) + ) + (i32.const 32) + ) + ) + (set_local $2 + (if i32 + (i32.eq + (get_local $4) + (i32.const 2) + ) + (i32.const 0) + (i32.sub + (get_local $2) + (i32.load offset=4 + (get_local $1) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $8) + ) + (get_local $2) + ) + (func $_memchr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (block $label$break$L8 + (block $__rjti$2 + (block $__rjti$1 + (if + (i32.and + (tee_local $3 + (i32.ne + (get_local $2) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 0) + ) + ) + (block + (set_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (loop $while-in + (br_if $__rjti$2 + (i32.eq + (i32.load8_u + (get_local $0) + ) + (get_local $4) + ) + ) + (br_if $while-in + (i32.and + (tee_local $3 + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.const 0) + ) + ) + (i32.ne + (i32.and + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.const 3) + ) + (i32.const 0) + ) + ) + ) + (br $__rjti$1) + ) + ) + ) + ) + (br_if $__rjti$2 + (get_local $3) + ) + (set_local $2 + (i32.const 0) + ) + (br $label$break$L8) + ) + (if + (i32.ne + (i32.load8_u + (get_local $0) + ) + (tee_local $4 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block + (set_local $3 + (i32.mul + (get_local $5) + (i32.const 16843009) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (get_local $2) + (i32.const 3) + ) + ) + (loop $while-in3 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.xor + (i32.load + (get_local $0) + ) + (get_local $3) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br_if $while-in3 + (i32.gt_u + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -4) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (get_local $2) + ) + (block + (set_local $2 + (i32.const 0) + ) + (br $label$break$L8) + ) + ) + ) + (loop $while-in5 + (br_if $label$break$L8 + (i32.eq + (i32.load8_u + (get_local $0) + ) + (get_local $4) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br_if $while-in5 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + (set_local $2 + (i32.const 0) + ) + ) + ) + ) + ) + (if i32 + (get_local $2) + (get_local $0) + (i32.const 0) + ) + ) + (func $_inflateInit2_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (if + (i32.eqz + (get_local $2) + ) + (return + (i32.const -6) + ) + ) + (if + (i32.or + (i32.ne + (get_local $3) + (i32.const 56) + ) + (i32.ne + (i32.load8_s + (get_local $2) + ) + (i32.const 49) + ) + ) + (return + (i32.const -6) + ) + ) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (i32.store + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 24) + ) + ) + (i32.const 0) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 32) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $3) + (i32.const 3) + ) + (i32.store offset=40 + (get_local $0) + (i32.const 0) + ) + (set_local $2 + (i32.const 3) + ) + ) + ) + (if + (i32.eqz + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + ) + ) + (i32.store + (get_local $4) + (i32.const 1) + ) + ) + (if + (i32.eqz + (tee_local $3 + (call_indirect $FUNCSIG$iiii + (i32.load + (tee_local $6 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + (i32.const 1) + (i32.const 7116) + (i32.add + (i32.and + (get_local $2) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (return + (i32.const -4) + ) + ) + (i32.store + (tee_local $7 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $3) + ) + (i32.store offset=52 + (get_local $3) + (i32.const 0) + ) + (set_local $1 + (if i32 + (i32.lt_s + (get_local $1) + (i32.const 0) + ) + (block i32 + (set_local $2 + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (i32.const 0) + ) + (block i32 + (set_local $2 + (if i32 + (i32.lt_s + (get_local $1) + (i32.const 48) + ) + (i32.and + (get_local $1) + (i32.const 15) + ) + (get_local $1) + ) + ) + (i32.add + (i32.shr_s + (get_local $1) + (i32.const 4) + ) + (i32.const 1) + ) + ) + ) + ) + (if i32 + (i32.or + (i32.eqz + (get_local $2) + ) + (i32.eq + (i32.and + (get_local $2) + (i32.const -8) + ) + (i32.const 8) + ) + ) + (block i32 + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=36 + (get_local $3) + (get_local $2) + ) + (i32.store offset=28 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store offset=48 + (get_local $0) + (i32.const 1) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=12 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=20 + (get_local $3) + (i32.const 32768) + ) + (i32.store offset=32 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=40 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=44 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=48 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=56 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=60 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=108 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 1328) + ) + ) + ) + (i32.store offset=80 + (get_local $3) + (get_local $0) + ) + (i32.store offset=76 + (get_local $3) + (get_local $0) + ) + (i32.store + (i32.add + (get_local $3) + (i32.const 7104) + ) + (i32.const 1) + ) + (i32.store + (i32.add + (get_local $3) + (i32.const 7108) + ) + (i32.const -1) + ) + (i32.const 0) + ) + (block i32 + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $6) + ) + (get_local $3) + (i32.add + (i32.and + (i32.load + (get_local $4) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (i32.store + (get_local $7) + (i32.const 0) + ) + (i32.const -2) + ) + ) + ) + (func $_vfprintf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 224) + ) + ) + (set_local $5 + (i32.add + (get_local $4) + (i32.const 120) + ) + ) + (set_local $7 + (get_local $4) + ) + (set_local $6 + (i32.add + (get_local $4) + (i32.const 136) + ) + ) + (set_local $9 + (i32.add + (tee_local $3 + (tee_local $8 + (i32.add + (get_local $4) + (i32.const 80) + ) + ) + ) + (i32.const 40) + ) + ) + (loop $do-in + (i32.store + (get_local $3) + (i32.const 0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $3 + (i32.add + (get_local $3) + (i32.const 4) + ) + ) + (get_local $9) + ) + ) + ) + (i32.store + (get_local $5) + (i32.load + (get_local $2) + ) + ) + (if + (i32.lt_s + (call $_printf_core + (i32.const 0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + (i32.const 0) + ) + (set_local $1 + (i32.const -1) + ) + (block + (set_local $14 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $0) + ) + (i32.const 0) + ) + ) + (set_local $10 + (i32.load + (get_local $0) + ) + ) + (if + (i32.lt_s + (i32.load8_s offset=74 + (get_local $0) + ) + (i32.const 1) + ) + (i32.store + (get_local $0) + (i32.and + (get_local $10) + (i32.const -33) + ) + ) + ) + (if + (i32.load + (tee_local $11 + (i32.add + (get_local $0) + (i32.const 48) + ) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (block + (set_local $13 + (i32.load + (tee_local $12 + (i32.add + (get_local $0) + (i32.const 44) + ) + ) + ) + ) + (i32.store + (get_local $12) + (get_local $6) + ) + (i32.store + (tee_local $9 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + (get_local $6) + ) + (i32.store + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + (get_local $6) + ) + (i32.store + (get_local $11) + (i32.const 80) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + (i32.add + (get_local $6) + (i32.const 80) + ) + ) + (set_local $1 + (call $_printf_core + (get_local $0) + (get_local $1) + (get_local $5) + (get_local $7) + (get_local $8) + ) + ) + (if + (get_local $13) + (block + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (if + (i32.eqz + (i32.load + (get_local $3) + ) + ) + (set_local $1 + (i32.const -1) + ) + ) + (i32.store + (get_local $12) + (get_local $13) + ) + (i32.store + (get_local $11) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $9) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + ) + ) + ) + ) + (i32.store + (get_local $0) + (i32.or + (tee_local $2 + (i32.load + (get_local $0) + ) + ) + (i32.and + (get_local $10) + (i32.const 32) + ) + ) + ) + (if + (get_local $14) + (call $___unlockfile + (get_local $0) + ) + ) + (if + (i32.and + (get_local $2) + (i32.const 32) + ) + (set_local $1 + (i32.const -1) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $1) + ) + (func $_updatewindow (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (if + (i32.eqz + (tee_local $4 + (i32.load + (tee_local $7 + (i32.add + (tee_local $3 + (i32.load offset=28 + (get_local $0) + ) + ) + (i32.const 52) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $7) + (tee_local $4 + (call_indirect $FUNCSIG$iiii + (i32.load offset=40 + (get_local $0) + ) + (i32.shl + (i32.const 1) + (i32.load offset=36 + (get_local $3) + ) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=32 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (if + (i32.eqz + (get_local $4) + ) + (return + (i32.const 1) + ) + ) + ) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $5 + (i32.add + (get_local $3) + (i32.const 40) + ) + ) + ) + ) + ) + (block + (i32.store + (get_local $5) + (tee_local $2 + (i32.shl + (i32.const 1) + (i32.load offset=36 + (get_local $3) + ) + ) + ) + ) + (i32.store offset=48 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=44 + (get_local $3) + (i32.const 0) + ) + ) + ) + (if + (i32.ge_u + (tee_local $1 + (i32.sub + (get_local $1) + (i32.load offset=16 + (get_local $0) + ) + ) + ) + (get_local $2) + ) + (block + (drop + (call $_memcpy + (get_local $4) + (i32.add + (i32.load offset=12 + (get_local $0) + ) + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + (get_local $2) + ) + ) + (i32.store offset=48 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=44 + (get_local $3) + (i32.load + (get_local $5) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.sub + (get_local $2) + (tee_local $8 + (i32.load + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 48) + ) + ) + ) + ) + ) + ) + (get_local $1) + ) + (set_local $2 + (get_local $1) + ) + ) + (drop + (call $_memcpy + (i32.add + (get_local $4) + (get_local $8) + ) + (i32.add + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 12) + ) + ) + ) + (i32.sub + (i32.const 0) + (get_local $1) + ) + ) + (get_local $2) + ) + ) + (set_local $0 + (i32.sub + (get_local $1) + (get_local $2) + ) + ) + (if + (i32.ne + (get_local $1) + (get_local $2) + ) + (block + (drop + (call $_memcpy + (i32.load + (get_local $7) + ) + (i32.add + (i32.load + (get_local $4) + ) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (get_local $0) + ) + ) + (i32.store + (get_local $6) + (get_local $0) + ) + (i32.store offset=44 + (get_local $3) + (i32.load + (get_local $5) + ) + ) + (return + (i32.const 0) + ) + ) + ) + (i32.store + (get_local $6) + (if i32 + (i32.eq + (tee_local $0 + (i32.add + (i32.load + (get_local $6) + ) + (get_local $1) + ) + ) + (tee_local $2 + (i32.load + (get_local $5) + ) + ) + ) + (i32.const 0) + (get_local $0) + ) + ) + (if + (i32.ge_u + (tee_local $4 + (i32.load + (tee_local $0 + (i32.add + (get_local $3) + (i32.const 44) + ) + ) + ) + ) + (get_local $2) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (get_local $0) + (i32.add + (get_local $4) + (get_local $1) + ) + ) + (i32.const 0) + ) + (func $_main (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $2 + (get_local $4) + ) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_s + (get_local $0) + (i32.const 1) + ) + ) + (block $switch-default + (block $switch-case4 + (block $switch-case3 + (block $switch-case2 + (block $switch-case1 + (block $switch-case0 + (block $switch-case + (br_table $switch-case4 $switch-case $switch-case1 $switch-case0 $switch-case2 $switch-case3 $switch-default + (i32.sub + (tee_local $0 + (i32.load8_s + (i32.load offset=4 + (get_local $1) + ) + ) + ) + (i32.const 48) + ) + ) + ) + (set_local $3 + (i32.const 60) + ) + (br $__rjto$0) + ) + (br $__rjti$0) + ) + (set_local $3 + (i32.const 250) + ) + (br $__rjto$0) + ) + (set_local $3 + (i32.const 2500) + ) + (br $__rjto$0) + ) + (set_local $3 + (i32.const 5000) + ) + (br $__rjto$0) + ) + (set_global $STACKTOP + (get_local $4) + ) + (return + (i32.const 0) + ) + ) + (i32.store + (get_local $2) + (i32.add + (get_local $0) + (i32.const -48) + ) + ) + (drop + (call $_printf + (i32.const 15297) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (return + (i32.const -1) + ) + (br $__rjto$0) + ) + (set_local $3 + (i32.const 500) + ) + ) + (set_local $5 + (call $_malloc + (i32.const 100000) + ) + ) + (set_local $2 + (i32.const 0) + ) + (set_local $0 + (i32.const 0) + ) + (set_local $1 + (i32.const 17) + ) + (loop $while-in + (if + (i32.gt_s + (get_local $0) + (i32.const 0) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const -1) + ) + ) + (set_local $1 + (if i32 + (i32.and + (get_local $2) + (i32.const 7) + ) + (i32.and + (i32.rem_u + (i32.mul + (get_local $2) + (get_local $2) + ) + (i32.const 6714) + ) + (i32.const 255) + ) + (block i32 + (set_local $0 + (i32.and + (get_local $2) + (i32.const 31) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (i32.store8 + (i32.add + (get_local $5) + (get_local $2) + ) + (get_local $1) + ) + (br_if $while-in + (i32.ne + (tee_local $2 + (i32.add + (get_local $2) + (i32.const 1) + ) + ) + (i32.const 100000) + ) + ) + (set_local $0 + (i32.const 0) + ) + ) + (loop $do-in + (call $_doit + (get_local $5) + (i32.const 100000) + (get_local $0) + ) + (br_if $do-in + (i32.lt_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (get_local $3) + ) + ) + ) + (drop + (call $_puts + (i32.const 15309) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (i32.const 0) + ) + (func $_init_block (param $0 i32) + (local $1 i32) + (set_local $1 + (i32.const 0) + ) + (loop $do-in + (i32.store16 + (i32.add + (i32.add + (get_local $0) + (i32.const 148) + ) + (i32.shl + (get_local $1) + (i32.const 2) + ) + ) + (i32.const 0) + ) + (br_if $do-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 286) + ) + ) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2440) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2444) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2448) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2452) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2456) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2460) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2464) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2468) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2472) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2476) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2480) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2484) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2488) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2492) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2496) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2500) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2504) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2508) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2512) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2516) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2520) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2524) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2528) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2532) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2536) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2540) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2544) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2548) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2552) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2556) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2684) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2688) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2692) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2696) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2700) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2704) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2708) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2712) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2716) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2720) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2724) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2728) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2732) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2736) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2740) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2744) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2748) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2752) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 2756) + ) + (i32.const 0) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 1172) + ) + (i32.const 1) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5804) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5800) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5808) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5792) + ) + (i32.const 0) + ) + ) + (func $_deflateReset (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load offset=28 + (get_local $0) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (i32.load offset=32 + (get_local $0) + ) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (i32.load offset=36 + (get_local $0) + ) + ) + (return + (i32.const -2) + ) + ) + (i32.store offset=20 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=24 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=44 + (get_local $0) + (i32.const 2) + ) + (i32.store offset=20 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=16 + (get_local $1) + (i32.load offset=8 + (get_local $1) + ) + ) + (if + (i32.lt_s + (tee_local $2 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 24) + ) + ) + ) + ) + (i32.const 0) + ) + (i32.store + (get_local $3) + (tee_local $2 + (i32.sub + (i32.const 0) + (get_local $2) + ) + ) + ) + ) + (i32.store offset=4 + (get_local $1) + (if i32 + (get_local $2) + (i32.const 42) + (i32.const 113) + ) + ) + (i32.store offset=48 + (get_local $0) + (tee_local $2 + (if i32 + (i32.eq + (get_local $2) + (i32.const 2) + ) + (call $_crc32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + (call $_adler32 + (i32.const 0) + (i32.const 0) + (i32.const 0) + ) + ) + ) + ) + (i32.store offset=40 + (get_local $1) + (i32.const 0) + ) + (call $__tr_init + (get_local $1) + ) + (i32.store offset=60 + (get_local $1) + (i32.shl + (i32.load offset=44 + (get_local $1) + ) + (i32.const 1) + ) + ) + (i32.store16 + (i32.add + (tee_local $0 + (i32.load offset=68 + (get_local $1) + ) + ) + (i32.shl + (i32.add + (tee_local $2 + (i32.load offset=76 + (get_local $1) + ) + ) + (i32.const -1) + ) + (i32.const 1) + ) + ) + (i32.const 0) + ) + (drop + (call $_memset + (get_local $0) + (i32.const 0) + (i32.add + (i32.shl + (get_local $2) + (i32.const 1) + ) + (i32.const -2) + ) + ) + ) + (i32.store offset=128 + (get_local $1) + (i32.load16_u + (i32.add + (i32.mul + (tee_local $0 + (i32.load offset=132 + (get_local $1) + ) + ) + (i32.const 12) + ) + (i32.const 9218) + ) + ) + ) + (i32.store offset=140 + (get_local $1) + (i32.load16_u + (i32.add + (i32.mul + (get_local $0) + (i32.const 12) + ) + (i32.const 9216) + ) + ) + ) + (i32.store offset=144 + (get_local $1) + (i32.load16_u + (i32.add + (i32.mul + (get_local $0) + (i32.const 12) + ) + (i32.const 9220) + ) + ) + ) + (i32.store offset=124 + (get_local $1) + (i32.load16_u + (i32.add + (i32.mul + (get_local $0) + (i32.const 12) + ) + (i32.const 9222) + ) + ) + ) + (i32.store offset=108 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=92 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=116 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=120 + (get_local $1) + (i32.const 2) + ) + (i32.store offset=96 + (get_local $1) + (i32.const 2) + ) + (i32.store offset=112 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=104 + (get_local $1) + (i32.const 0) + ) + (i32.store offset=72 + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + (func $_deflateEnd (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case $switch-default + (i32.sub + (tee_local $4 + (i32.load offset=4 + (get_local $1) + ) + ) + (i32.const 42) + ) + ) + ) + (br $switch) + ) + (return + (i32.const -2) + ) + ) + (if + (tee_local $2 + (i32.load offset=8 + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load offset=40 + (get_local $0) + ) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + ) + ) + (if + (tee_local $2 + (i32.load offset=68 + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load offset=40 + (get_local $0) + ) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + ) + ) + (if + (tee_local $2 + (i32.load offset=64 + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load offset=40 + (get_local $0) + ) + (get_local $2) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + ) + ) + (if + (tee_local $5 + (i32.load offset=56 + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + ) + (get_local $5) + (i32.add + (i32.and + (i32.load + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + ) + (block + (set_local $2 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $2) + ) + (get_local $1) + (i32.add + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (if i32 + (i32.eq + (get_local $4) + (i32.const 113) + ) + (i32.const -3) + (i32.const 0) + ) + ) + (func $___fwritex (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (block $label$break$L5 + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $3 + (i32.load + (tee_local $4 + (i32.add + (get_local $2) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $2) + ) + (set_local $3 + (i32.const 0) + ) + (block + (set_local $3 + (i32.load + (get_local $4) + ) + ) + (br $__rjti$0) + ) + ) + (br $label$break$L5) + ) + (if + (i32.lt_u + (i32.sub + (get_local $3) + (tee_local $4 + (i32.load + (tee_local $5 + (i32.add + (get_local $2) + (i32.const 20) + ) + ) + ) + ) + ) + (get_local $1) + ) + (block + (set_local $3 + (call_indirect $FUNCSIG$iiii + (get_local $2) + (get_local $0) + (get_local $1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br $label$break$L5) + ) + ) + (block $label$break$L10 + (if + (i32.gt_s + (i32.load8_s offset=75 + (get_local $2) + ) + (i32.const -1) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (if + (i32.eqz + (get_local $3) + ) + (block + (set_local $3 + (i32.const 0) + ) + (br $label$break$L10) + ) + ) + (if + (i32.ne + (i32.load8_s + (i32.add + (get_local $0) + (tee_local $6 + (i32.add + (get_local $3) + (i32.const -1) + ) + ) + ) + ) + (i32.const 10) + ) + (block + (set_local $3 + (get_local $6) + ) + (br $while-in) + ) + ) + ) + (br_if $label$break$L5 + (i32.lt_u + (call_indirect $FUNCSIG$iiii + (get_local $2) + (get_local $0) + (get_local $3) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $2) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (get_local $3) + ) + ) + (set_local $1 + (i32.sub + (get_local $1) + (get_local $3) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (get_local $3) + ) + ) + (set_local $4 + (i32.load + (get_local $5) + ) + ) + ) + (set_local $3 + (i32.const 0) + ) + ) + ) + (drop + (call $_memcpy + (get_local $4) + (get_local $0) + (get_local $1) + ) + ) + (i32.store + (get_local $5) + (i32.add + (i32.load + (get_local $5) + ) + (get_local $1) + ) + ) + (set_local $3 + (i32.add + (get_local $3) + (get_local $1) + ) + ) + ) + (get_local $3) + ) + (func $_doit (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (set_local $7 + (call $_compressBound + (get_local $1) + ) + ) + (if + (i32.eqz + (tee_local $4 + (i32.load + (i32.const 17740) + ) + ) + ) + (i32.store + (i32.const 17740) + (tee_local $4 + (call $_malloc + (get_local $7) + ) + ) + ) + ) + (if + (i32.eqz + (i32.load + (i32.const 17744) + ) + ) + (i32.store + (i32.const 17744) + (call $_malloc + (get_local $1) + ) + ) + ) + (set_local $5 + (get_local $3) + ) + (i32.store + (tee_local $6 + (i32.add + (get_local $3) + (i32.const 12) + ) + ) + (get_local $7) + ) + (drop + (call $_compress + (get_local $4) + (get_local $6) + (get_local $0) + (get_local $1) + ) + ) + (if + (tee_local $4 + (i32.eqz + (get_local $2) + ) + ) + (block + (set_local $2 + (i32.load + (get_local $6) + ) + ) + (i32.store + (get_local $5) + (get_local $1) + ) + (i32.store offset=4 + (get_local $5) + (get_local $2) + ) + (drop + (call $_printf + (i32.const 15212) + (get_local $5) + ) + ) + ) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $3) + (i32.const 8) + ) + ) + (get_local $1) + ) + (drop + (call $_uncompress + (i32.load + (i32.const 17744) + ) + (get_local $2) + (i32.load + (i32.const 17740) + ) + (i32.load + (get_local $6) + ) + ) + ) + (if + (i32.ne + (i32.load + (get_local $2) + ) + (get_local $1) + ) + (call $___assert_fail + (i32.const 15226) + (i32.const 15251) + (i32.const 24) + (i32.const 15263) + ) + ) + (if + (i32.eqz + (get_local $4) + ) + (block + (set_global $STACKTOP + (get_local $3) + ) + (return) + ) + ) + (if + (call $_strcmp + (get_local $0) + (i32.load + (i32.const 17744) + ) + ) + (call $___assert_fail + (i32.const 15268) + (i32.const 15251) + (i32.const 25) + (i32.const 15263) + ) + (set_global $STACKTOP + (get_local $3) + ) + ) + ) + (func $_uncompress (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (i32.store + (tee_local $4 + (get_local $5) + ) + (get_local $2) + ) + (i32.store + (tee_local $2 + (i32.add + (get_local $4) + (i32.const 4) + ) + ) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (i32.store offset=16 + (get_local $4) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=32 + (get_local $4) + (i32.const 0) + ) + (i32.store offset=36 + (get_local $4) + (i32.const 0) + ) + (if + (tee_local $0 + (call $_inflateInit_ + (get_local $4) + (i32.const 15090) + (i32.const 56) + ) + ) + (block + (set_global $STACKTOP + (get_local $5) + ) + (return + (get_local $0) + ) + ) + ) + (if + (i32.eq + (tee_local $0 + (call $_inflate + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 1) + ) + (block + (i32.store + (get_local $1) + (i32.load offset=20 + (get_local $4) + ) + ) + (set_local $0 + (call $_inflateEnd + (get_local $4) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (return + (get_local $0) + ) + ) + ) + (drop + (call $_inflateEnd + (get_local $4) + ) + ) + (block $__rjto$0 + (block $__rjti$0 + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (i32.sub + (get_local $0) + (i32.const -5) + ) + ) + ) + (br $__rjti$0) + ) + (set_global $STACKTOP + (get_local $5) + ) + (return + (i32.const -3) + ) + ) + (br $__rjto$0) + ) + (if + (i32.eqz + (i32.load + (get_local $2) + ) + ) + (block + (set_global $STACKTOP + (get_local $5) + ) + (return + (i32.const -3) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (func $_fmt_u (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.or + (i32.gt_u + (get_local $1) + (i32.const 0) + ) + (i32.and + (i32.eqz + (get_local $1) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $3 + (get_local $1) + ) + (loop $while-in + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (call $___uremdi3 + (get_local $0) + (get_local $3) + (i32.const 10) + (i32.const 0) + ) + (i32.const 48) + ) + ) + (set_local $1 + (call $___udivdi3 + (get_local $0) + (get_local $3) + (i32.const 10) + (i32.const 0) + ) + ) + (if + (i32.or + (i32.gt_u + (get_local $3) + (i32.const 9) + ) + (i32.and + (i32.eq + (get_local $3) + (i32.const 9) + ) + (i32.gt_u + (get_local $0) + (i32.const -1) + ) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (set_local $3 + (get_global $tempRet0) + ) + (br $while-in) + ) + (set_local $0 + (get_local $1) + ) + ) + ) + ) + ) + (if + (get_local $0) + (loop $while-in1 + (i32.store8 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + (i32.or + (i32.rem_u + (get_local $0) + (i32.const 10) + ) + (i32.const 48) + ) + ) + (if + (i32.ge_u + (get_local $0) + (i32.const 10) + ) + (block + (set_local $0 + (i32.div_u + (get_local $0) + (i32.const 10) + ) + ) + (br $while-in1) + ) + ) + ) + ) + (get_local $2) + ) + (func $_fflush (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $do-once + (if + (get_local $0) + (block + (if + (i32.le_s + (i32.load offset=76 + (get_local $0) + ) + (i32.const -1) + ) + (block + (set_local $0 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (br $do-once) + ) + ) + (set_local $2 + (i32.eqz + (call $___lockfile + (get_local $0) + ) + ) + ) + (set_local $1 + (call $___fflush_unlocked + (get_local $0) + ) + ) + (set_local $0 + (if i32 + (get_local $2) + (get_local $1) + (block i32 + (call $___unlockfile + (get_local $0) + ) + (get_local $1) + ) + ) + ) + ) + (block + (set_local $0 + (if i32 + (i32.load + (i32.const 10100) + ) + (call $_fflush + (i32.load + (i32.const 10100) + ) + ) + (i32.const 0) + ) + ) + (call $___lock + (i32.const 17776) + ) + (if + (tee_local $1 + (i32.load + (i32.const 17772) + ) + ) + (loop $while-in + (set_local $2 + (if i32 + (i32.gt_s + (i32.load offset=76 + (get_local $1) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (if + (i32.gt_u + (i32.load offset=20 + (get_local $1) + ) + (i32.load offset=28 + (get_local $1) + ) + ) + (set_local $0 + (i32.or + (call $___fflush_unlocked + (get_local $1) + ) + (get_local $0) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (br_if $while-in + (tee_local $1 + (i32.load offset=56 + (get_local $1) + ) + ) + ) + ) + ) + (call $___unlock + (i32.const 17776) + ) + ) + ) + ) + (get_local $0) + ) + (func $_strlen (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (block $__rjto$0 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.eqz + (i32.and + (tee_local $2 + (get_local $0) + ) + (i32.const 3) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (loop $while-in + (if + (i32.eqz + (i32.load8_s + (get_local $0) + ) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $__rjto$0) + ) + ) + (br_if $while-in + (i32.and + (tee_local $1 + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 3) + ) + ) + (br $__rjti$0) + ) + (br $__rjto$0) + ) + (loop $while-in1 + (if + (i32.eqz + (i32.and + (i32.xor + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const -2139062144) + ) + (i32.const -2139062144) + ) + (i32.add + (get_local $1) + (i32.const -16843009) + ) + ) + ) + (block + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + (if + (i32.and + (get_local $1) + (i32.const 255) + ) + (loop $while-in3 + (br_if $while-in3 + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_compress (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $5 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 64) + ) + ) + (i32.store + (tee_local $4 + (get_local $5) + ) + (get_local $2) + ) + (i32.store offset=4 + (get_local $4) + (get_local $3) + ) + (i32.store offset=12 + (get_local $4) + (get_local $0) + ) + (i32.store offset=16 + (get_local $4) + (i32.load + (get_local $1) + ) + ) + (i32.store offset=32 + (get_local $4) + (i32.const 0) + ) + (i32.store offset=36 + (get_local $4) + (i32.const 0) + ) + (i32.store offset=40 + (get_local $4) + (i32.const 0) + ) + (if + (tee_local $0 + (call $_deflateInit_ + (get_local $4) + (i32.const -1) + (i32.const 15090) + (i32.const 56) + ) + ) + (block + (set_global $STACKTOP + (get_local $5) + ) + (return + (get_local $0) + ) + ) + ) + (if i32 + (i32.eq + (tee_local $0 + (call $_deflate + (get_local $4) + (i32.const 4) + ) + ) + (i32.const 1) + ) + (block i32 + (i32.store + (get_local $1) + (i32.load offset=20 + (get_local $4) + ) + ) + (set_local $0 + (call $_deflateEnd + (get_local $4) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (get_local $0) + ) + (block i32 + (drop + (call $_deflateEnd + (get_local $4) + ) + ) + (set_global $STACKTOP + (get_local $5) + ) + (if i32 + (get_local $0) + (get_local $0) + (i32.const -5) + ) + ) + ) + ) + (func $_pad (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (set_local $6 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 256) + ) + ) + (set_local $5 + (get_local $6) + ) + (block $do-once + (if + (i32.and + (i32.gt_s + (get_local $2) + (get_local $3) + ) + (i32.eqz + (i32.and + (get_local $4) + (i32.const 73728) + ) + ) + ) + (block + (drop + (call $_memset + (get_local $5) + (get_local $1) + (if i32 + (i32.gt_u + (tee_local $1 + (i32.sub + (get_local $2) + (get_local $3) + ) + ) + (i32.const 256) + ) + (i32.const 256) + (get_local $1) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (tee_local $8 + (i32.load + (get_local $0) + ) + ) + (i32.const 32) + ) + ) + ) + (if + (i32.gt_u + (get_local $1) + (i32.const 255) + ) + (block + (set_local $7 + (get_local $1) + ) + (set_local $1 + (get_local $8) + ) + (loop $while-in + (if + (get_local $4) + (block + (drop + (call $___fwritex + (get_local $5) + (i32.const 256) + (get_local $0) + ) + ) + (set_local $1 + (i32.load + (get_local $0) + ) + ) + ) + ) + (set_local $4 + (i32.eqz + (i32.and + (get_local $1) + (i32.const 32) + ) + ) + ) + (br_if $while-in + (i32.gt_u + (tee_local $7 + (i32.add + (get_local $7) + (i32.const -256) + ) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + (set_local $1 + (i32.and + (i32.sub + (get_local $2) + (get_local $3) + ) + (i32.const 255) + ) + ) + ) + (br_if $do-once + (i32.eqz + (get_local $4) + ) + ) + ) + (drop + (call $___fwritex + (get_local $5) + (get_local $1) + (get_local $0) + ) + ) + ) + ) + ) + (set_global $STACKTOP + (get_local $6) + ) + ) + (func $_wcrtomb (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $do-once i32 + (if i32 + (get_local $0) + (block i32 + (if + (i32.lt_u + (get_local $1) + (i32.const 128) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (br $do-once + (i32.const 1) + ) + ) + ) + (if + (i32.lt_u + (get_local $1) + (i32.const 2048) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 192) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 2) + ) + ) + ) + (if + (i32.or + (i32.lt_u + (get_local $1) + (i32.const 55296) + ) + (i32.eq + (i32.and + (get_local $1) + (i32.const -8192) + ) + (i32.const 57344) + ) + ) + (block + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 224) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (br $do-once + (i32.const 3) + ) + ) + ) + (if i32 + (i32.lt_u + (i32.add + (get_local $1) + (i32.const -65536) + ) + (i32.const 1048576) + ) + (block i32 + (i32.store8 + (get_local $0) + (i32.or + (i32.shr_u + (get_local $1) + (i32.const 18) + ) + (i32.const 240) + ) + ) + (i32.store8 offset=1 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 12) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=2 + (get_local $0) + (i32.or + (i32.and + (i32.shr_u + (get_local $1) + (i32.const 6) + ) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.store8 offset=3 + (get_local $0) + (i32.or + (i32.and + (get_local $1) + (i32.const 63) + ) + (i32.const 128) + ) + ) + (i32.const 4) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.const 84) + ) + (i32.const -1) + ) + ) + ) + (i32.const 1) + ) + ) + ) + (func $_strerror (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.const 0) + ) + (block $__rjto$1 + (block $__rjti$1 + (block $__rjti$0 + (loop $while-in + (if + (i32.eq + (i32.load8_u + (i32.add + (get_local $1) + (i32.const 15803) + ) + ) + (get_local $0) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $__rjti$0) + ) + ) + (br_if $while-in + (i32.ne + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (i32.const 87) + ) + ) + (set_local $2 + (i32.const 87) + ) + (set_local $0 + (i32.const 15891) + ) + (br $__rjti$1) + ) + ) + (if + (get_local $0) + (block + (set_local $2 + (get_local $0) + ) + (set_local $0 + (i32.const 15891) + ) + (br $__rjti$1) + ) + (set_local $0 + (i32.const 15891) + ) + ) + (br $__rjto$1) + ) + (loop $while-in1 + (loop $while-in3 + (set_local $1 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (if + (i32.load8_s + (get_local $0) + ) + (block + (set_local $0 + (get_local $1) + ) + (br $while-in3) + ) + (set_local $0 + (get_local $1) + ) + ) + ) + (br_if $while-in1 + (tee_local $2 + (i32.add + (get_local $2) + (i32.const -1) + ) + ) + ) + ) + ) + (get_local $0) + ) + (func $___overflow (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (set_local $3 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store8 + (tee_local $4 + (get_local $3) + ) + (tee_local $7 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (block $do-once + (block $__rjti$0 + (br_if $__rjti$0 + (tee_local $5 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 16) + ) + ) + ) + ) + ) + (if + (call $___towrite + (get_local $0) + ) + (set_local $1 + (i32.const -1) + ) + (block + (set_local $5 + (i32.load + (get_local $2) + ) + ) + (br $__rjti$0) + ) + ) + (br $do-once) + ) + (if + (i32.lt_u + (tee_local $6 + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + ) + (get_local $5) + ) + (if + (i32.ne + (tee_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (i32.load8_s offset=75 + (get_local $0) + ) + ) + (block + (i32.store + (get_local $2) + (i32.add + (get_local $6) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $6) + (get_local $7) + ) + (br $do-once) + ) + ) + ) + (set_local $1 + (if i32 + (i32.eq + (call_indirect $FUNCSIG$iiii + (get_local $0) + (get_local $4) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + (i32.const 1) + ) + (i32.load8_u + (get_local $4) + ) + (i32.const -1) + ) + ) + ) + (set_global $STACKTOP + (get_local $3) + ) + (get_local $1) + ) + (func $_frexp (param $0 f64) (param $1 i32) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (f64.store + (get_global $tempDoublePtr) + (get_local $0) + ) + (block $switch + (block $switch-default + (block $switch-case0 + (block $switch-case + (br_table $switch-case $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-default $switch-case0 $switch-default + (tee_local $4 + (i32.and + (call $_bitshift64Lshr + (tee_local $2 + (i32.load + (get_global $tempDoublePtr) + ) + ) + (tee_local $3 + (i32.load offset=4 + (get_global $tempDoublePtr) + ) + ) + (i32.const 52) + ) + (i32.const 2047) + ) + ) + ) + ) + (i32.store + (get_local $1) + (tee_local $2 + (if i32 + (f64.ne + (get_local $0) + (f64.const 0) + ) + (block i32 + (set_local $0 + (call $_frexp + (f64.mul + (get_local $0) + (f64.const 18446744073709551615) + ) + (get_local $1) + ) + ) + (i32.add + (i32.load + (get_local $1) + ) + (i32.const -64) + ) + ) + (i32.const 0) + ) + ) + ) + (br $switch) + ) + (br $switch) + ) + (i32.store + (get_local $1) + (i32.add + (get_local $4) + (i32.const -1022) + ) + ) + (i32.store + (get_global $tempDoublePtr) + (get_local $2) + ) + (i32.store offset=4 + (get_global $tempDoublePtr) + (i32.or + (i32.and + (get_local $3) + (i32.const -2146435073) + ) + (i32.const 1071644672) + ) + ) + (set_local $0 + (f64.load + (get_global $tempDoublePtr) + ) + ) + ) + (get_local $0) + ) + (func $___fflush_unlocked (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (tee_local $0 + (block $__rjto$0 i32 + (block $__rjti$0 + (br_if $__rjti$0 + (i32.le_u + (i32.load + (tee_local $1 + (i32.add + (get_local $0) + (i32.const 20) + ) + ) + ) + (i32.load + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.const 0) + (i32.const 0) + (i32.add + (i32.and + (i32.load offset=36 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (br_if $__rjti$0 + (i32.load + (get_local $1) + ) + ) + (br $__rjto$0 + (i32.const -1) + ) + ) + (if + (i32.lt_u + (tee_local $4 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + ) + ) + (tee_local $6 + (i32.load + (tee_local $5 + (i32.add + (get_local $0) + (i32.const 8) + ) + ) + ) + ) + ) + (drop + (call_indirect $FUNCSIG$iiii + (get_local $0) + (i32.sub + (get_local $4) + (get_local $6) + ) + (i32.const 1) + (i32.add + (i32.and + (i32.load offset=40 + (get_local $0) + ) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + ) + (i32.store offset=16 + (get_local $0) + (i32.const 0) + ) + (i32.store + (get_local $2) + (i32.const 0) + ) + (i32.store + (get_local $1) + (i32.const 0) + ) + (i32.store + (get_local $5) + (i32.const 0) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + ) + ) + (func $_inflateEnd (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (if + (i32.eqz + (get_local $0) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (tee_local $1 + (i32.load + (tee_local $3 + (i32.add + (get_local $0) + (i32.const 28) + ) + ) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (if + (i32.eqz + (tee_local $2 + (i32.load + (tee_local $4 + (i32.add + (get_local $0) + (i32.const 36) + ) + ) + ) + ) + ) + (return + (i32.const -2) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 40) + ) + ) + (if + (tee_local $5 + (i32.load offset=52 + (get_local $1) + ) + ) + (block + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $0) + ) + (get_local $5) + (i32.add + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (set_local $2 + (i32.load + (get_local $4) + ) + ) + (set_local $1 + (i32.load + (get_local $3) + ) + ) + ) + ) + (call_indirect $FUNCSIG$vii + (i32.load + (get_local $0) + ) + (get_local $1) + (i32.add + (i32.and + (get_local $2) + (i32.const 1) + ) + (i32.const 10) + ) + ) + (i32.store + (get_local $3) + (i32.const 0) + ) + (i32.const 0) + ) + (func $_memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (if + (i32.ge_s + (get_local $2) + (i32.const 4096) + ) + (return + (call $_emscripten_memcpy_big + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + ) + (set_local $3 + (get_local $0) + ) + (if + (i32.eq + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.and + (get_local $1) + (i32.const 3) + ) + ) + (block + (loop $while-in + (if + (i32.and + (get_local $0) + (i32.const 3) + ) + (block + (if + (i32.eqz + (get_local $2) + ) + (return + (get_local $3) + ) + ) + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + (loop $while-in1 + (if + (i32.ge_s + (get_local $2) + (i32.const 4) + ) + (block + (i32.store + (get_local $0) + (i32.load + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 4) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.gt_s + (get_local $2) + (i32.const 0) + ) + (block + (i32.store8 + (get_local $0) + (i32.load8_s + (get_local $1) + ) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (set_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + (set_local $2 + (i32.sub + (get_local $2) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (get_local $3) + ) + (func $_memset (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (if + (i32.ge_s + (get_local $2) + (i32.const 20) + ) + (block + (set_local $1 + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + (if + (tee_local $3 + (i32.and + (get_local $0) + (i32.const 3) + ) + ) + (block + (set_local $3 + (i32.sub + (i32.add + (get_local $0) + (i32.const 4) + ) + (get_local $3) + ) + ) + (loop $while-in + (if + (i32.lt_s + (get_local $0) + (get_local $3) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in) + ) + ) + ) + ) + ) + (set_local $3 + (i32.or + (i32.or + (i32.or + (get_local $1) + (i32.shl + (get_local $1) + (i32.const 8) + ) + ) + (i32.shl + (get_local $1) + (i32.const 16) + ) + ) + (i32.shl + (get_local $1) + (i32.const 24) + ) + ) + ) + (set_local $5 + (i32.and + (get_local $4) + (i32.const -4) + ) + ) + (loop $while-in1 + (if + (i32.lt_s + (get_local $0) + (get_local $5) + ) + (block + (i32.store + (get_local $0) + (get_local $3) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 4) + ) + ) + (br $while-in1) + ) + ) + ) + ) + ) + (loop $while-in3 + (if + (i32.lt_s + (get_local $0) + (get_local $4) + ) + (block + (i32.store8 + (get_local $0) + (get_local $1) + ) + (set_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (br $while-in3) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $___stdio_seek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 32) + ) + ) + (i32.store + (tee_local $3 + (get_local $4) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 0) + ) + (i32.store offset=8 + (get_local $3) + (get_local $1) + ) + (i32.store offset=12 + (get_local $3) + (tee_local $0 + (i32.add + (get_local $4) + (i32.const 20) + ) + ) + ) + (i32.store offset=16 + (get_local $3) + (get_local $2) + ) + (set_local $0 + (if i32 + (i32.lt_s + (call $___syscall_ret + (call $___syscall140 + (i32.const 140) + (get_local $3) + ) + ) + (i32.const 0) + ) + (block i32 + (i32.store + (get_local $0) + (i32.const -1) + ) + (i32.const -1) + ) + (i32.load + (get_local $0) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_strcmp (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (i32.load8_s + (get_local $1) + ) + ) + (i32.sub + (i32.and + (tee_local $0 + (if i32 + (if i32 + (tee_local $3 + (i32.load8_s + (get_local $0) + ) + ) + (i32.ne + (get_local $3) + (get_local $2) + ) + (i32.const 1) + ) + (block i32 + (set_local $1 + (get_local $2) + ) + (get_local $3) + ) + (block i32 + (loop $do-in + (set_local $2 + (i32.load8_s + (tee_local $1 + (i32.add + (get_local $1) + (i32.const 1) + ) + ) + ) + ) + (br_if $do-in + (i32.eqz + (if i32 + (tee_local $3 + (i32.load8_s + (tee_local $0 + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + ) + ) + (i32.ne + (get_local $3) + (get_local $2) + ) + (i32.const 1) + ) + ) + ) + ) + (set_local $1 + (get_local $2) + ) + (get_local $3) + ) + ) + ) + (i32.const 255) + ) + (i32.and + (get_local $1) + (i32.const 255) + ) + ) + ) + (func $_puts (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (if i32 + (i32.gt_s + (i32.load offset=76 + (tee_local $1 + (i32.load + (i32.const 9984) + ) + ) + ) + (i32.const -1) + ) + (call $___lockfile + (get_local $1) + ) + (i32.const 0) + ) + ) + (set_local $0 + (block $do-once i32 + (if i32 + (i32.lt_s + (call $_fputs + (get_local $0) + (get_local $1) + ) + (i32.const 0) + ) + (i32.const 1) + (block i32 + (if + (i32.ne + (i32.load8_s offset=75 + (get_local $1) + ) + (i32.const 10) + ) + (if + (i32.lt_u + (tee_local $0 + (i32.load + (tee_local $3 + (i32.add + (get_local $1) + (i32.const 20) + ) + ) + ) + ) + (i32.load offset=16 + (get_local $1) + ) + ) + (block + (i32.store + (get_local $3) + (i32.add + (get_local $0) + (i32.const 1) + ) + ) + (i32.store8 + (get_local $0) + (i32.const 10) + ) + (br $do-once + (i32.const 0) + ) + ) + ) + ) + (i32.lt_s + (call $___overflow + (get_local $1) + (i32.const 10) + ) + (i32.const 0) + ) + ) + ) + ) + ) + (if + (get_local $2) + (call $___unlockfile + (get_local $1) + ) + ) + (i32.shr_s + (i32.shl + (get_local $0) + (i32.const 31) + ) + (i32.const 31) + ) + ) + (func $___stdout_write (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 80) + ) + ) + (set_local $3 + (get_local $4) + ) + (i32.store offset=36 + (get_local $0) + (i32.const 4) + ) + (if + (i32.eqz + (i32.and + (i32.load + (get_local $0) + ) + (i32.const 64) + ) + ) + (block + (i32.store + (get_local $3) + (i32.load offset=60 + (get_local $0) + ) + ) + (i32.store offset=4 + (get_local $3) + (i32.const 21505) + ) + (i32.store offset=8 + (get_local $3) + (i32.add + (get_local $4) + (i32.const 12) + ) + ) + (if + (call $___syscall54 + (i32.const 54) + (get_local $3) + ) + (i32.store8 offset=75 + (get_local $0) + (i32.const -1) + ) + ) + ) + ) + (set_local $0 + (call $___stdio_write + (get_local $0) + (get_local $1) + (get_local $2) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (get_local $0) + ) + (func $_fwrite (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (local $5 i32) + (set_local $4 + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + (if + (i32.gt_s + (i32.load offset=76 + (get_local $3) + ) + (i32.const -1) + ) + (block + (set_local $5 + (i32.eqz + (call $___lockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + (if + (i32.eqz + (get_local $5) + ) + (call $___unlockfile + (get_local $3) + ) + ) + ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) + ) + ) + ) + (if + (i32.ne + (get_local $0) + (get_local $4) + ) + (set_local $2 + (i32.div_u + (get_local $0) + (get_local $1) + ) + ) + ) + (get_local $2) + ) + (func $___towrite (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (i32.load8_s + (tee_local $2 + (i32.add + (get_local $0) + (i32.const 74) + ) + ) + ) + ) + (i32.store8 + (get_local $2) + (i32.or + (i32.add + (get_local $1) + (i32.const 255) + ) + (get_local $1) + ) + ) + (tee_local $0 + (if i32 + (i32.and + (tee_local $1 + (i32.load + (get_local $0) + ) + ) + (i32.const 8) + ) + (block i32 + (i32.store + (get_local $0) + (i32.or + (get_local $1) + (i32.const 32) + ) + ) + (i32.const -1) + ) + (block i32 + (i32.store offset=8 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=4 + (get_local $0) + (i32.const 0) + ) + (i32.store offset=28 + (get_local $0) + (tee_local $1 + (i32.load offset=44 + (get_local $0) + ) + ) + ) + (i32.store offset=20 + (get_local $0) + (get_local $1) + ) + (i32.store offset=16 + (get_local $0) + (i32.add + (get_local $1) + (i32.load offset=48 + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + ) + ) + ) + (func $___uremdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_local $4 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (drop + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (tee_local $0 + (get_local $4) + ) + ) + ) + (set_global $STACKTOP + (get_local $4) + ) + (set_global $tempRet0 + (i32.load offset=4 + (get_local $0) + ) + ) + (i32.load + (get_local $0) + ) + ) + (func $__tr_init (param $0 i32) + (i32.store + (i32.add + (get_local $0) + (i32.const 2840) + ) + (i32.add + (get_local $0) + (i32.const 148) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 2848) + ) + (i32.const 9336) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 2852) + ) + (i32.add + (get_local $0) + (i32.const 2440) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 2860) + ) + (i32.const 9472) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 2864) + ) + (i32.add + (get_local $0) + (i32.const 2684) + ) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 2872) + ) + (i32.const 9612) + ) + (i32.store16 + (i32.add + (get_local $0) + (i32.const 5816) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5820) + ) + (i32.const 0) + ) + (i32.store + (i32.add + (get_local $0) + (i32.const 5812) + ) + (i32.const 8) + ) + (call $_init_block + (get_local $0) + ) + ) + (func $___stdio_close (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $2 + (get_local $1) + ) + (i32.load offset=60 + (get_local $0) + ) + ) + (set_local $0 + (call $___syscall_ret + (call $___syscall6 + (i32.const 6) + (get_local $2) + ) + ) + ) + (set_global $STACKTOP + (get_local $1) + ) + (get_local $0) + ) + (func $_printf (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (set_local $2 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (i32.const 16) + ) + ) + (i32.store + (tee_local $3 + (get_local $2) + ) + (get_local $1) + ) + (set_local $0 + (call $_vfprintf + (i32.load + (i32.const 9984) + ) + (get_local $0) + (get_local $3) + ) + ) + (set_global $STACKTOP + (get_local $2) + ) + (get_local $0) + ) + (func $_bitshift64Shl (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.or + (i32.shl + (get_local $1) + (get_local $2) + ) + (i32.shr_u + (i32.and + (get_local $0) + (i32.shl + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + (return + (i32.shl + (get_local $0) + (get_local $2) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.shl + (get_local $0) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (i32.const 0) + ) + (func $_bitshift64Lshr (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (if + (i32.lt_s + (get_local $2) + (i32.const 32) + ) + (block + (set_global $tempRet0 + (i32.shr_u + (get_local $1) + (get_local $2) + ) + ) + (return + (i32.or + (i32.shr_u + (get_local $0) + (get_local $2) + ) + (i32.shl + (i32.and + (get_local $1) + (i32.sub + (i32.shl + (i32.const 1) + (get_local $2) + ) + (i32.const 1) + ) + ) + (i32.sub + (i32.const 32) + (get_local $2) + ) + ) + ) + ) + ) + ) + (set_global $tempRet0 + (i32.const 0) + ) + (i32.shr_u + (get_local $1) + (i32.sub + (get_local $2) + (i32.const 32) + ) + ) + ) + (func $_deflateInit_ (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $_deflateInit2_ + (get_local $0) + (get_local $1) + (i32.const 8) + (i32.const 15) + (i32.const 8) + (i32.const 0) + (get_local $2) + (get_local $3) + ) + ) + (func $runPostSets + (nop) + ) + (func $_i64Subtract (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (set_global $tempRet0 + (i32.sub + (i32.sub + (get_local $1) + (get_local $3) + ) + (i32.gt_u + (get_local $2) + (get_local $0) + ) + ) + ) + (i32.sub + (get_local $0) + (get_local $2) + ) + ) + (func $_inflateInit_ (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $_inflateInit2_ + (get_local $0) + (i32.const 15) + (get_local $1) + (get_local $2) + ) + ) + (func $___syscall_ret (param $0 i32) (result i32) + (if i32 + (i32.gt_u + (get_local $0) + (i32.const -4096) + ) + (block i32 + (i32.store + (call $___errno_location) + (i32.sub + (i32.const 0) + (get_local $0) + ) + ) + (i32.const -1) + ) + (get_local $0) + ) + ) + (func $_i64Add (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + (set_global $tempRet0 + (i32.add + (i32.add + (get_local $1) + (get_local $3) + ) + (i32.lt_u + (tee_local $4 + (i32.add + (get_local $0) + (get_local $2) + ) + ) + (get_local $0) + ) + ) + ) + (get_local $4) + ) + (func $dynCall_iiii (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call_indirect $FUNCSIG$iiii + (get_local $1) + (get_local $2) + (get_local $3) + (i32.add + (i32.and + (get_local $0) + (i32.const 7) + ) + (i32.const 2) + ) + ) + ) + (func $___udivdi3 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (call $___udivmoddi4 + (get_local $0) + (get_local $1) + (get_local $2) + (get_local $3) + (i32.const 0) + ) + ) + (func $_compressBound (param $0 i32) (result i32) + (i32.add + (i32.add + (i32.add + (i32.add + (get_local $0) + (i32.const 13) + ) + (i32.shr_u + (get_local $0) + (i32.const 12) + ) + ) + (i32.shr_u + (get_local $0) + (i32.const 14) + ) + ) + (i32.shr_u + (get_local $0) + (i32.const 25) + ) + ) + ) + (func $_zcalloc (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $_malloc + (i32.mul + (get_local $2) + (get_local $1) + ) + ) + ) + (func $stackAlloc (param $0 i32) (result i32) + (local $1 i32) + (set_local $1 + (get_global $STACKTOP) + ) + (set_global $STACKTOP + (i32.add + (get_global $STACKTOP) + (get_local $0) + ) + ) + (set_global $STACKTOP + (i32.and + (i32.add + (get_global $STACKTOP) + (i32.const 15) + ) + (i32.const -16) + ) + ) + (get_local $1) + ) + (func $___errno_location (result i32) + (if i32 + (i32.load + (i32.const 17748) + ) + (i32.load offset=64 + (call $_pthread_self) + ) + (i32.const 17792) + ) + ) + (func $establishStackSpace (param $0 i32) (param $1 i32) + (set_global $STACKTOP + (get_local $0) + ) + (set_global $STACK_MAX + (get_local $1) + ) + ) + (func $dynCall_iii (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call_indirect $FUNCSIG$iii + (get_local $1) + (get_local $2) + (i32.add + (i32.and + (get_local $0) + (i32.const 3) + ) + (i32.const 12) + ) + ) + ) + (func $_wctomb (param $0 i32) (param $1 i32) (result i32) + (if i32 + (get_local $0) + (call $_wcrtomb + (get_local $0) + (get_local $1) + (i32.const 0) + ) + (i32.const 0) + ) + ) + (func $setThrew (param $0 i32) (param $1 i32) + (if + (i32.eqz + (get_global $__THREW__) + ) + (block + (set_global $__THREW__ + (get_local $0) + ) + (set_global $threwValue + (get_local $1) + ) + ) + ) + ) + (func $dynCall_vii (param $0 i32) (param $1 i32) (param $2 i32) + (call_indirect $FUNCSIG$vii + (get_local $1) + (get_local $2) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 10) + ) + ) + ) + (func $_llvm_bswap_i32 (param $0 i32) (result i32) + (i32.or + (i32.or + (i32.or + (i32.shl + (i32.and + (get_local $0) + (i32.const 255) + ) + (i32.const 24) + ) + (i32.shl + (i32.and + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + (i32.const 255) + ) + (i32.const 16) + ) + ) + (i32.shl + (i32.and + (i32.shr_s + (get_local $0) + (i32.const 16) + ) + (i32.const 255) + ) + (i32.const 8) + ) + ) + (i32.shr_u + (get_local $0) + (i32.const 24) + ) + ) + ) + (func $dynCall_ii (param $0 i32) (param $1 i32) (result i32) + (call_indirect $FUNCSIG$ii + (get_local $1) + (i32.and + (get_local $0) + (i32.const 1) + ) + ) + ) + (func $_fputs (param $0 i32) (param $1 i32) (result i32) + (i32.add + (call $_fwrite + (get_local $0) + (call $_strlen + (get_local $0) + ) + (i32.const 1) + (get_local $1) + ) + (i32.const -1) + ) + ) + (func $dynCall_vi (param $0 i32) (param $1 i32) + (call_indirect $FUNCSIG$vi + (get_local $1) + (i32.add + (i32.and + (get_local $0) + (i32.const 1) + ) + (i32.const 16) + ) + ) + ) + (func $_cleanup_522 (param $0 i32) + (if + (i32.eqz + (i32.load offset=68 + (get_local $0) + ) + ) + (call $___unlockfile + (get_local $0) + ) + ) + ) + (func $_zcfree (param $0 i32) (param $1 i32) + (call $_free + (get_local $1) + ) + ) + (func $b1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (call $abort + (i32.const 1) + ) + (i32.const 0) + ) + (func $_frexpl (param $0 f64) (param $1 i32) (result f64) + (call $_frexp + (get_local $0) + (get_local $1) + ) + ) + (func $b3 (param $0 i32) (param $1 i32) (result i32) + (call $abort + (i32.const 3) + ) + (i32.const 0) + ) + (func $setTempRet0 (param $0 i32) + (set_global $tempRet0 + (get_local $0) + ) + ) + (func $stackRestore (param $0 i32) + (set_global $STACKTOP + (get_local $0) + ) + ) + (func $b2 (param $0 i32) (param $1 i32) + (call $abort + (i32.const 2) + ) + ) + (func $b0 (param $0 i32) (result i32) + (call $abort + (i32.const 0) + ) + (i32.const 0) + ) + (func $___unlockfile (param $0 i32) + (nop) + ) + (func $___lockfile (param $0 i32) (result i32) + (i32.const 0) + ) + (func $getTempRet0 (result i32) + (get_global $tempRet0) + ) + (func $stackSave (result i32) + (get_global $STACKTOP) + ) + (func $b4 (param $0 i32) + (call $abort + (i32.const 4) + ) + ) + (func $_pthread_self (result i32) + (i32.const 0) + ) +) diff --git a/libraries/wasm-jit/afl/readme b/libraries/wasm-jit/afl/readme new file mode 100644 index 000000000..f7e494623 --- /dev/null +++ b/libraries/wasm-jit/afl/readme @@ -0,0 +1,5 @@ +Scripts for helping to run the AFL (http://lcamtuf.coredump.cx/afl/) fuzzer against wavm + +1) Add the directory containing the AFL binaries to your path +2) Make a directory to contain the AFL build +3) From the new directory, run /afl/run-afl-fuzz (to run a n more slave instances if the machine can handle it) diff --git a/libraries/wasm-jit/afl/run-afl-fuzz b/libraries/wasm-jit/afl/run-afl-fuzz new file mode 100755 index 000000000..2db570a17 --- /dev/null +++ b/libraries/wasm-jit/afl/run-afl-fuzz @@ -0,0 +1,50 @@ +#!/bin/sh -ex + +WAVM="$1" +WAVM_BIN=./bin + +TMPDIR=./tmp +FINDINGS=${TMPDIR}/findings +CORPUS_SRC=${WAVM}/Test/fuzz + +if [ -n "$2" ] ; then + NUM_SLAVES=$2 +else + NUM_SLAVES=0 +fi + +# Compile WAVM using the AFL compiler and ASAN. +export CC=afl-clang-fast +export CXX=afl-clang-fast++ +export AFL_HARDEN=1 +cmake ${WAVM} -DENABLE_ASAN=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo +make -j + +# Set up ASAN to ignore seg faults, ignore leaks, and abort on error. +export ASAN_OPTIONS=handle_segv=0:detect_leaks=0:abort_on_error=1 + +# Make a ramdisk to hold the AFL temp files. +if [ ! -d $TMPDIR ] ; then + mkdir $TMPDIR && chmod 777 $TMPDIR + sudo mount -t tmpfs -o size=512M tmpfs $TMPDIR +fi + +if [ ! -d $FINDINGS ] ; then + mkdir $FINDINGS +fi + +# Assemble the corpus. +CORPUS=${TMPDIR}/corpus +mkdir -p $CORPUS +rm -rf ${CORPUS}/* +for wast in ${CORPUS_SRC}/*.wast; do + ${WAVM_BIN}/Assemble $wast ${CORPUS}/$(basename $wast).wasm +done + +# Spawn the slave fuzzers +for i in `seq 0 $NUM_SLAVES`; do + afl-fuzz -i ${CORPUS} -o ${FINDINGS} -m 9999999999999999999 -t 5000 -S slave${i} -- ${WAVM_BIN}/wavm @@ 1>slave${i}.stdout.txt 2>slave${i}.stderr.txt & +done + +# Run the master fuzzer +afl-fuzz -i ${CORPUS} -o ${FINDINGS} -m 9999999999999999999 -t 5000 -M master -- ${WAVM_BIN}/wavm @@ diff --git a/libraries/wasm-jit/afl/simplify-crashes b/libraries/wasm-jit/afl/simplify-crashes new file mode 100755 index 000000000..3149c66db --- /dev/null +++ b/libraries/wasm-jit/afl/simplify-crashes @@ -0,0 +1,4 @@ +#!/bin/sh -x +for f in crashes/id* ; do + afl-tmin -i $f -o $f.min -m 9999999999999999999 -e -- ./bin/wavm --text @@ +done diff --git a/libraries/wasm-jit/afl/wast.dict b/libraries/wasm-jit/afl/wast.dict new file mode 100644 index 000000000..bacc0da17 --- /dev/null +++ b/libraries/wasm-jit/afl/wast.dict @@ -0,0 +1,77 @@ +# +# AFL dictionary for WebAssembly WAST +# ---------------------- +# +# Created by Benjamin Meyer +# + +keyword_nop="nop" +keyword_block="block" +keyword_loop="loop" +keyword_select="select" +keyword_if="if" +keyword_br="br" +keyword_br_if="br_if" +keyword_br_table="br_table" +keyword_return="return" +keyword_call="call" +keyword_call_import="call_import" +keyword_call_indirect="call_indirect" +keyword_get_local="get_local" +keyword_set_local="set_local" +keyword_load8=".load8" +keyword_load16=".load16" +keyword_load32=".load32" +keyword_store8=".store8" +keyword_store16=".store16" +keyword_store32=".store32" +keyword_const8=".const8" +keyword_const16=".const16" +keyword_const32=".const32" +keyword_unreachable="unreachable" +keyword_current_memory="current_memory" +keyword_grow_memory="grow_memory" +keyword_func="func" +keyword_sig="sig" +keyword_param="param" +keyword_result="result" +keyword_local="local" +keyword_module="module" +keyword_typedef="typedef" +keyword_import="import" +keyword_export="export" +keyword_start="start" +keyword_table="table" +keyword_memory="memory" +keyword_segment="segment" + +type_i32="i32" +type_i64="i64" +type_f32="f32" +type_f64="f64" + +unop_0="ctz" +unop_1="clz" +unop_2="popcnt" +binop_0="add" +binop_1="sub" +binop_2="mul" +relop_0="eq" +relop_1="ne" +relop_2="lt" + +offset="offset=" +align="align=" +cvtop_0="trunc_s" +cvtop_1="trunc_u" +cvtop_2="extend_s" +cvtop_3="extend_u" + +string_quote_double="\"a\"" +string_quote_single="'a'" + +snippet_comment0=";;" +snippet_comment1="#" +snippet_parentheses0="(" +snippet_parentheses1=")" +snippet_alt="?" diff --git a/libraries/wasm-jit/travis-build.sh b/libraries/wasm-jit/travis-build.sh new file mode 100755 index 000000000..ff6cdf530 --- /dev/null +++ b/libraries/wasm-jit/travis-build.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +set -e -v + +$CXX --version + +if [[ $TRAVIS_OS_NAME == "osx" ]]; then + export CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Darwin-x86_64.tar.gz"; + export LLVM_URL="http://releases.llvm.org/4.0.0/clang+llvm-4.0.0-x86_64-apple-darwin.tar.xz"; +else + export CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz"; + export LLVM_URL="http://releases.llvm.org/4.0.0/clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz"; +fi + + +# Download a newer version of cmake than is available in Travis's whitelisted apt sources. +mkdir cmake +cd cmake +wget --no-check-certificate --quiet -O ./cmake.tar.gz ${CMAKE_URL} +tar --strip-components=1 -xzf ./cmake.tar.gz +export PATH=`pwd`/bin:${PATH} +cd .. +cmake --version + +# Download a binary build of LLVM4 (also not available in Travis's whitelisted apt sources) +mkdir llvm4 +cd llvm4 +wget --no-check-certificate --quiet -O ./llvm.tar.xz ${LLVM_URL} +tar --strip-components=1 -xf ./llvm.tar.xz +export LLVM_DIR=`pwd`/lib/cmake/llvm +cd .. + +# Build and test a release build of WAVM. +mkdir release +cd release +cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DLLVM_DIR=${LLVM_DIR} +make +ctest -V +cd .. + +# Build and test a debug build of WAVM. +mkdir debug +cd debug +cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DLLVM_DIR=${LLVM_DIR} +make +ASAN_OPTIONS=detect_leaks=0 ctest -V +cd .. -- GitLab