From ba52d348287dd6635242bf18351259e19aa68f28 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 11 Sep 2025 18:09:08 -0400 Subject: [PATCH] test: improve codecov in `HostFuncWrapper.cpp` (#5730) --- src/test/app/Wasm_test.cpp | 4 +- .../wasm_fixtures/codecov_tests/Cargo.lock | 2 +- .../wasm_fixtures/codecov_tests/Cargo.toml | 2 +- .../codecov_tests/src/host_bindings_loose.rs | 9 - .../wasm_fixtures/codecov_tests/src/lib.rs | 313 +++++++++- src/test/app/wasm_fixtures/copyFixtures.py | 4 +- src/test/app/wasm_fixtures/fixtures.cpp | 547 ++++++++++-------- src/xrpld/app/wasm/detail/HostFuncWrapper.cpp | 30 +- 8 files changed, 615 insertions(+), 296 deletions(-) diff --git a/src/test/app/Wasm_test.cpp b/src/test/app/Wasm_test.cpp index a48e16f1eb..bd4f7d4380 100644 --- a/src/test/app/Wasm_test.cpp +++ b/src/test/app/Wasm_test.cpp @@ -649,7 +649,7 @@ struct Wasm_test : public beast::unit_test::suite Bytes const wasm(wasmStr.begin(), wasmStr.end()); TestHostFunctions hfs(env, 0); - auto const allowance = 121'895; + auto const allowance = 148'406; auto re = runEscrowWasm( wasm, ESCROW_FUNCTION_NAME, {}, &hfs, allowance, env.journal); @@ -709,7 +709,7 @@ struct Wasm_test : public beast::unit_test::suite testWasmSha(); testWasmB58(); - // runing too long + // running too long // testWasmSP1Verifier(); testWasmBG16Verifier(); diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock index 704846d35a..28d4d65630 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.lock @@ -12,4 +12,4 @@ dependencies = [ [[package]] name = "xrpl-std" version = "0.5.1-devnet5" -source = "git+https://github.com/ripple/craft.git?branch=last-hfs2#ec4a3fb2ea45a7f27b7190976d37d3596e2ec29e" +source = "git+https://github.com/ripple/craft.git?branch=lastdevnet#6b20669b20561b9d0f09678f44ccbddb84ef9f47" diff --git a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml index 52ca804bc0..c9b4c53490 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml +++ b/src/test/app/wasm_fixtures/codecov_tests/Cargo.toml @@ -15,4 +15,4 @@ opt-level = 's' panic = "abort" [dependencies] -xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "last-hfs2", package = "xrpl-std" } +xrpl-std = { git = "https://github.com/ripple/craft.git", branch = "lastdevnet", package = "xrpl-std" } diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs index 706add2ed7..c99a0047d5 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/host_bindings_loose.rs @@ -32,15 +32,6 @@ unsafe extern "C" { out_buff_len: usize, ) -> i32; - pub fn amm_keylet( - issue1_ptr: *const u8, - issue1_len: usize, - issue2_ptr: i32, - issue2_len: i32, - out_buff_ptr: *mut u8, - out_buff_len: usize, - ) -> i32; - pub fn line_keylet( account1_ptr: *const u8, account1_len: usize, diff --git a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs index 36c61fe439..0e755ebb75 100644 --- a/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs +++ b/src/test/app/wasm_fixtures/codecov_tests/src/lib.rs @@ -6,13 +6,13 @@ extern crate std; use core::panic; use xrpl_std::core::current_tx::escrow_finish::{get_current_escrow_finish, EscrowFinish}; use xrpl_std::core::current_tx::traits::TransactionCommonFields; -use xrpl_std::core::error_codes; use xrpl_std::core::locator::Locator; use xrpl_std::core::types::amount::asset::Asset; use xrpl_std::core::types::amount::asset::XrpAsset; use xrpl_std::core::types::amount::mpt_id::MptId; use xrpl_std::core::types::keylets; use xrpl_std::host; +use xrpl_std::host::error_codes; use xrpl_std::host::trace::{trace, trace_num as trace_number}; use xrpl_std::sfield; @@ -52,7 +52,8 @@ pub extern "C" fn finish() -> i32 { // ######################################## // Step #1: Test all host function happy paths // Note: not testing all the keylet functions, - // that's in a separate test file. + // that's in a separate test file (all_keylets). + // The float tests are also in a separate file (float_tests). // ######################################## check_result(unsafe { host::get_ledger_sqn() }, 12345, "get_ledger_sqn"); check_result( @@ -338,6 +339,38 @@ pub extern "C" fn finish() -> i32 { // Step #3: Test getData[Type] edge cases // ######################################## + // uint64 + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr().wrapping_add(1_000_000_000), + 8, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_from_uint_len_oob", + ) + }); + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_from_uint( + locator.as_ptr(), + locator.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::INVALID_PARAMS, + "float_from_uint_wrong_len", + ) + }); + // SField check_result( unsafe { host::get_tx_array_len(2) }, // not a valid SField value @@ -468,11 +501,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - locator.as_ptr() as i32 + 1_000_000_000, - locator.len() as i32, + locator.as_ptr().wrapping_add(1_000_000_000), + locator.len(), ptr, len, ) @@ -484,11 +517,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - locator.as_ptr() as i32, - locator.len() as i32, + locator.as_ptr(), + locator.len(), ptr, len, ) @@ -501,11 +534,11 @@ pub extern "C" fn finish() -> i32 { with_buffer::<32, _, _>(|ptr, len| { check_result( unsafe { - host_bindings_loose::amm_keylet( + host::amm_keylet( asset1_bytes.as_ptr(), asset1_bytes.len(), - currency.as_ptr() as i32, - currency.len() as i32, + currency.as_ptr(), + currency.len(), ptr, len, ) @@ -514,6 +547,23 @@ pub extern "C" fn finish() -> i32 { "amm_keylet_len_wrong_non_xrp_currency_len", ) }); + let xrpissue: &[u8] = &[0; 40]; // 40 bytes + with_buffer::<32, _, _>(|ptr, len| { + check_result( + unsafe { + host::amm_keylet( + xrpissue.as_ptr(), + xrpissue.len(), + asset1_bytes.as_ptr(), + asset1_bytes.len(), + ptr, + len, + ) + }, + error_codes::INVALID_PARAMS, + "amm_keylet_len_wrong_xrp_currency_len", + ) + }); let mptid = MptId::new(1, account); with_buffer::<2, _, _>(|ptr, len| { check_result( @@ -755,6 +805,19 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_oob_slice", ); + let float: [u8; 8] = [0xD4, 0x83, 0x8D, 0x7E, 0xA4, 0xC6, 0x80, 0x00]; + check_result( + unsafe { + host::trace_opaque_float( + message.as_ptr(), + message.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_opaque_float_oob_slice", + ); check_result( unsafe { host::trace_amount( @@ -767,6 +830,213 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_amount_oob_slice", ); + check_result( + unsafe { + host::float_compare( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_compare_oob_slice1", + ); + check_result( + unsafe { + host::float_compare( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_compare_oob_slice2", + ); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_add( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_add_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_add( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_add_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_subtract( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_subtract_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_subtract( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_subtract_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_multiply( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_multiply_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_multiply( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_multiply_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_divide( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + float.as_ptr(), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_divide_oob_slice1", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_divide( + float.as_ptr(), + float.len(), + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_divide_oob_slice2", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_root( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + 3, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_root_oob_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_pow( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + 3, + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_pow_oob_slice", + ) + }); + with_buffer::<2, _, _>(|ptr, len| { + check_result( + unsafe { + host::float_log( + float.as_ptr().wrapping_add(1_000_000_000), + float.len(), + ptr, + len, + FLOAT_ROUNDING_MODES_TO_NEAREST, + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "float_log_oob_slice", + ) + }); // invalid UInt256 @@ -1143,6 +1413,18 @@ pub extern "C" fn finish() -> i32 { error_codes::POINTER_OUT_OF_BOUNDS, "trace_oob_string", ); + check_result( + unsafe { + host::trace_opaque_float( + message.as_ptr().wrapping_add(1_000_000_000), + message.len(), + float.as_ptr(), + float.len(), + ) + }, + error_codes::POINTER_OUT_OF_BOUNDS, + "trace_opaque_float_oob_string", + ); check_result( unsafe { host::trace_account( @@ -1188,6 +1470,13 @@ pub extern "C" fn finish() -> i32 { error_codes::DATA_FIELD_TOO_LARGE, "trace_num_too_long", ); + check_result( + unsafe { + host::trace_opaque_float(message.as_ptr(), long_len, float.as_ptr(), float.len()) + }, + error_codes::DATA_FIELD_TOO_LARGE, + "trace_opaque_float_too_long", + ); check_result( unsafe { host::trace_account( @@ -1203,7 +1492,7 @@ pub extern "C" fn finish() -> i32 { check_result( unsafe { host::trace_amount(message.as_ptr(), long_len, amount.as_ptr(), amount.len()) }, error_codes::DATA_FIELD_TOO_LARGE, - "trace_account_too_long", + "trace_amount_too_long", ); // trace amount errors diff --git a/src/test/app/wasm_fixtures/copyFixtures.py b/src/test/app/wasm_fixtures/copyFixtures.py index eb1b6d0f9e..b0c8ad1af2 100644 --- a/src/test/app/wasm_fixtures/copyFixtures.py +++ b/src/test/app/wasm_fixtures/copyFixtures.py @@ -85,8 +85,8 @@ def process_c(project_name): os.path.join(os.path.dirname(__file__), f"{project_name}.wasm") ) build_cmd = ( - f"$CC --sysroot=$SYSROOT -I$SYSROOT/include/wasm32-wasi " - f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " + f"$CC --sysroot=$SYSROOT " + f"-O3 -ffast-math --target=wasm32 -fno-exceptions -fno-threadsafe-statics -fvisibility=default -Wl,--export-all -Wl,--no-entry -Wl,--allow-undefined -DNDEBUG --no-standard-libraries -fno-builtin-memset " f"-o {wasm_path} {project_path}" f"&& wasm-opt {wasm_path} {OPT} -o {wasm_path}" ) diff --git a/src/test/app/wasm_fixtures/fixtures.cpp b/src/test/app/wasm_fixtures/fixtures.cpp index ec91496428..de2ad6291b 100644 --- a/src/test/app/wasm_fixtures/fixtures.cpp +++ b/src/test/app/wasm_fixtures/fixtures.cpp @@ -9854,277 +9854,316 @@ extern std::string const allKeyletsWasmHex = extern std::string const codecovTestsWasmHex = "0061736d0100000001570b60047f7f7f7f017f60057f7f7f7f7f017f60027f7f017f60067f" - "7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f7f7f7f7f7f7f7f017f6003" - "7f7f7e017f60077f7f7f7f7f7f7f017f60047f7f7f7f0002e70b3408686f73745f6c696205" - "7472616365000108686f73745f6c69620974726163655f6e756d000808686f73745f6c6962" - "0e6765745f6c65646765725f73716e000408686f73745f6c6962166765745f706172656e74" - "5f6c65646765725f74696d65000408686f73745f6c6962166765745f706172656e745f6c65" + "7f7f7f7f7f017f60077f7f7f7f7f7f7f017f6000017f60037f7f7f017f60017f017f60087f" + "7f7f7f7f7f7f7f017f60037f7f7e017f60047f7f7f7f0002da0d3e08686f73745f6c696205" + "7472616365000108686f73745f6c69620974726163655f6e756d000908686f73745f6c6962" + "0e6765745f6c65646765725f73716e000508686f73745f6c6962166765745f706172656e74" + "5f6c65646765725f74696d65000508686f73745f6c6962166765745f706172656e745f6c65" "646765725f68617368000208686f73745f6c6962176765745f6c65646765725f6163636f75" "6e745f68617368000208686f73745f6c6962126765745f6c65646765725f74785f68617368" - "000208686f73745f6c69620c6765745f626173655f666565000408686f73745f6c69621161" + "000208686f73745f6c69620c6765745f626173655f666565000508686f73745f6c69621161" "6d656e646d656e745f656e61626c6564000208686f73745f6c69620c6765745f74785f6669" - "656c64000508686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" - "6c69621063616368655f6c65646765725f6f626a000508686f73745f6c69621c6765745f63" - "757272656e745f6c65646765725f6f626a5f6669656c64000508686f73745f6c6962146765" + "656c64000608686f73745f6c69620e6163636f756e745f6b65796c6574000008686f73745f" + "6c69621063616368655f6c65646765725f6f626a000608686f73745f6c69621c6765745f63" + "757272656e745f6c65646765725f6f626a5f6669656c64000608686f73745f6c6962146765" "745f6c65646765725f6f626a5f6669656c64000008686f73745f6c6962136765745f74785f" "6e65737465645f6669656c64000008686f73745f6c6962236765745f63757272656e745f6c" "65646765725f6f626a5f6e65737465645f6669656c64000008686f73745f6c69621b676574" "5f6c65646765725f6f626a5f6e65737465645f6669656c64000108686f73745f6c69621067" - "65745f74785f61727261795f6c656e000608686f73745f6c6962206765745f63757272656e" - "745f6c65646765725f6f626a5f61727261795f6c656e000608686f73745f6c696218676574" + "65745f74785f61727261795f6c656e000708686f73745f6c6962206765745f63757272656e" + "745f6c65646765725f6f626a5f61727261795f6c656e000708686f73745f6c696218676574" "5f6c65646765725f6f626a5f61727261795f6c656e000208686f73745f6c6962176765745f" "74785f6e65737465645f61727261795f6c656e000208686f73745f6c6962276765745f6375" "7272656e745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e00020868" "6f73745f6c69621f6765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c" - "656e000508686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" + "656e000608686f73745f6c69620b7570646174655f64617461000208686f73745f6c696213" "636f6d707574655f7368613531325f68616c66000008686f73745f6c696209636865636b5f" "736967000308686f73745f6c6962076765745f6e6674000308686f73745f6c69620e676574" "5f6e66745f697373756572000008686f73745f6c69620d6765745f6e66745f7461786f6e00" "0008686f73745f6c69620d6765745f6e66745f666c616773000208686f73745f6c69621467" "65745f6e66745f7472616e736665725f666565000208686f73745f6c69620e6765745f6e66" "745f73657269616c000008686f73745f6c69620d74726163655f6163636f756e7400000868" - "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620b6c696e655f" - "6b65796c6574000708686f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c" - "69621163726564656e7469616c5f6b65796c6574000708686f73745f6c69620e6d70746f6b" - "656e5f6b65796c6574000308686f73745f6c69620c636865636b5f6b65796c657400010868" - "6f73745f6c69620f64656c65676174655f6b65796c6574000308686f73745f6c6962166465" - "706f7369745f707265617574685f6b65796c6574000308686f73745f6c69620a6469645f6b" - "65796c6574000008686f73745f6c69620d657363726f775f6b65796c6574000108686f7374" - "5f6c6962136d70745f69737375616e63655f6b65796c6574000108686f73745f6c6962106e" - "66745f6f666665725f6b65796c6574000108686f73745f6c69620c6f666665725f6b65796c" - "6574000108686f73745f6c69620d6f7261636c655f6b65796c6574000108686f73745f6c69" - "620e7061796368616e5f6b65796c6574000908686f73745f6c69621a7065726d697373696f" - "6e65645f646f6d61696e5f6b65796c6574000108686f73745f6c69620e7369676e6572735f" - "6b65796c6574000008686f73745f6c69620d7469636b65745f6b65796c6574000108686f73" - "745f6c69620c7661756c745f6b65796c657400010303020a0405030100110619037f014180" - "80c0000b7f0041959ac0000b7f0041a09ac0000b072e04066d656d6f727902000666696e69" - "736800350a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8026024600" - "0240200020014704402002200341004100410010001a20004100480d01418b80c000410b20" - "00ad1001000b200220032000ac10011a0f0b418b80c000410b2000ac1001000bb62502087f" - "027e230041f0016b22002400419680c000412341004100410010001a100241b9e00041b980" - "c000410e1034100341b2920441c780c00041161034200041f8006a22044200370300200041" - "f0006a22034200370300200041e8006a2202420037030020004200370360200041e0006a22" - "0141201004412041e48ac00041161034200442003703002003420037030020024200370300" - "20004200370360200141201005412041fa8ac0004117103420044200370300200342003703" - "002002420037030020004200370360200141201006412041918bc000411210341007410a41" - "dd80c000410c1034200041206a428182848890a0c08001370300200041186a428182848890" - "a0c08001370300200041106a428182848890a0c080013703002000428182848890a0c08001" - "37030841e980c000410e1008410141f780c00041111034200041086a41201008410141f780" - "c0004111103420034100360200200242003703002000420037036002404181802020014114" - "1009220541144604402000412e6a20002d00623a0000200020002900673703c80120002000" - "41ec006a2900003700cd01200041386a20002900cd01370000200020002f01603b012c2000" - "200028006336002f200020002903c801370033200442003703002003420037030020024200" - "370300200042003703602000412c6a411420014120100a22044120470d01200041c2006a20" - "002d00623a0000200041d0016a200041ef006a2900002208370300200041d8016a200041f7" - "006a2900002209370300200041cf006a2008370000200041d7006a2009370000200041df00" - "6a200041ff006a2d00003a0000200020002f01603b01402000200028006336004320002000" - "290067370047200041406b41204100100b4101418881c00041101034200341003602002002" - "4200370300200042003703604181802020014114100c411441a38bc000411c103420034100" - "360200200242003703002000420037036041014181802020014114100d411441bf8bc00041" - "14103402402001410020016b41037122036a220220014d0d00200304402003210403402001" - "41003a0000200141016a2101200441016b22040d000b0b200341016b4107490d0003402001" - "41003a0000200141076a41003a0000200141066a41003a0000200141056a41003a00002001" - "41046a41003a0000200141036a41003a0000200141026a41003a0000200141016a41003a00" - "00200141086a22012002470d000b0b200241c40020036b2203417c716a220120024b044003" - "4020024100360200200241046a22022001490d000b0b024020012003410371220320016a22" - "044f0d002003220204400340200141003a0000200141016a2101200241016b22020d000b0b" - "200341016b4107490d000340200141003a0000200141076a41003a0000200141066a41003a" - "0000200141056a41003a0000200141046a41003a0000200141036a41003a0000200141026a" - "41003a0000200141016a41003a0000200141086a22012004470d000b0b2000418180203602" - "c801410021010340200741c000490440200041e0006a20076a200041c8016a20016a2d0000" - "3a0000200020002802a00141016a22073602a001200141016a22014104470d010b0b200041" - "d8016a22024100360200200041d0016a22054200370300200042003703c801200041e0006a" - "22012007200041c8016a22044114100e411441d38bc0004113103420024100360200200542" - "00370300200042003703c801200120002802a00120044114100f411441e68bc00041231034" - "2002410036020020054200370300200042003703c8014101200120002802a0012004411410" - "10411441898cc000411b10344189803c10114120419881c000411010344189803c10124120" - "41a881c0004120103441014189803c1013412041c881c00041181034200120002802a00110" - "14412041e081c00041171034200120002802a0011015412041f781c0004127103441012001" - "20002802a00110164120419e82c000411f10342000412c6a220341141017410041bd82c000" - "410b1034200041e0016a220742003703002002420037030020054200370300200042003703" - "c801200120002802a001200441201018412041a48cc0004113103441c882c000410c41d482" - "c000410b41df82c000410e1019410141ed82c00041091034200041c0016a200041206a2903" - "00370300200041b8016a200041186a290300370300200041b0016a200041106a2903003703" - "00200020002903083703a801200241003b010020054200370300200042003703c801200341" - "14200041a8016a2206412020044112101a411241b78cc00041071034200241003602002005" - "4200370300200042003703c8012006412020044114101b411441be8cc000410e1034200041" - "003602c8012006412020044104101c410441cc8cc000410d103420064120101d410841f682" - "c000410d103420064120101e410a418383c00041141034200041003602c801200641202004" - "4104101f410441d98cc000410e1034419783c000410d200341141020412f41a483c000410d" - "1034419783c000410d41b183c00041081021411341b983c000410c1034417f410410044171" - "41c583c000411e1034200041003602c8012004417f1004417141e78cc000411e1034200041" - "ca016a41003a0000200041003b01c801200441031004417d41858dc0004124103420004100" - "3602c8012004418094ebdc031004417341a98dc00041231034419783c000410d2003411410" - "20412f41a483c000410d1034419783c000410d41b183c00041081021411341b983c000410c" - "103441021011416f41e383c000411f1034417f20002802a00110144171418284c000411f10" - "342001417f1014417141a184c000411f103420014181201014417441c084c0004120103420" - "0041e094ebdc036a220620002802a0011014417341e084c000411f1034200620002802a001" - "4101100b417341ff84c00041181034200120002802a0014101100b4171419785c000411a10" - "34200742003703002002420037030020054200370300200042003703c801200620002802a0" - "0120044120100a417341cc8dc0004116103420074200370300200242003703002005420037" - "0300200042003703c801200120002802a00120044120100a417141e28dc000411810342007" - "42003703002002420037030020054200370300200042003703c80120034114200341142006" - "20002802a001200441201022417341fa8dc000411c10342007420037030020024200370300" - "20054200370300200042003703c8012003411420034114200120002802a001200441201022" - "417141968ec000411e10342007420037030020024200370300200542003703002000420037" - "03c80141819ac0004114200620002802a001200441201023417341b48ec000411910342007" - "42003703002002420037030020054200370300200042003703c80141819ac0004114200120" - "002802a001200441201023417141cd8ec000411f1034200742003703002002420037030020" - "054200370300200042003703c80141819ac000411441b185c0004114200441201023417141" - "ec8ec00041291034200041dc016a2000413c6a280100360200200041d4016a200041346a29" - "01003702002000200029012c3702cc01200041808080083602c801200041003b01ec012004" - "411841819ac0004114200041ec016a220241021023417141958fc000410e10342006200028" - "02a001422a1001417341c585c00041111034200041003b01ec014102200241021009416f41" - "a38fc000411b1034200041003b01ec01410220024102100c416f41be8fc000412b10342000" - "41003b01ec014101410220024102100d416f41e98fc0004123103441021011416f41e383c0" - "00411f103441021012416f41d685c000412f1034410141021013416f418586c00041271034" - "41e980c0004181201008417441ac86c000411f103441e980c00041c1001008417441cb86c0" - "00411a1034200041003b01ec01200141812020024102100e4174418c90c000412110342000" - "41003b01ec01200141812020024102100f417441ad90c00041311034200041003b01ec0141" - "012001418120200241021010417441de90c0004129103420014181201014417441e586c000" - "41251034200141812010154174418a87c00041351034410120014181201016417441bf87c0" - "00412d103420014181201017417441ec87c00041191034419783c00041812041d482c00041" - "0b41df82c000410e1019417441ed82c00041091034419783c000410d41d482c00041812041" - "df82c000410e1019417441ed82c00041091034419783c000410d41d482c000410b41df82c0" - "004181201019417441ed82c00041091034200041003b01ec01200141812020024102101841" - "74418791c00041211034200041003b01ec0141819ac00041812041819ac000411420024102" - "1023417441a891c00041181034200041003b01ec0120034114200341142001418120200241" - "021024417441c091c000411f1034200041003b01ec01200441812020034114200241021025" - "417441df91c00041221034419783c000410d200620002802a001410010004173418588c000" - "410f1034419783c000410d200620002802a00110214173419488c000411610342001200028" - "02a0014100100b417141aa88c00041231034200041003b01ec0120034114200120002802a0" - "0120024102101a4171418192c000411a1034200041003b01ec01200120002802a001200241" - "02101b4171419b92c00041211034200041003b01ec01200120002802a00120024102101c41" - "7141bc92c00041201034200120002802a001101d417141cd88c00041201034200120002802" - "a001101e417141ed88c00041271034200041003602ec01200120002802a00120024104101f" - "417141dc92c00041211034200041003b01ec01200120002802a00120024102100a417141fd" - "92c00041231034200041003b01ec01200120002802a0014101200241021026417141a093c0" - "0041211034200041003b01ec01200120002802a00122052003411420012005200241021024" - "417141c193c00041271034200041003b01ec0120034114200120002802a001220520012005" - "200241021024417141e893c00041271034200041003b01ec01200120002802a00120034114" - "2002410210274171418f94c00041251034200041003b01ec0120034114200120002802a001" - "200241021027417141b494c00041251034200041003b01ec01200120002802a00120034114" - "200241021028417141d994c000412c1034200041003b01ec0120034114200120002802a001" - "2002410210284171418595c000412c1034200041003b01ec01200120002802a00120024102" - "1029417141b195c000411f1034200041003b01ec01200120002802a001410120024102102a" - "417141d095c00041221034200041003b01ec01200120002802a0012003411441b185c00041" - "14200241021022417141f295c00041211034200041003b01ec0120034114200120002802a0" - "0141b185c00041142002410210224171419396c00041211034200041003b01ec0120012000" - "2802a001410120024102102b417141b496c00041281034200041003b01ec01200441182001" - "20002802a001200241021025417141dc96c00041231034200041003b01ec01200120002802" - "a001410120024102102c417141ff96c00041251034200041003b01ec01200120002802a001" - "410120024102102d417141a497c00041211034200041003b01ec01200120002802a0014101" - "20024102102e417141c597c00041221034200041003b01ec01200120002802a00120034114" - "410120024102102f417141e797c00041241034200041003b01ec0120034114200120002802" - "a001410120024102102f4171418b98c00041241034200041003b01ec01200120002802a001" - "4101200241021030417141af98c000412f1034200041003b01ec01200120002802a0012002" - "41021031417141de98c00041231034200041003b01ec01200120002802a001410120024102" - "10324171418199c00041221034200041003b01ec01200120002802a0014101200241021033" - "417141a399c00041211034200041003b01ec01200120002802a001419489c0004120200241" - "02101a417141c499c000411c1034419783c000410d200120002802a0011020417141b489c0" - "0041221034419797abdd03410d419489c000412041001000417341d689c000411010344197" - "97abdd03410d200341141020417341e689c00041181034419797abdd03410d41b183c00041" - "081021417341fe89c00041171034200120002802a001200141812041001000417441958ac0" - "00410e1034200141812042011001417441a38ac00041121034419783c00041812020034114" - "1020417441b58ac00041161034419783c00041812041b183c00041081021417441b58ac000" - "41161034419783c000410d200120002802a0011021417141cb8ac00041191034200041003b" - "01ec01200120002802a00120034114200241021025417141e099c00041211034200041f001" - "6a240041010f0b418080c000410b417f20052005417f4e1bac1001000b418080c000410b41" - "7f20042004417f4e1bac1001000b0b8b1a0100418080c0000b811a6572726f725f636f6465" - "3d54455354204641494c45442424242424205354415254494e47205741534d204558454355" - "54494f4e2024242424246765745f6c65646765725f73716e6765745f706172656e745f6c65" - "646765725f74696d656765745f626173655f666565746573745f616d656e646d656e74616d" - "656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a6765745f7478" - "5f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a5f61727261" - "795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765745f74785f6e" - "65737465645f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f626a" - "5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a5f6e65737465" - "645f61727261795f6c656e7570646174655f6461746174657374206d657373616765746573" - "74207075626b657974657374207369676e6174757265636865636b5f7369676765745f6e66" - "745f666c6167736765745f6e66745f7472616e736665725f66656574657374696e67207472" - "61636574726163655f6163636f756e74400000000000005f74726163655f616d6f756e7467" - "65745f706172656e745f6c65646765725f686173685f6e65675f7074726765745f74785f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e65737465645f" - "61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f61727261795f" - "6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f6c656e5f746f" - "6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f7074725f6f6f62" - "63616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c65646765725f" - "6f626a5f77726f6e675f6c656e555344303030303030303030303030303030303074726163" - "655f6e756d5f6f6f625f7374726765745f63757272656e745f6c65646765725f6f626a5f61" - "727261795f6c656e5f696e76616c69645f736669656c646765745f6c65646765725f6f626a" - "5f61727261795f6c656e5f696e76616c69645f736669656c64616d656e646d656e745f656e" - "61626c65645f746f6f5f6269675f736c696365616d656e646d656e745f656e61626c65645f" - "746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f746f6f5f62" - "69675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573746564" - "5f61727261795f6c656e5f746f6f5f6269675f736c6963656765745f6c65646765725f6f62" - "6a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c6963657570646174" - "655f646174615f746f6f5f6269675f736c69636574726163655f6f6f625f736c6963657472" - "6163655f616d6f756e745f6f6f625f736c69636563616368655f6c65646765725f6f626a5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f666c6167735f77726f6e67" - "5f73697a655f75696e743235366765745f6e66745f7472616e736665725f6665655f77726f" - "6e675f73697a655f75696e7432353630303030303030303030303030303030303030303030" - "3030303030303030303174726163655f6163636f756e745f77726f6e675f73697a655f6163" - "636f756e74696474726163655f6f6f625f737472696e6774726163655f6163636f756e745f" - "6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f737472696e6774726163" - "655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e6774726163655f616363" - "6f756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f77726f6e675f6c656e6774" - "686765745f706172656e745f6c65646765725f686173686765745f6c65646765725f616363" - "6f756e745f686173686765745f6c65646765725f74785f686173686765745f63757272656e" - "745f6c65646765725f6f626a5f6669656c646765745f6c65646765725f6f626a5f6669656c" - "646765745f74785f6e65737465645f6669656c646765745f63757272656e745f6c65646765" - "725f6f626a5f6e65737465645f6669656c646765745f6c65646765725f6f626a5f6e657374" - "65645f6669656c64636f6d707574655f7368613531325f68616c666765745f6e6674676574" - "5f6e66745f6973737565726765745f6e66745f7461786f6e6765745f6e66745f7365726961" - "6c6765745f706172656e745f6c65646765725f686173685f6e65675f6c656e6765745f7061" - "72656e745f6c65646765725f686173685f6275665f746f6f5f736d616c6c6765745f706172" - "656e745f6c65646765725f686173685f6c656e5f746f6f5f6c6f6e676163636f756e745f6b" - "65796c65745f6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e" - "6c696e655f6b65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c" - "65745f77726f6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f" - "6f625f617373657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373" - "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f6375727265" - "6e63795f6c656e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76" - "616c69645f736669656c646765745f63757272656e745f6c65646765725f6f626a5f666965" - "6c645f696e76616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c64" - "5f696e76616c69645f736669656c646765745f74785f6e65737465645f6669656c645f746f" - "6f5f6269675f736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e6573" - "7465645f6669656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a" - "5f6e65737465645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368" - "613531325f68616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f" - "5f6269675f736c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f73" - "6c6963656d70746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d707469" - "646765745f6e66745f77726f6e675f73697a655f75696e743235366765745f6e66745f6973" - "737565725f77726f6e675f73697a655f75696e743235366765745f6e66745f7461786f6e5f" - "77726f6e675f73697a655f75696e743235366765745f6e66745f73657269616c5f77726f6e" - "675f73697a655f75696e743235366163636f756e745f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964636865636b5f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e74696463726564656e7469616c5f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469643163726564656e7469616c5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643264656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469643164656c65676174655f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e746964326465706f7369745f707265617574685f6b65796c65745f7772" - "6f6e675f73697a655f6163636f756e746964316465706f7369745f707265617574685f6b65" - "796c65745f77726f6e675f73697a655f6163636f756e746964326469645f6b65796c65745f" - "77726f6e675f73697a655f6163636f756e746964657363726f775f6b65796c65745f77726f" - "6e675f73697a655f6163636f756e7469646c696e655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e746964316c696e655f6b65796c65745f77726f6e675f73697a655f61" - "63636f756e746964326d70745f69737375616e63655f6b65796c65745f77726f6e675f7369" - "7a655f6163636f756e7469646d70746f6b656e5f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646e66745f6f666665725f6b65796c65745f77726f6e675f73697a65" - "5f6163636f756e7469646f666665725f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469646f7261636c655f6b65796c65745f77726f6e675f73697a655f6163636f756e" - "7469647061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469" - "64317061796368616e5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964" - "327065726d697373696f6e65645f646f6d61696e5f6b65796c65745f77726f6e675f73697a" - "655f6163636f756e7469647369676e6572735f6b65796c65745f77726f6e675f73697a655f" - "6163636f756e7469647469636b65745f6b65796c65745f77726f6e675f73697a655f616363" - "6f756e7469647661756c745f6b65796c65745f77726f6e675f73697a655f6163636f756e74" - "69646765745f6e66745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e" - "5f6b65796c65745f6d707469645f77726f6e675f6c656e677468004d0970726f6475636572" - "7302086c616e6775616765010452757374000c70726f6365737365642d6279010572757374" - "631d312e38352e31202834656231363132353020323032352d30332d31352900490f746172" - "6765745f6665617475726573042b0f6d757461626c652d676c6f62616c732b087369676e2d" - "6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c7565"; + "6f73745f6c69620c74726163655f616d6f756e74000008686f73745f6c69620f666c6f6174" + "5f66726f6d5f75696e74000108686f73745f6c69620b6c696e655f6b65796c657400080868" + "6f73745f6c69620a616d6d5f6b65796c6574000308686f73745f6c69621163726564656e74" + "69616c5f6b65796c6574000808686f73745f6c69620e6d70746f6b656e5f6b65796c657400" + "0308686f73745f6c69621274726163655f6f70617175655f666c6f6174000008686f73745f" + "6c69620d666c6f61745f636f6d70617265000008686f73745f6c696209666c6f61745f6164" + "64000408686f73745f6c69620e666c6f61745f7375627472616374000408686f73745f6c69" + "620e666c6f61745f6d756c7469706c79000408686f73745f6c69620c666c6f61745f646976" + "696465000408686f73745f6c69620a666c6f61745f726f6f74000308686f73745f6c696209" + "666c6f61745f706f77000308686f73745f6c696209666c6f61745f6c6f67000108686f7374" + "5f6c69620c636865636b5f6b65796c6574000108686f73745f6c69620f64656c6567617465" + "5f6b65796c6574000308686f73745f6c6962166465706f7369745f707265617574685f6b65" + "796c6574000308686f73745f6c69620a6469645f6b65796c6574000008686f73745f6c6962" + "0d657363726f775f6b65796c6574000108686f73745f6c6962136d70745f69737375616e63" + "655f6b65796c6574000108686f73745f6c6962106e66745f6f666665725f6b65796c657400" + "0108686f73745f6c69620c6f666665725f6b65796c6574000108686f73745f6c69620d6f72" + "61636c655f6b65796c6574000108686f73745f6c69620e7061796368616e5f6b65796c6574" + "000408686f73745f6c69621a7065726d697373696f6e65645f646f6d61696e5f6b65796c65" + "74000108686f73745f6c69620e7369676e6572735f6b65796c6574000008686f73745f6c69" + "620d7469636b65745f6b65796c6574000108686f73745f6c69620c7661756c745f6b65796c" + "657400010303020a0505030100110619037f01418080c0000b7f00419f9ec0000b7f0041a0" + "9ec0000b072e04066d656d6f727902000666696e697368003f0a5f5f646174615f656e6403" + "010b5f5f686561705f6261736503020ab02b02460002402000200147044020022003410041" + "00410010001a20004100480d01418b80c000410b2000ad1001000b200220032000ac10011a" + "0f0b418b80c000410b2000ac1001000be62a02087f027e230041f0016b22002400419680c0" + "00412341004100410010001a100241b9e00041b980c000410e103e100341b2920441c780c0" + "004116103e200041f0006a22054200370300200041e8006a22034200370300200041e0006a" + "2202420037030020004200370358200041d8006a220141201004412041a58cc0004116103e" + "20054200370300200342003703002002420037030020004200370358200141201005412041" + "bb8cc0004117103e2005420037030020034200370300200242003703002000420037035820" + "0141201006412041d28cc0004112103e1007410a41dd80c000410c103e200041186a428182" + "848890a0c08001370300200041106a428182848890a0c08001370300200041086a42818284" + "8890a0c080013703002000428182848890a0c0800137030041e980c000410e1008410141f7" + "80c0004111103e200041201008410141f780c0004111103e20034100360200200242003703" + "002000420037035802404181802020014114100922044114460440200041266a20002d005a" + "3a00002000200029005f3703c8012000200041e4006a2900003700cd01200041306a200029" + "00cd01370000200020002f01583b01242000200028005b360027200020002903c80137002b" + "20054200370300200342003703002002420037030020004200370358200041246a41142001" + "4120100a22054120470d012000413a6a20002d005a3a0000200041d0016a200041e7006a29" + "00002208370300200041d8016a200041ef006a2900002209370300200041c7006a20083700" + "00200041cf006a2009370000200041d7006a200041f7006a2d00003a0000200020002f0158" + "3b01382000200028005b36003b2000200029005f37003f200041386a41204100100b410141" + "8881c0004110103e2003410036020020024200370300200042003703584181802020014114" + "100c411441e48cc000411c103e200341003602002002420037030020004200370358410141" + "81802020014114100d411441808dc0004114103e02402001410020016b41037122036a2202" + "20014d0d0020030440200321050340200141003a0000200141016a2101200541016b22050d" + "000b0b200341016b4107490d000340200141003a0000200141076a41003a0000200141066a" + "41003a0000200141056a41003a0000200141046a41003a0000200141036a41003a00002001" + "41026a41003a0000200141016a41003a0000200141086a22012002470d000b0b200241c400" + "20036b2203417c716a220120024b0440034020024100360200200241046a22022001490d00" + "0b0b024020012003410371220320016a22054f0d002003220204400340200141003a000020" + "0141016a2101200241016b22020d000b0b200341016b4107490d000340200141003a000020" + "0141076a41003a0000200141066a41003a0000200141056a41003a0000200141046a41003a" + "0000200141036a41003a0000200141026a41003a0000200141016a41003a0000200141086a" + "22012005470d000b0b2000418180203602c801410021010340200641c000490440200041d8" + "006a20066a200041c8016a20016a2d00003a0000200020002802980141016a220636029801" + "200141016a22014104470d010b0b200041d8016a22024100360200200041d0016a22044200" + "370300200042003703c801200041d8006a22012006200041c8016a22054114100e41144194" + "8dc0004113103e2002410036020020044200370300200042003703c8012001200028029801" + "20054114100f411441a78dc0004123103e2002410036020020044200370300200042003703" + "c80141012001200028029801200541141010411441ca8dc000411b103e4189803c10114120" + "419881c0004110103e4189803c1012412041a881c0004120103e41014189803c1013412041" + "c881c0004118103e20012000280298011014412041e081c0004117103e2001200028029801" + "1015412041f781c0004127103e4101200120002802980110164120419e82c000411f103e20" + "0041246a220341141017410041bd82c000410b103e200041e0016a22064200370300200242" + "0037030020044200370300200042003703c8012001200028029801200541201018412041e5" + "8dc0004113103e41c882c000410c41d482c000410b41df82c000410e1019410141ed82c000" + "4109103e200041b8016a200041186a290300370300200041b0016a200041106a2903003703" + "00200041a8016a200041086a290300370300200020002903003703a001200241003b010020" + "044200370300200042003703c80120034114200041a0016a2207412020054112101a411241" + "f88dc0004107103e2002410036020020044200370300200042003703c80120074120200541" + "14101b411441ff8dc000410e103e200041003602c8012007412020054104101c4104418d8e" + "c000410d103e20074120101d410841f682c000410d103e20074120101e410a418383c00041" + "14103e200041003602c8012007412020054104101f4104419a8ec000410e103e419783c000" + "410d200341141020412f41a483c000410d103e419783c000410d41b183c000410810214113" + "41b983c000410c103e417f41041004417141c583c000411e103e200041003602c801200541" + "7f1004417141a88ec000411e103e200041ca016a41003a0000200041003b01c80120054103" + "1004417d41c68ec0004124103e200041003602c8012005418094ebdc031004417341ea8ec0" + "004123103e419783c000410d200341141020412f41a483c000410d103e419783c000410d41" + "b183c00041081021411341b983c000410c103e200642003703002002420037030020044200" + "370300200042003703c801200041d894ebdc036a2207410820054120410010224173418d8f" + "c0004117103e200642003703002002420037030020044200370300200042003703c8012001" + "2000280298012005412041001022417141a48fc0004119103e41021011416f41e383c00041" + "1f103e417f20002802980110144171418284c000411f103e2001417f1014417141a184c000" + "411f103e20014181201014417441c084c0004120103e20072000280298011014417341e084" + "c000411f103e20072000280298014101100b417341ff84c0004118103e2001200028029801" + "4101100b4171419785c000411a103e20064200370300200242003703002004420037030020" + "0042003703c801200720002802980120054120100a417341bd8fc0004116103e2006420037" + "03002002420037030020044200370300200042003703c80120012000280298012005412010" + "0a417141d38fc0004118103e20064200370300200242003703002004420037030020004200" + "3703c80120034114200341142007200028029801200541201023417341eb8fc000411c103e" + "200642003703002002420037030020044200370300200042003703c8012003411420034114" + "20012000280298012005412010234171418790c000411e103e200642003703002002420037" + "030020044200370300200042003703c801418b9ec000411420072000280298012005412010" + "24417341a590c0004119103e20064200370300200242003703002004420037030020004200" + "3703c801418b9ec00041142001200028029801200541201024417141be90c000411f103e20" + "0642003703002002420037030020044200370300200042003703c801418b9ec000411441b1" + "85c0004114200541201024417141dd90c0004129103e200642003703002002420037030020" + "044200370300200042003703c80141c585c0004128418b9ec0004114200541201024417141" + "8691c0004125103e200041dc016a200041346a280100360200200041d4016a2000412c6a29" + "0100370200200020002901243702cc01200041808080083602c801200041003b01c0012005" + "4118418b9ec0004114200041c0016a220441021024417141ab91c000410e103e2007200028" + "029801422a1001417341ed85c0004111103e200041003b01c0014102200441021009416f41" + "b991c000411b103e200041003b01c001410220044102100c416f41d491c000412b103e2000" + "41003b01c0014101410220044102100d416f41ff91c0004123103e41021011416f41e383c0" + "00411f103e41021012416f41fe85c000412f103e410141021013416f41ad86c0004127103e" + "41e980c0004181201008417441d486c000411f103e41e980c00041c1001008417441f386c0" + "00411a103e200041003b01c001200141812020044102100e417441a292c0004121103e2000" + "41003b01c001200141812020044102100f417441c392c0004131103e200041003b01c00141" + "012001418120200441021010417441f492c0004129103e200141812010144174418d87c000" + "4125103e20014181201015417441b287c0004135103e410120014181201016417441e787c0" + "00412d103e200141812010174174419488c0004119103e419783c00041812041d482c00041" + "0b41df82c000410e1019417441ed82c0004109103e419783c000410d41d482c00041812041" + "df82c000410e1019417441ed82c0004109103e419783c000410d41d482c000410b41df82c0" + "004181201019417441ed82c0004109103e200041003b01c001200141812020044102101841" + "74419d93c0004121103e200041003b01c001418b9ec000418120418b9ec000411420044102" + "1024417441be93c0004118103e200041003b01c00120034114200341142001418120200441" + "021025417441d693c000411f103e200041003b01c001200541812020034114200441021026" + "417441f593c0004122103e419783c000410d200720002802980141001000417341ad88c000" + "410f103e200042d487b6f4c7d4b1c0003700c001419783c000410d200041c095ebdc036a22" + "0641081027417341bc88c000411c103e419783c000410d20072000280298011021417341d8" + "88c0004116103e20064108200441081028417341ee88c0004118103e200441082006410810" + "284173418689c0004118103e200041003b01ec012006410820044108200041ec016a220241" + "02410010294173419794c0004114103e200041003b01ec0120044108200641082002410241" + "001029417341ab94c0004114103e200041003b01ec01200641082004410820024102410010" + "2a417341bf94c0004119103e200041003b01ec012004410820064108200241024100102a41" + "7341d894c0004119103e200041003b01ec012006410820044108200241024100102b417341" + "f194c0004119103e200041003b01ec012004410820064108200241024100102b4173418a95" + "c0004119103e200041003b01ec012006410820044108200241024100102c417341a395c000" + "4117103e200041003b01ec012004410820064108200241024100102c417341ba95c0004117" + "103e200041003b01ec01200641084103200241024100102d417341d195c0004114103e2000" + "41003b01ec01200641084103200241024100102e417341e595c0004113103e200041003b01" + "ec0120064108200241024100102f417341f895c0004113103e20012000280298014100100b" + "4171419e89c0004123103e200041003b01ec0120034114200120002802980120024102101a" + "4171418b96c000411a103e200041003b01ec01200120002802980120024102101b417141a5" + "96c0004121103e200041003b01ec01200120002802980120024102101c417141c696c00041" + "20103e2001200028029801101d417141c189c0004120103e2001200028029801101e417141" + "e189c0004127103e200041003602ec01200120002802980120024104101f417141e696c000" + "4121103e200041003b01ec01200120002802980120024102100a4171418797c0004123103e" + "200041003b01ec0120012000280298014101200241021030417141aa97c0004121103e2000" + "41003b01ec01200120002802980122062003411420012006200241021025417141cb97c000" + "4127103e200041003b01ec0120034114200120002802980122062001200620024102102541" + "7141f297c0004127103e200041003b01ec0120012000280298012003411420024102103141" + "71419998c0004125103e200041003b01ec0120034114200120002802980120024102103141" + "7141be98c0004125103e200041003b01ec0120012000280298012003411420024102103241" + "7141e398c000412c103e200041003b01ec0120034114200120002802980120024102103241" + "71418f99c000412c103e200041003b01ec012001200028029801200241021033417141bb99" + "c000411f103e200041003b01ec0120012000280298014101200241021034417141da99c000" + "4122103e200041003b01ec0120012000280298012003411441b185c0004114200241021023" + "417141fc99c0004121103e200041003b01ec0120034114200120002802980141b185c00041" + "142002410210234171419d9ac0004121103e200041003b01ec012001200028029801410120" + "0241021035417141be9ac0004128103e200041003b01ec0120054118200120002802980120" + "0241021026417141e69ac0004123103e200041003b01ec0120012000280298014101200241" + "021036417141899bc0004125103e200041003b01ec01200120002802980141012002410210" + "37417141ae9bc0004121103e200041003b01ec012001200028029801410120024102103841" + "7141cf9bc0004122103e200041003b01ec0120012000280298012003411441012002410210" + "39417141f19bc0004124103e200041003b01ec012003411420012000280298014101200241" + "021039417141959cc0004124103e200041003b01ec01200120002802980141012002410210" + "3a417141b99cc000412f103e200041003b01ec01200120002802980120024102103b417141" + "e89cc0004123103e200041003b01ec012001200028029801410120024102103c4171418b9d" + "c0004122103e200041003b01ec012001200028029801410120024102103d417141ad9dc000" + "4121103e200041003b01ec01200120002802980141888ac000412020024102101a417141ce" + "9dc000411c103e419783c000410d20012000280298011020417141a88ac0004122103e4197" + "97abdd03410d41888ac000412041001000417341ca8ac0004110103e419797abdd03410d20" + "0441081027417341da8ac000411d103e419797abdd03410d200341141020417341f78ac000" + "4118103e419797abdd03410d41b183c000410810214173418f8bc0004117103e2001200028" + "029801200141812041001000417441a68bc000410e103e200141812042011001417441b48b" + "c0004112103e419783c000418120200441081027417441c68bc000411b103e419783c00041" + "8120200341141020417441e18bc0004116103e419783c00041812041b183c0004108102141" + "7441f78bc0004115103e419783c000410d200120002802980110214171418c8cc000411910" + "3e200041003b01ec01200120002802980120034114200241021026417141ea9dc000412110" + "3e200041f0016a240041010f0b418080c000410b417f20042004417f4e1bac1001000b4180" + "80c000410b417f20052005417f4e1bac1001000b0bf61d0200418080c0000bc5056572726f" + "725f636f64653d54455354204641494c45442424242424205354415254494e47205741534d" + "20455845435554494f4e2024242424246765745f6c65646765725f73716e6765745f706172" + "656e745f6c65646765725f74696d656765745f626173655f666565746573745f616d656e64" + "6d656e74616d656e646d656e745f656e61626c656463616368655f6c65646765725f6f626a" + "6765745f74785f61727261795f6c656e6765745f63757272656e745f6c65646765725f6f62" + "6a5f61727261795f6c656e6765745f6c65646765725f6f626a5f61727261795f6c656e6765" + "745f74785f6e65737465645f61727261795f6c656e6765745f63757272656e745f6c656467" + "65725f6f626a5f6e65737465645f61727261795f6c656e6765745f6c65646765725f6f626a" + "5f6e65737465645f61727261795f6c656e7570646174655f6461746174657374206d657373" + "61676574657374207075626b657974657374207369676e6174757265636865636b5f736967" + "6765745f6e66745f666c6167736765745f6e66745f7472616e736665725f66656574657374" + "696e6720747261636574726163655f6163636f756e74400000000000005f74726163655f61" + "6d6f756e746765745f706172656e745f6c65646765725f686173685f6e65675f7074726765" + "745f74785f61727261795f6c656e5f696e76616c69645f736669656c646765745f74785f6e" + "65737465645f61727261795f6c656e5f6e65675f7074726765745f74785f6e65737465645f" + "61727261795f6c656e5f6e65675f6c656e6765745f74785f6e65737465645f61727261795f" + "6c656e5f746f6f5f6c6f6e676765745f74785f6e65737465645f61727261795f6c656e5f70" + "74725f6f6f6263616368655f6c65646765725f6f626a5f7074725f6f6f6263616368655f6c" + "65646765725f6f626a5f77726f6e675f6c656e555344303030303030303030303030303030" + "30300041ed85c0000b9e1874726163655f6e756d5f6f6f625f7374726765745f6375727265" + "6e745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669656c" + "646765745f6c65646765725f6f626a5f61727261795f6c656e5f696e76616c69645f736669" + "656c64616d656e646d656e745f656e61626c65645f746f6f5f6269675f736c696365616d65" + "6e646d656e745f656e61626c65645f746f6f5f6c6f6e676765745f74785f6e65737465645f" + "61727261795f6c656e5f746f6f5f6269675f736c6963656765745f63757272656e745f6c65" + "646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f5f6269675f736c69" + "63656765745f6c65646765725f6f626a5f6e65737465645f61727261795f6c656e5f746f6f" + "5f6269675f736c6963657570646174655f646174615f746f6f5f6269675f736c6963657472" + "6163655f6f6f625f736c69636574726163655f6f70617175655f666c6f61745f6f6f625f73" + "6c69636574726163655f616d6f756e745f6f6f625f736c696365666c6f61745f636f6d7061" + "72655f6f6f625f736c69636531666c6f61745f636f6d706172655f6f6f625f736c69636532" + "63616368655f6c65646765725f6f626a5f77726f6e675f73697a655f75696e743235366765" + "745f6e66745f666c6167735f77726f6e675f73697a655f75696e743235366765745f6e6674" + "5f7472616e736665725f6665655f77726f6e675f73697a655f75696e743235363030303030" + "30303030303030303030303030303030303030303030303030303174726163655f6163636f" + "756e745f77726f6e675f73697a655f6163636f756e74696474726163655f6f6f625f737472" + "696e6774726163655f6f70617175655f666c6f61745f6f6f625f737472696e677472616365" + "5f6163636f756e745f6f6f625f737472696e6774726163655f616d6f756e745f6f6f625f73" + "7472696e6774726163655f746f6f5f6c6f6e6774726163655f6e756d5f746f6f5f6c6f6e67" + "74726163655f6f70617175655f666c6f61745f746f6f5f6c6f6e6774726163655f6163636f" + "756e745f746f6f5f6c6f6e6774726163655f616d6f756e745f746f6f5f6c6f6e6774726163" + "655f616d6f756e745f77726f6e675f6c656e6774686765745f706172656e745f6c65646765" + "725f686173686765745f6c65646765725f6163636f756e745f686173686765745f6c656467" + "65725f74785f686173686765745f63757272656e745f6c65646765725f6f626a5f6669656c" + "646765745f6c65646765725f6f626a5f6669656c646765745f74785f6e65737465645f6669" + "656c646765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669656c" + "646765745f6c65646765725f6f626a5f6e65737465645f6669656c64636f6d707574655f73" + "68613531325f68616c666765745f6e66746765745f6e66745f6973737565726765745f6e66" + "745f7461786f6e6765745f6e66745f73657269616c6765745f706172656e745f6c65646765" + "725f686173685f6e65675f6c656e6765745f706172656e745f6c65646765725f686173685f" + "6275665f746f6f5f736d616c6c6765745f706172656e745f6c65646765725f686173685f6c" + "656e5f746f6f5f6c6f6e67666c6f61745f66726f6d5f75696e745f6c656e5f6f6f62666c6f" + "61745f66726f6d5f75696e745f77726f6e675f6c656e6163636f756e745f6b65796c65745f" + "6c656e5f6f6f626163636f756e745f6b65796c65745f77726f6e675f6c656e6c696e655f6b" + "65796c65745f6c656e5f6f6f625f63757272656e63796c696e655f6b65796c65745f77726f" + "6e675f6c656e5f63757272656e6379616d6d5f6b65796c65745f6c656e5f6f6f625f617373" + "657432616d6d5f6b65796c65745f6c656e5f77726f6e675f6c656e5f617373657432616d6d" + "5f6b65796c65745f6c656e5f77726f6e675f6e6f6e5f7872705f63757272656e63795f6c65" + "6e616d6d5f6b65796c65745f6c656e5f77726f6e675f7872705f63757272656e63795f6c65" + "6e616d6d5f6b65796c65745f6d70746765745f74785f6669656c645f696e76616c69645f73" + "6669656c646765745f63757272656e745f6c65646765725f6f626a5f6669656c645f696e76" + "616c69645f736669656c646765745f6c65646765725f6f626a5f6669656c645f696e76616c" + "69645f736669656c646765745f74785f6e65737465645f6669656c645f746f6f5f6269675f" + "736c6963656765745f63757272656e745f6c65646765725f6f626a5f6e65737465645f6669" + "656c645f746f6f5f6269675f736c6963656765745f6c65646765725f6f626a5f6e65737465" + "645f6669656c645f746f6f5f6269675f736c696365636f6d707574655f7368613531325f68" + "616c665f746f6f5f6269675f736c696365616d6d5f6b65796c65745f746f6f5f6269675f73" + "6c69636563726564656e7469616c5f6b65796c65745f746f6f5f6269675f736c6963656d70" + "746f6b656e5f6b65796c65745f746f6f5f6269675f736c6963655f6d70746964666c6f6174" + "5f6164645f6f6f625f736c69636531666c6f61745f6164645f6f6f625f736c69636532666c" + "6f61745f73756274726163745f6f6f625f736c69636531666c6f61745f7375627472616374" + "5f6f6f625f736c69636532666c6f61745f6d756c7469706c795f6f6f625f736c6963653166" + "6c6f61745f6d756c7469706c795f6f6f625f736c69636532666c6f61745f6469766964655f" + "6f6f625f736c69636531666c6f61745f6469766964655f6f6f625f736c69636532666c6f61" + "745f726f6f745f6f6f625f736c696365666c6f61745f706f775f6f6f625f736c696365666c" + "6f61745f6c6f675f6f6f625f736c6963656765745f6e66745f77726f6e675f73697a655f75" + "696e743235366765745f6e66745f6973737565725f77726f6e675f73697a655f75696e7432" + "35366765745f6e66745f7461786f6e5f77726f6e675f73697a655f75696e74323536676574" + "5f6e66745f73657269616c5f77726f6e675f73697a655f75696e743235366163636f756e74" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964636865636b5f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e74696463726564656e7469616c5f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469643163726564656e7469616c5f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643264656c65676174655f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469643164656c65676174655f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e746964326465706f7369745f70" + "7265617574685f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316465" + "706f7369745f707265617574685f6b65796c65745f77726f6e675f73697a655f6163636f75" + "6e746964326469645f6b65796c65745f77726f6e675f73697a655f6163636f756e74696465" + "7363726f775f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646c696e65" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e746964316c696e655f6b6579" + "6c65745f77726f6e675f73697a655f6163636f756e746964326d70745f69737375616e6365" + "5f6b65796c65745f77726f6e675f73697a655f6163636f756e7469646d70746f6b656e5f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646e66745f6f666665725f6b" + "65796c65745f77726f6e675f73697a655f6163636f756e7469646f666665725f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469646f7261636c655f6b65796c65745f77" + "726f6e675f73697a655f6163636f756e7469647061796368616e5f6b65796c65745f77726f" + "6e675f73697a655f6163636f756e746964317061796368616e5f6b65796c65745f77726f6e" + "675f73697a655f6163636f756e746964327065726d697373696f6e65645f646f6d61696e5f" + "6b65796c65745f77726f6e675f73697a655f6163636f756e7469647369676e6572735f6b65" + "796c65745f77726f6e675f73697a655f6163636f756e7469647469636b65745f6b65796c65" + "745f77726f6e675f73697a655f6163636f756e7469647661756c745f6b65796c65745f7772" + "6f6e675f73697a655f6163636f756e7469646765745f6e66745f77726f6e675f73697a655f" + "6163636f756e7469646d70746f6b656e5f6b65796c65745f6d707469645f77726f6e675f6c" + "656e677468004d0970726f64756365727302086c616e6775616765010452757374000c7072" + "6f6365737365642d6279010572757374631d312e38352e3120283465623136313235302032" + "3032352d30332d31352900490f7461726765745f6665617475726573042b0f6d757461626c" + "652d676c6f62616c732b087369676e2d6578742b0f7265666572656e63652d74797065732b" + "0a6d756c746976616c7565"; extern std::string const floatTestsWasmHex = "0061736d0100000001430860057f7f7f7f7f017f60047e7f7f7f017f60047f7f7f7f017f60" diff --git a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp index 1bd9622a4c..5293f1db78 100644 --- a/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp +++ b/src/xrpld/app/wasm/detail/HostFuncWrapper.cpp @@ -1647,12 +1647,12 @@ floatFromInt_wrap( int i = 0; auto const x = getDataInt64(runtime, params, i); if (!x) - return hfResult(results, x.error()); + return hfResult(results, x.error()); // LCOV_EXCL_LINE i = 3; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 1; return returnResult( @@ -1676,7 +1676,7 @@ floatFromUint_wrap( i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult( @@ -1692,16 +1692,16 @@ floatSet_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) int i = 0; auto const exp = getDataInt32(runtime, params, i); if (!exp) - return hfResult(results, exp.error()); + return hfResult(results, exp.error()); // LCOV_EXCL_LINE auto const mant = getDataInt64(runtime, params, i); if (!mant) - return hfResult(results, mant.error()); + return hfResult(results, mant.error()); // LCOV_EXCL_LINE i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult( @@ -1747,7 +1747,7 @@ floatAdd_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1775,7 +1775,7 @@ floatSubtract_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1803,7 +1803,7 @@ floatMultiply_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1831,7 +1831,7 @@ floatDivide_wrap( i = 6; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 4; return returnResult( @@ -1851,12 +1851,12 @@ floatRoot_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) auto const n = getDataInt32(runtime, params, i); if (!n) - return hfResult(results, n.error()); + return hfResult(results, n.error()); // LCOV_EXCL_LINE i = 5; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; return returnResult( @@ -1879,12 +1879,12 @@ floatPower_wrap( auto const n = getDataInt32(runtime, params, i); if (!n) - return hfResult(results, n.error()); + return hfResult(results, n.error()); // LCOV_EXCL_LINE i = 5; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 3; return returnResult( @@ -1905,7 +1905,7 @@ floatLog_wrap(void* env, wasm_val_vec_t const* params, wasm_val_vec_t* results) i = 4; auto const rounding = getDataInt32(runtime, params, i); if (!rounding) - return hfResult(results, rounding.error()); + return hfResult(results, rounding.error()); // LCOV_EXCL_LINE i = 2; return returnResult(