diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..df1d850fdb7f87b06fbfa30d4370e7a4700fd311 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +.vscode +*.swp diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..f79ad85fa5d77101795f6f8f7d82e25e083a53b5 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3216 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" +dependencies = [ + "gimli 0.25.0", +] + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli 0.26.1", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "ambient-authority" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3" + +[[package]] +name = "async-trait" +version = "0.1.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" +dependencies = [ + "addr2line 0.17.0", + "cc", + "cfg-if", + "libc", + "miniz_oxide 0.4.4", + "object 0.27.1", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "buf_redux" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +dependencies = [ + "memchr", + "safemem", +] + +[[package]] +name = "bumpalo" +version = "3.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cap-fs-ext" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf5c3b436b94a1adac74032ff35d8aa5bae6ec2a7900e76432c9ae8dac4d673" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "rustc_version", + "winapi", +] + +[[package]] +name = "cap-primitives" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51bd736eec54ae6552d18b0c958885b01d88c84c5fe6985e28c2b57ff385e94" +dependencies = [ + "ambient-authority", + "errno", + "fs-set-times 0.12.2", + "io-lifetimes", + "ipnet", + "maybe-owned", + "once_cell", + "rsix 0.23.9", + "rustc_version", + "unsafe-io", + "winapi", + "winapi-util", + "winx", +] + +[[package]] +name = "cap-rand" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6e89d00b0cebeb6da7a459b81e6a49cf2092cc4afe03f28eb99b8f0e889344" +dependencies = [ + "ambient-authority", + "rand", +] + +[[package]] +name = "cap-std" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037334fe2f30ec71bcc51af1e8cbb8a9f9ac6a6b8cbd657d58dfef2ad5b9f19a" +dependencies = [ + "cap-primitives", + "io-lifetimes", + "ipnet", + "rsix 0.23.9", + "rustc_version", + "unsafe-io", +] + +[[package]] +name = "cap-time-ext" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aea5319ada3a9517fc70eafe9cf3275f04da795c53770ebc5d91f4a33f4dd2b5" +dependencies = [ + "cap-primitives", + "once_cell", + "rsix 0.23.9", + "winx", +] + +[[package]] +name = "cast" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "cc" +version = "1.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "bitflags", + "textwrap 0.11.0", + "unicode-width", +] + +[[package]] +name = "clap" +version = "3.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "clap_lex", + "indexmap", + "once_cell", + "strsim", + "termcolor", + "textwrap 0.15.0", +] + +[[package]] +name = "clap_derive" +version = "3.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" +dependencies = [ + "heck 0.4.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15013642ddda44eebcf61365b2052a23fd8b7314f90ba44aa059ec02643c5139" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298f2a7ed5fdcb062d8e78b7496b0f4b95265d20245f2d0ca88f846dd192a3a3" +dependencies = [ + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "gimli 0.25.0", + "log", + "regalloc", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf504261ac62dfaf4ffb3f41d88fd885e81aba947c1241275043885bc5f0bac" +dependencies = [ + "cranelift-codegen-shared", + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd2a72db4301dbe7e5a4499035eedc1e82720009fb60603e20504d8691fa9cd" + +[[package]] +name = "cranelift-entity" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48868faa07cacf948dc4a1773648813c0e453ff9467e800ff10f6a78c021b546" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351c9d13b4ecd1a536215ec2fd1c3ee9ee8bc31af172abf1e45ed0adb7a931df" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-native" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df8b556663d7611b137b24db7f6c8d9a8a27d7f29c7ea7835795152c94c1b75" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a69816d90db694fa79aa39b89dda7208a4ac74b6f2b8f3c4da26ee1c8bdfc5e" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc32fast" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +dependencies = [ + "atty", + "cast", + "clap 2.34.0", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if", + "lazy_static", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "file-per-thread-logger" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "filetime" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys", +] + +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide 0.5.3", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] + +[[package]] +name = "fs-set-times" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05f9ac4aceff7d9f3cd1701217aa72f87a0bf7c6592886efe819727292a4c7f" +dependencies = [ + "io-lifetimes", + "rsix 0.22.4", + "winapi", +] + +[[package]] +name = "fs-set-times" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9a6902d89feff48dc1cb9529bf2972cb98100310987b7a0ff9ac4c51adb0aff" +dependencies = [ + "io-lifetimes", + "rsix 0.25.1", + "winapi", +] + +[[package]] +name = "futures-channel" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" + +[[package]] +name = "futures-macro" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" + +[[package]] +name = "futures-task" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" + +[[package]] +name = "futures-util" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" +dependencies = [ + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check 0.9.3", +] + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + +[[package]] +name = "h2" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util 0.7.3", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hashbrown" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022" + +[[package]] +name = "headers" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c4eb0471fcb85846d8b0690695ef354f9afb11cb03cac2e1d7c9253351afb0" +dependencies = [ + "base64", + "bitflags", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha-1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.1", +] + +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + +[[package]] +name = "hyper" +version = "0.14.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 0.4.8", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyperx" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c" +dependencies = [ + "base64", + "bytes", + "http", + "httpdate", + "language-tags", + "mime", + "percent-encoding 2.1.0", + "unicase 2.6.0", +] + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "io-lifetimes" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "278e90d6f8a6c76a8334b336e306efa3c5f2b604048cbfd486d6f49878e3af14" +dependencies = [ + "rustc_version", + "winapi", +] + +[[package]] +name = "ipnet" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" + +[[package]] +name = "itertools" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jwt" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98328bb4f360e6b2ceb1f95645602c7014000ef0c3809963df8ad3a3a09f8d99" +dependencies = [ + "base64", + "crypto-mac", + "digest", + "hmac", + "serde", + "serde_json", + "sha2", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "linux-raw-sys" +version = "0.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5802c30e8a573a9af97d504e9e66a076e0b881112222a67a8e037a79658447d6" + +[[package]] +name = "linux-raw-sys" +version = "0.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687387ff42ec7ea4f2149035a5675fedb675d26f98db90a1846ac63d3addb5f5" + +[[package]] +name = "linux-raw-sys" +version = "0.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373555fbb6dbd7a7a9e6527215899c7715f89f1ffa7921eb4ee983642afb8c65" + +[[package]] +name = "lock_api" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +dependencies = [ + "mime", + "unicase 2.6.0", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "multipart" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" +dependencies = [ + "buf_redux", + "httparse", + "log", + "mime", + "mime_guess", + "quick-error", + "rand", + "safemem", + "tempfile", + "twoway", +] + +[[package]] +name = "native-tls" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +dependencies = [ + "crc32fast", + "indexmap", + "memchr", +] + +[[package]] +name = "object" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] + +[[package]] +name = "oci-distribution" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "041f69213c79239ee261d70755c14902f26d9efb322b42f8b0cd4a315fde91fe" +dependencies = [ + "futures-util", + "hyperx", + "jwt", + "lazy_static", + "olpc-cjson", + "regex", + "reqwest", + "serde", + "serde_json", + "sha2", + "thiserror", + "tokio", + "tracing", + "unicase 1.4.2", + "url 1.7.2", + "www-authenticate", +] + +[[package]] +name = "olpc-cjson" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ca49fe685014bbf124ee547da94ed7bb65a6eb9dc9c4711773c081af96a39c" +dependencies = [ + "serde", + "serde_json", + "unicode-normalization", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "paste" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1622113ce508488160cff04e6abc60960e676d330e1ca0f77c0b8df17c81438f" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b95af56fee93df76d721d356ac1ca41fccf168bc448eb14049234df764ba3e76" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "plotters" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" + +[[package]] +name = "plotters-svg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check 0.9.3", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check 0.9.3", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "psm" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd136ff4382c4753fc061cb9e4712ab2af263376b95bbd5bd8cd50c020b78e69" +dependencies = [ + "cc", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +dependencies = [ + "getrandom", + "redox_syscall", +] + +[[package]] +name = "regalloc" +version = "0.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "571f7f397d61c4755285cd37853fe8e03271c243424a907415909379659381c5" +dependencies = [ + "log", + "rustc-hash", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "region" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" +dependencies = [ + "bitflags", + "libc", + "mach", + "winapi", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding 2.1.0", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-util 0.6.9", + "url 2.2.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rsix" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19dc84e006a7522c44207fcd9c1f504f7c9a503093070840105930a685e299a0" +dependencies = [ + "bitflags", + "cc", + "errno", + "io-lifetimes", + "itoa 0.4.8", + "libc", + "linux-raw-sys 0.0.23", + "once_cell", + "rustc_version", +] + +[[package]] +name = "rsix" +version = "0.23.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f64c5788d5aab8b75441499d99576a24eb09f76fb267b36fec7e3d970c66431" +dependencies = [ + "bitflags", + "cc", + "errno", + "io-lifetimes", + "itoa 0.4.8", + "libc", + "linux-raw-sys 0.0.28", + "once_cell", + "rustc_version", +] + +[[package]] +name = "rsix" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4da272ce5ef18de07bd84edb77769ce16da0a4ca8f84d4389efafaf0850f9f" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.0.29", + "rustc_version", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +dependencies = [ + "lazy_static", + "windows-sys", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" + +[[package]] +name = "serde" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcbd0344bc6533bc7ec56df11d42fb70f1b912351c0825ccb7211b59d8af7cf5" +dependencies = [ + "itoa 1.0.1", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83bdb7831b2d85ddf4a7b148aa19d0587eddbe8671a436b7bd1182eaad0f2829" +dependencies = [ + "dirs-next", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" + +[[package]] +name = "smallvec" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" + +[[package]] +name = "socket2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "system-interface" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "024bceeab03feb74fb78395d5628df5664a7b6b849155f5e5db05e7e7b962128" +dependencies = [ + "atty", + "bitflags", + "cap-fs-ext", + "cap-std", + "io-lifetimes", + "rsix 0.23.9", + "rustc_version", + "winapi", + "winx", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bffcddbc2458fa3e6058414599e3c838a022abae82e5c67b4f7f80298d5bff" + +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" + +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +dependencies = [ + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511de3f85caf1c98983545490c3d09685fa8eb634e57eec22bb4db271f46cbd8" +dependencies = [ + "futures-util", + "log", + "pin-project", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59" +dependencies = [ + "ansi_term", + "matchers", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "tungstenite" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0b2d8558abd2e276b0a8df5c05a2ec762609344191e5fd23e292c910e9165b5" +dependencies = [ + "base64", + "byteorder", + "bytes", + "http", + "httparse", + "log", + "rand", + "sha-1", + "thiserror", + "url 2.2.2", + "utf-8", +] + +[[package]] +name = "twoway" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" +dependencies = [ + "memchr", +] + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicase" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +dependencies = [ + "version_check 0.1.5", +] + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check 0.9.3", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" + +[[package]] +name = "unicode-normalization" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "unsafe-io" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11e8cceed59fe60bd092be347343917cbc14b9239536980f09fe34e22c8efbc7" +dependencies = [ + "io-lifetimes", + "rustc_version", + "winapi", +] + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna 0.2.3", + "matches", + "percent-encoding 2.1.0", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "warp" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cef4e1e9114a4b7f1ac799f16ce71c14de5778500c5450ec6b7b920c55b587e" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "headers", + "http", + "hyper", + "log", + "mime", + "mime_guess", + "multipart", + "percent-encoding 2.1.0", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tokio-util 0.6.9", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi-cap-std-sync" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d864043ca88090ab06a24318b6447c7558eb797390ff312f4cc8d36348622f" +dependencies = [ + "anyhow", + "async-trait", + "bitflags", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times 0.11.0", + "io-lifetimes", + "lazy_static", + "rsix 0.22.4", + "system-interface", + "tracing", + "wasi-common", + "winapi", +] + +[[package]] +name = "wasi-common" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f782e345db0464507cff47673c18b2765c020e8086e16a008a2bfffe0c78c819" +dependencies = [ + "anyhow", + "bitflags", + "cap-rand", + "cap-std", + "io-lifetimes", + "rsix 0.22.4", + "thiserror", + "tracing", + "wiggle", + "winapi", +] + +[[package]] +name = "wasi-tokio" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb34b1f956b3035b9f0e260725fb5b20d0b044a74362a45bb4558c1de46e345c" +dependencies = [ + "anyhow", + "bitflags", + "cap-fs-ext", + "cap-std", + "cap-time-ext", + "fs-set-times 0.11.0", + "io-lifetimes", + "lazy_static", + "rsix 0.22.4", + "system-interface", + "tokio", + "tracing", + "wasi-cap-std-sync", + "wasi-common", + "wiggle", + "winapi", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" + +[[package]] +name = "wasm-encoder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f76068e87fe9b837a6bc2ccded66784173eadb828c4168643e9fddf6f9ed2e61" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasm_engine" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap 3.2.8", + "criterion", + "flate2", + "http", + "indexmap", + "lazy_static", + "oci-distribution", + "percent-encoding 2.1.0", + "semver", + "serde", + "serde_derive", + "serde_json", + "tar", + "tokio", + "toml", + "tracing", + "tracing-subscriber", + "warp", + "wasi-common", + "wasmtime", + "wasmtime-wasi", +] + +[[package]] +name = "wasmparser" +version = "0.80.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "449167e2832691a1bff24cde28d2804e90e09586a448c8e76984792c44334a6b" + +[[package]] +name = "wasmtime" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899b1e5261e3d3420860dacfb952871ace9d7ba9f953b314f67aaf9f8e2a4d89" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "cfg-if", + "cpp_demangle", + "indexmap", + "lazy_static", + "libc", + "log", + "object 0.26.2", + "paste", + "psm", + "rayon", + "region", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit", + "wasmtime-runtime", + "wat", + "winapi", +] + +[[package]] +name = "wasmtime-cache" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2493b81d7a9935f7af15e06beec806f256bc974a90a843685f3d61f2fc97058" +dependencies = [ + "anyhow", + "base64", + "bincode", + "directories-next", + "errno", + "file-per-thread-logger", + "libc", + "log", + "serde", + "sha2", + "toml", + "winapi", + "zstd", +] + +[[package]] +name = "wasmtime-cranelift" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99706bacdf5143f7f967d417f0437cce83a724cf4518cb1a3ff40e519d793021" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.25.0", + "more-asserts", + "object 0.26.2", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac42cb562a2f98163857605f02581d719a410c5abe93606128c59a10e84de85b" +dependencies = [ + "anyhow", + "cfg-if", + "cranelift-entity", + "gimli 0.25.0", + "indexmap", + "log", + "more-asserts", + "object 0.26.2", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8779dd78755a248512233df4f6eaa6ba075c41bea2085fec750ed2926897bf95" +dependencies = [ + "cc", + "libc", + "winapi", +] + +[[package]] +name = "wasmtime-jit" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f46dd757225f29a419be415ea6fb8558df9b0194f07e3a6a9c99d0e14dd534" +dependencies = [ + "addr2line 0.16.0", + "anyhow", + "bincode", + "cfg-if", + "gimli 0.25.0", + "libc", + "log", + "more-asserts", + "object 0.26.2", + "region", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", + "wasmtime-runtime", + "winapi", +] + +[[package]] +name = "wasmtime-runtime" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122215a44923f395487048cb0a1d60b5b32c73aab15cf9364b798dbaff0996f" +dependencies = [ + "anyhow", + "backtrace", + "cc", + "cfg-if", + "indexmap", + "lazy_static", + "libc", + "log", + "mach", + "memoffset", + "more-asserts", + "rand", + "region", + "thiserror", + "wasmtime-environ", + "wasmtime-fiber", + "winapi", +] + +[[package]] +name = "wasmtime-types" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9b01caf8a204ef634ebac99700e77ba716d3ebbb68a1abbc2ceb6b16dbec9e4" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "wasmtime-wasi" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b0e75c044aa4afba7f274a625a43260390fbdd8ca79e4aeed6827f7760fba2" +dependencies = [ + "anyhow", + "wasi-cap-std-sync", + "wasi-common", + "wasi-tokio", + "wasmtime", + "wiggle", +] + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + +[[package]] +name = "wast" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "408feaebf6dbf9d154957873b14d00e8fba4cbc17a8cbb1bc9e4c1db425c50a8" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b70bfff0cfaf33dc9d641196dbcd0023a2da8b4b9030c59535cb44e2884983b" +dependencies = [ + "wast 43.0.0", +] + +[[package]] +name = "web-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wiggle" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd408c06047cf3aa2d0408a34817da7863bcfc1e7d16c154ef92864b5fa456a" +dependencies = [ + "anyhow", + "async-trait", + "bitflags", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", + "witx", +] + +[[package]] +name = "wiggle-generate" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02575a1580353bd15a0bce308887ff6c9dae13fb3c60d49caf2e6dabf944b14d" +dependencies = [ + "anyhow", + "heck 0.3.3", + "proc-macro2", + "quote", + "shellexpand", + "syn", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b91f637729488f0318db544b24493788a3228fed1e1ccd24abbe4fc4f92663" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wiggle-generate", + "witx", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] + +[[package]] +name = "winx" +version = "0.29.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afba0891d41a50943c32fcea61e124b9dd5755275054b0a3e1e1eba26e671137" +dependencies = [ + "bitflags", + "io-lifetimes", + "winapi", +] + +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast 35.0.2", +] + +[[package]] +name = "www-authenticate" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fd1970505d8d9842104b229ba0c6b6331c0897677d0fc0517ea657e77428d0" +dependencies = [ + "hyperx", + "unicase 1.4.2", + "url 1.7.2", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "zstd" +version = "0.9.2+zstd.1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "4.1.3+zstd.1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "1.6.2+zstd.1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f" +dependencies = [ + "cc", + "libc", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..716bb32cdf9b6f4035eb7326b8e1f91d3627662e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,40 @@ +[package] +name = "wasm_engine" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tokio = { version = "1", features = ["full"] } +warp = "0.3" +lazy_static = "1.4" +anyhow = "1.0.44" +tracing = "0.1" +tracing-subscriber = {version = "0.3.14", features = ["env-filter"] } +semver = "^1.0" +wasmtime = "0.30.0" +wasmtime-wasi = { version= "0.30.0", features = ["tokio"]} +wasi-common = "0.30.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +serde_derive = "1.0" +indexmap = "1.7.0" +percent-encoding = "2.1.0" +clap = { version = "3.2.6", features = ["derive"] } +toml = "0.5.9" +flate2 = "1.0" +oci-distribution = "0.9.2" +tar = "0.4" +http = "0.2.8" + + +[build-dependencies] +anyhow = "1.0.44" + +[dev-dependencies] +criterion = "0.3" + +[[bench]] +name = "benchmark" +harness = false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..ee5839968a2bf86c93283efc09d40fd050b7cfa2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,127 @@ + 木兰宽松许可证, 第2版 + + 木兰宽松许可证, 第2版 + 2020年1月 http://license.coscl.org.cn/MulanPSL2 + + + 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: + + 0. 定义 + + “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 + + “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 + + “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 + + “法人实体”是指提交贡献的机构及其“关联实体”。 + + “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 + + 1. 授予版权许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 + + 2. 授予专利许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 + + 3. 无商标许可 + + “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 + + 4. 分发限制 + + 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 + + 5. 免责声明与责任限制 + + “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 + + 6. 语言 + “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 + + 条款结束 + + 如何将木兰宽松许可证,第2版,应用到您的软件 + + 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: + + 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; + + 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; + + 3, 请将如下声明文本放入每个源文件的头部注释中。 + + Copyright (c) [Year] [name of copyright holder] + [Software Name] is licensed under Mulan PSL v2. + You can use this software according to the terms and conditions of the Mulan PSL v2. + You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 + THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + See the Mulan PSL v2 for more details. + + + Mulan Permissive Software License,Version 2 + + Mulan Permissive Software License,Version 2 (Mulan PSL v2) + January 2020 http://license.coscl.org.cn/MulanPSL2 + + Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: + + 0. Definition + + Software means the program and related documents which are licensed under this License and comprise all Contribution(s). + + Contribution means the copyrightable work licensed by a particular Contributor under this License. + + Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. + + Legal Entity means the entity making a Contribution and all its Affiliates. + + Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. + + 1. Grant of Copyright License + + Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. + + 2. Grant of Patent License + + Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. + + 3. No Trademark License + + No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. + + 4. Distribution Restriction + + You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. + + 5. Disclaimer of Warranty and Limitation of Liability + + THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 6. Language + + THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. + + END OF THE TERMS AND CONDITIONS + + How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software + + To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: + + i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; + + ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; + + iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. + + + Copyright (c) [Year] [name of copyright holder] + [Software Name] is licensed under Mulan PSL v2. + You can use this software according to the terms and conditions of the Mulan PSL v2. + You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 + THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + See the Mulan PSL v2 for more details. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..170d5b39b58e3d29a24dd37e34c53ce07fd0d734 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +RUST_SCRIPT = $(shell command -v rust-script) + +.PHONY: wasm-engine +wasm-engine: + @cargo build --release + @mv /usr/bin/wasm-engine /usr/bin/wasm-engine-bak + @cp ./target/release/wasm-engine /usr/bin + +.PHONY: apps +apps: +ifeq ($(RUST_SCRIPT), "") + echo "rust-script not exist, installing......" + cargo install rust-script +endif + @cp build.rs run.sh + @chmod +x run.sh + @./run.sh | grep -v cargo:rerun | grep -v cargo:warning | grep -v cargo:rustc-env || true + @rm -f run.sh \ No newline at end of file diff --git a/README.md b/README.md index 95e024abfe347182d23df8dd665cb5dd644cea9c..12317f7fae77069d7e63118c5c3cef35ac0becc9 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,286 @@ # WasmEngine -#### 介绍 -WasmEngine is a webassembly function engine, which provides high concurrency and sandbox security. +## 介绍 -#### 软件架构 -软件架构说明 +WasmEngine是一个轻量级的WebAssembly函数引擎,基于WebAssembly沙箱级安全隔离模型,提供高并发函数执行、毫秒级函数极速冷启动能力。 +**WasmEngine架构图** -#### 安装教程 +![wasm-engine-arch](./docs/WasmEngine-arch.png) -1. xxxx -2. xxxx -3. xxxx -#### 使用说明 +## 接口说明 -1. xxxx -2. xxxx -3. xxxx +业界流行的FaaS框架一般采用HTTP协议的Restful的API接口,对接后端的函数执行引擎,WasmEngine引擎也采用类似方案,提供了一组Restful风格的faas-provider API接口,提供函数的增删改查功能以及函数调用功能接口。 -#### 参与贡献 +详细的接口定义如下: -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +**deploy函数部署接口** +- HTTP 请求类型:POST +- URL链接:/function/deploy +- 输入参数:JSON格式,{function_name: String, function_image: String, wasi_cap: bool} +- 返回值:HTTP的状态码和消息内容或操作错误失败信息 -#### 特技 +**delete删除函数接口** -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +- HTTP请求类型:POST +- URL链接:/function/delete +- 输入参数:JSON格式,{function_name: String} +- 返回值:HTTP的状态码和消息内容或操作错误失败信息 + +**list查询所有函数接口** + +- HTTP请求类型:GET +- URL链接:/function/list +- 输入参数:不涉及 +- 返回值:HTTP的状态码和消息内容,其中消息内容包括所有已部署到节点上的函数列表或查询失败的错误信息 + + **query函数查询接口** + +- HTTP请求类型:POST +- URL链接:/function/query +- 输入参数:JSON格式,{function_name: String} +- 返回值:HTTP的状态码和消息内容,其中消息内容包括查询函数的详细信息或失败错误信息 + +**query函数查询接口** + +- HTTP请求类型:POST +- URL链接:/function/invoke +- 输入参数:JSON格式,{function_name: String, args: HashMap},其中args中存放的是函数参数kv形式的简直对,对于无key类型的函数参数类型,默认从value中取值作为参数 +- 返回值:HTTP的状态码和消息内容,其中消息内容包括查询函数的详细信息或失败错误信息 + +## 编译安装教程 + +WasmEngine采用Rust语言开发,因此依赖于Rust语言的编译工具链进行编译构建。 + +**Rust语言环境安装** +Rust安装部署可参考[官方文档说明](https://www.rust-lang.org/tools/install) + +**WasmEngine编译** + +```bash +$ cd WasmEngine + +$ cargo build --release + Compiling libc v0.2.126 + Compiling proc-macro2 v1.0.36 + Compiling unicode-xid v0.2.2 + Compiling syn v1.0.84 + Compiling cfg-if v1.0.0 + ... + Finished release [optimized] target(s) in 3m 41s + +# 编译生成的二进制文件存放的路径如下 +$ ls target/release/ +build deps examples incremental libwasm_engine.d libwasm_engine.rlib wasm_engine wasm_engine.d +``` + +**Rust Wasm编译工具链安装** + +Rust编译工具链支持编译成wasm相关的target目标格式有: + +```bash +rustup target list | grep wasm +wasm32-unknown-emscripten +wasm32-unknown-unknown +wasm32-wasi +``` + +这三种不同target目标格式的区别: +- **wasm32-unknown-emscripten**:Emscripten模式,通过Emscripten编译工具链emcc将代码编译成wasm应用,其中wasm应用中也会通过import的方式依赖于Emscripten提供的abi接口,通常用于浏览器场景 +- **wasm32-unknown-unknown**:Wasm标准模式,完全没有外部依赖的wasm标准格式,不会通过import依赖外部接口能力,通常只具有数值计算能力 +- **wasm32-wasi**:WASI模式,wasm应用通过import导入外部依赖的wasi接口能力,通过wasi接口,wasm应用具有文件目录操作、网络连接等这些扩展能力 + +在服务器场景下,当前只支持`wasm32-unknown-unknown`和`wasm32-wasi`这两种目标格式。 + +具体的安装方法如下: +```bash +$ rustup target add wasm32-unknown-unknown wasm32-wasi + +# 安装完成之后,对应target之后会有(installed)标识 +$ rustup target list | grep wasm +wasm32-unknown-emscripten +wasm32-unknown-unknown (installed) +wasm32-wasi (installed) +``` + + +## 代码结构 + +* benches:存放了benchmark代码,其中包含了`gcd`, `echo_string`和`authentication` 三种不同测试函数的wat格式文件 +* experiments/application: 存放了一些常见的可编译成Wasm格式的函数代码 +* experiments/bash_libraries: 存放了用来做测试使用的bash脚本代码 +* experiments/concurrency: 存放了进行函数并发性能测试的脚本代码 +* src/main.rs:WasmEngine引擎的主入口,定义了Restfult API访问接口 +* src/wrapper: 对底层WebAssembly Runtime运行时的封装 +* src/function_store: 存放了Wasm函数镜像管理和Wasm Module实例管理代码 + +## 使用说明 + +1. 在一个终端中启动WasmEngine应用 + +```bash +# wasm_engine应用需要root权限才能执行 +$ su root + +# 设置RUST_LOG输出的crate和日志级别 +$ export RUST_LOG=wasm_engine=debug + +# wasm_engine默认监听在主机的10000端口上 +$ ./wasm_engine +2022-07-28T12:32:10.007200Z INFO wasm_engine::function_store::local_store: no persist json file exist, restore end +2022-07-28T12:32:10.007255Z INFO wasm_engine: WasmEngine listening on http://0.0.0.0:10000, waiting for request... +``` + +2. 编译experiments目录中给定的函数样例 +```bash +# 编译experiments目录中给定的函数样例 +$ make apps + +Building: fibonacci + Finished release [optimized] target(s) in 0.00s +Building: hello + Finished release [optimized] target(s) in 0.00s +Building: authentication + Finished release [optimized] target(s) in 0.28s +Building: authentication-wasi + Finished release [optimized] target(s) in 0.00s +``` + +编译完成之后,就可以在experiments/application/的各个函数源码目录下面的target目录下找到生成的wasm函数。 + +例如,`authentication`函数编译生成的wasm文件路径为`target/wasm32-unknown-unknown/release/authentication.wasm` + +3. 接下来就是将编译生成的Wasm函数二进制文件打包成容器镜像格式,并上传到函数镜像仓库中,等待WasmEngine部署时进行拉去。 + + Wasm函数镜像的制作方法,可以参考下面**Wasm 函数镜像制作**小节的介绍说明。 + +4. WasmEngine 提供Restful API接口说明 + +下面以`authentication`和`hello`函数为例函数部署、查询、删除、调用的介绍 + +**部署authentication函数** +```bash +$ curl --location --request POST 'localhost:10000/function/deploy' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' \ +--data-raw '{ + "function_name": "authentication", + "function_image": "127.0.0.1:5000/authentication-wasm:v4", + "wasi_cap": false +}' + +status code: 200, message: deploy function authentication successfully! +``` + +**部署hello函数** +```bash +$ curl --location --request POST 'localhost:10000/function/deploy' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' \ +--data-raw '{ + "function_name": "hello", + "function_image": "127.0.0.1:5000/hello-wasm:v2", + "wasi_cap": true +}' + +status code: 200, message: deploy function hello successfully! +``` + +**查询全部已部署函数** +```bash +$ curl --location --request GET 'localhost:10000/function/list' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' + +status code: 200, message: all deployed function info: [{func_name: authentication, func_image_name: 127.0.0.1:5000/authentication-wasm:v4, wasi_cap: false}, {func_name: hello, func_image_name: 127.0.0.1:5000/hello-wasm:v2, wasi_cap: true}] +``` + +**查询authentication函数信息** +```bash +$ curl --location --request POST 'localhost:10000/function/query' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' \ +--data-raw '{ + "function_name": "authentication" +}' +status code: 200, message: queried function info: FunctionEntry { func_name: "authentication", func_image_name: "127.0.0.1:5000/authentication-wasm:v4", func_local_path: "/var/lib/wasmengine/functions/authentication/authentication.wasm", wasi_cap: false } +``` + +**调用uthentication函数** +```bash +$ curl --location --request POST 'localhost:10000/function/invoke' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' \ +--data-raw '{ + "function_name": "authentication", + "args": {"arg_uri": "yes", "arg_body": "yes", "arg_secret": "12345"} +}' + +status code: 200, message: {"status":"403","body":"

Auth Forbidden!

hash c5187dd86a648a819f527c7a8a4f7bf4 secret 12345

"} +``` + +**删除已部署的hello函数** +```bash +$ curl --location --request POST 'localhost:10000/function/delete' \ +--header 'Content-Type: application/json' \ +--header 'Content-Type: text/plain' \ +--data-raw '{ + "function_name": "hello" +}' + +status code: 200, message: delete function hello successfull! +``` + + +## Wasm 函数镜像制作 + +WasmEngine加载运行的Wasm函数同样需要类似容器镜像的管理和分发能力,因此WasmEngine复用了容器镜像仓库统一管理和分发的能力,开发者将Wasm函数制作成容器镜像,WasmEngine从远端镜像仓库拉取。 + +开发者可以通过openEuler上的isula build或者docker build容器镜像构建工具来进行容器镜像构建。 + +1. 创建一个空的目录,将上一步生成的wasm格式应用文件拷贝到该空目录中 +```bash +$ mkdir build && cd build +$ cp target/wasm32-unknown-unknown/release/authentication.wasm . +``` +2. 编写容器镜像构建所需的Dockerfile,内容如下 +```bash +$ cat Dockerfile +FROM scratch +ADD authentication.wasm / +``` +3. 执行Wasm容器镜像编译构建 +```bash +$ sudo docker build --tag 127.0.0.1:5000/authentication-wasm:v2 . +Sending build context to Docker daemon 1.787MB +Step 1/2 : FROM scratch + ---> +Step 2/2 : ADD authentication.wasm / + ---> 897a9e7a1ce6 +Successfully built 897a9e7a1ce6 +Successfully tagged 127.0.0.1:5000/authentication-wasm:v2 +``` +4. 将容器镜像push到容器镜像仓库 + +如果用于本地开发验证,开发者可以通过`registry`镜像在本地启动一个容器镜像仓库服务。 +```bash +$ sudo docker run -itd -v /home/flyflypeng/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest +``` + +push容器镜像到容器镜像仓库: +```bash +$ sudo docker push 127.0.0.1:5000/authentication-wasm:v2 +The push refers to repository [127.0.0.1:5000/authentication-wasm] +720b9e537c85: Pushed +v2: digest: sha256:a7b8e58e4b9c2abba6a39636dbc904e01c4cfa7e1d4cc6a97f8e955e148af41e size: 527 +``` + +## 注意事项 + +- Wasm目标格式需要满足WebAssembly Spec 1.0正式标准 +- 如果应用程序需要WASI接口能力支持,只支持通过wasi-sdk或Rust语言的wasm32-unknown-wasi编译工具链编译生成的Wasm文件 +- 不支持设置每个函数调用的资源限额 +- 只支持单函数运行模型,不支持函数间调用模型 +- 一个Wasm函数镜像中只允许有一个wasm格式模块文件 diff --git a/VERSION b/VERSION new file mode 100644 index 0000000000000000000000000000000000000000..6e8bf73aa550d4c57f6f35830f1bcdc7a4a62f38 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.1.0 diff --git a/benches/README.md b/benches/README.md new file mode 100644 index 0000000000000000000000000000000000000000..14291e7ebb6fe0645e5b594dad0593be2db18b6e --- /dev/null +++ b/benches/README.md @@ -0,0 +1,13 @@ +## wasm-engine benches + +wasm-engine实现了以下函数的使用wasi作为import和不使用的纯wasm计算方式的bench对比,三个函数wasi与wasm差值的均值为6.963us,差距是可以接受的: + +* echo_string_b:传入参数参数加入字符'b'后返回 +* gcd:最大公约数计算 +* authentication:鉴权函数 + +|gcd|gcd_wasi|echo_string_b|echo_string_b_wasi|authentication|authentication_wasi| +|-|-|-|-|-|-| +|2.4947us|7.8758us|29.334us|37.620us|26.024us|33.246us| + +且在鉴权函数wasm与wasi对比上发现,wasm执行的效率稍微低一些,可能与临时的内存分配有关,具体解决方式需要进一步研究给出。 \ No newline at end of file diff --git a/benches/authentication.wat b/benches/authentication.wat new file mode 100644 index 0000000000000000000000000000000000000000..2a0ec4dfab325cb7ddfdc34a695c330ffa5c828c --- /dev/null +++ b/benches/authentication.wat @@ -0,0 +1,15579 @@ +(module + (type (;0;) (func (param i32))) + (type (;1;) (func (param i32 i32) (result i32))) + (type (;2;) (func (param i32 i32))) + (type (;3;) (func (param i32 i32 i32) (result i32))) + (type (;4;) (func (param i32 i32 i32 i32))) + (type (;5;) (func (param i32 i32 i32))) + (type (;6;) (func (param i32 i32 i32 i32 i32 i32) (result i32 i32))) + (type (;7;) (func (param i32 i32 i32 i32) (result i32))) + (type (;8;) (func (param i32) (result i64))) + (type (;9;) (func (param i32) (result i32))) + (type (;10;) (func (result i32))) + (type (;11;) (func (param i32 i32 i32 i32 i32) (result i32))) + (type (;12;) (func)) + (type (;13;) (func (param i32 i32 i32 i32 i32))) + (type (;14;) (func (param i32 i32 i32 i32 i32 i32) (result i32))) + (type (;15;) (func (param i64 i32 i32) (result i32))) + (func $_ZN5alloc7raw_vec11finish_grow17hdf7f4d186359e70fE.llvm.12044473768437007172 (type 4) (param i32 i32 i32 i32) + (local i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + local.get 2 + i32.eqz + br_if 0 (;@9;) + i32.const 1 + local.set 4 + local.get 1 + i32.const 0 + i32.lt_s + br_if 1 (;@8;) + local.get 3 + i32.load + local.tee 5 + i32.eqz + br_if 2 (;@7;) + local.get 3 + i32.load offset=4 + local.tee 3 + br_if 4 (;@5;) + local.get 1 + i32.eqz + br_if 3 (;@6;) + br 5 (;@4;) + end + local.get 0 + local.get 1 + i32.store offset=4 + i32.const 1 + local.set 4 + end + i32.const 0 + local.set 1 + br 6 (;@1;) + end + local.get 1 + br_if 2 (;@4;) + end + local.get 2 + local.set 3 + br 2 (;@3;) + end + local.get 5 + local.get 3 + local.get 2 + local.get 1 + call $__rust_realloc + local.tee 3 + br_if 1 (;@3;) + br 2 (;@2;) + end + local.get 1 + local.get 2 + call $__rust_alloc + local.tee 3 + i32.eqz + br_if 1 (;@2;) + end + local.get 0 + local.get 3 + i32.store offset=4 + i32.const 0 + local.set 4 + br 1 (;@1;) + end + local.get 0 + local.get 1 + i32.store offset=4 + local.get 2 + local.set 1 + end + local.get 0 + local.get 4 + i32.store + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.store) + (func $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E (type 5) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + block ;; label = @1 + local.get 1 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.const 1 + i32.shl + local.tee 4 + local.get 2 + local.get 4 + local.get 2 + i32.gt_u + select + local.tee 2 + i32.const 8 + local.get 2 + i32.const 8 + i32.gt_u + select + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + i32.const 8 + i32.add + i32.const 1 + i32.store + local.get 3 + local.get 1 + i32.store offset=20 + local.get 3 + local.get 0 + i32.load + i32.store offset=16 + br 1 (;@2;) + end + local.get 3 + i32.const 0 + i32.store offset=16 + end + local.get 3 + local.get 2 + i32.const 1 + local.get 3 + i32.const 16 + i32.add + call $_ZN5alloc7raw_vec11finish_grow17hdf7f4d186359e70fE.llvm.12044473768437007172 + block ;; label = @2 + local.get 3 + i32.load + i32.const 1 + i32.ne + br_if 0 (;@2;) + local.get 3 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=4 + local.get 0 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 0 + local.get 3 + i64.load offset=4 align=4 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + global.set $__stack_pointer + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h56c8d20d9eefc93dE + unreachable) + (func $_ZN77_$LT$alloc..raw_vec..RawVec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h509778c3875a0fceE (type 0) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.load + local.get 1 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN4core3ptr37drop_in_place$LT$core..fmt..Error$GT$17h79bafd6618374d9aE (type 0) (param i32)) + (func $_ZN4core3ptr45drop_in_place$LT$serde_json..error..Error$GT$17h6d198a4aa7f19cffE (type 0) (param i32) + (local i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.load + local.tee 1 + i32.load + br_table 0 (;@3;) 1 (;@2;) 2 (;@1;) + end + local.get 1 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.eqz + br_if 1 (;@1;) + local.get 1 + i32.load offset=4 + local.get 2 + i32.const 1 + call $__rust_dealloc + br 1 (;@1;) + end + local.get 1 + i32.load8_u offset=4 + i32.const 3 + i32.ne + br_if 0 (;@1;) + local.get 1 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.load + local.get 2 + i32.load offset=4 + i32.load + call_indirect (type 0) + block ;; label = @2 + local.get 2 + i32.load offset=4 + local.tee 3 + i32.load offset=4 + local.tee 4 + i32.eqz + br_if 0 (;@2;) + local.get 2 + i32.load + local.get 4 + local.get 3 + i32.load offset=8 + call $__rust_dealloc + end + local.get 1 + i32.load offset=8 + i32.const 12 + i32.const 4 + call $__rust_dealloc + end + local.get 0 + i32.load + i32.const 20 + i32.const 4 + call $__rust_dealloc) + (func $authentication (type 6) (param i32 i32 i32 i32 i32 i32) (result i32 i32) + (local i32 i32 i32 i64) + global.get $__stack_pointer + i32.const 240 + i32.sub + local.tee 6 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + local.get 1 + i32.const 0 + i32.lt_s + br_if 0 (;@10;) + i32.const 1 + local.set 7 + block ;; label = @11 + local.get 1 + i32.eqz + br_if 0 (;@11;) + local.get 1 + i32.const 1 + call $__rust_alloc + local.tee 7 + i32.eqz + br_if 2 (;@9;) + end + local.get 6 + local.get 1 + i32.store offset=116 + local.get 6 + local.get 7 + i32.store offset=112 + local.get 7 + local.get 0 + local.get 1 + call $memcpy + drop + local.get 6 + i32.const 112 + i32.add + i32.const 8 + i32.add + local.tee 7 + local.get 1 + i32.store + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=112 + local.get 7 + i32.load + i32.add + i32.const 35 + i32.store8 + local.get 6 + i32.const 8 + i32.add + local.tee 0 + local.get 7 + i32.load + i32.const 1 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=112 + i64.store + block ;; label = @11 + local.get 6 + i32.load offset=4 + local.get 1 + i32.sub + local.get 3 + i32.ge_u + br_if 0 (;@11;) + local.get 6 + local.get 1 + local.get 3 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=8 + local.set 1 + end + local.get 6 + i32.load + local.get 1 + i32.add + local.get 2 + local.get 3 + call $memcpy + drop + local.get 7 + local.get 0 + i32.load + local.get 3 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load + i64.store offset=112 + block ;; label = @11 + local.get 6 + i32.load offset=116 + local.get 1 + i32.ne + br_if 0 (;@11;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + i32.const 35 + i32.store8 + local.get 6 + i32.const 8 + i32.add + local.get 6 + i32.const 112 + i32.add + i32.const 8 + i32.add + i32.load + i32.const 1 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=112 + i64.store + block ;; label = @11 + local.get 6 + i32.load offset=4 + local.get 1 + i32.sub + i32.const 6 + i32.gt_u + br_if 0 (;@11;) + local.get 6 + local.get 1 + i32.const 7 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=8 + local.set 1 + end + local.get 6 + i32.load + local.get 1 + i32.add + local.tee 1 + i32.const 0 + i32.load offset=1048652 align=1 + i32.store align=1 + local.get 1 + i32.const 3 + i32.add + i32.const 0 + i32.load offset=1048655 align=1 + i32.store align=1 + local.get 6 + i32.load offset=8 + local.set 1 + local.get 6 + i32.load offset=4 + local.set 0 + local.get 6 + i32.load + local.set 7 + local.get 6 + call $_ZN51_$LT$md5..Md5$u20$as$u20$core..default..Default$GT$7default17hd34bc9157fd9099bE + local.get 6 + local.get 7 + local.get 1 + i32.const 7 + i32.add + call $_ZN44_$LT$D$u20$as$u20$digest..digest..Digest$GT$6update17h9d73d45711a1f61cE + local.get 6 + i32.const 112 + i32.add + local.get 6 + i32.const 96 + call $memcpy + drop + local.get 6 + i32.const 96 + i32.add + local.get 6 + i32.const 112 + i32.add + call $_ZN44_$LT$D$u20$as$u20$digest..digest..Digest$GT$8finalize17hd19b84ac4c75c838E + i32.const 32 + i32.const 1 + call $__rust_alloc + local.tee 1 + i32.eqz + br_if 2 (;@8;) + local.get 6 + i64.const 32 + i64.store offset=212 align=4 + local.get 6 + local.get 1 + i32.store offset=208 + local.get 6 + local.get 6 + i32.load8_u offset=96 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 132 + i32.add + i32.const 1 + i32.store + local.get 6 + i32.const 124 + i32.add + i32.const 1 + i32.store + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=97 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=98 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=99 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=100 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=101 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=102 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=103 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=104 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=105 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=106 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=107 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=108 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=109 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=110 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + local.get 6 + i32.load8_u offset=111 + i32.store8 offset=223 + local.get 6 + i32.const 1 + i32.store offset=228 + local.get 6 + local.get 6 + i32.const 223 + i32.add + i32.store offset=224 + local.get 6 + local.get 6 + i32.const 208 + i32.add + i32.store offset=236 + local.get 6 + i32.const 1 + i32.store offset=132 + local.get 6 + i32.const 1 + i32.store offset=124 + local.get 6 + i32.const 1048668 + i32.store offset=120 + local.get 6 + i32.const 1 + i32.store offset=116 + local.get 6 + i32.const 1048660 + i32.store offset=112 + local.get 6 + local.get 6 + i32.const 224 + i32.add + i32.store offset=128 + local.get 6 + i32.const 236 + i32.add + i32.const 1048844 + local.get 6 + i32.const 112 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 3 (;@7;) + local.get 6 + i32.load offset=208 + local.set 2 + local.get 6 + i32.load offset=216 + local.tee 3 + local.get 5 + i32.ne + br_if 5 (;@5;) + local.get 2 + local.get 4 + local.get 5 + call $memcmp + br_if 5 (;@5;) + i32.const 33 + local.set 3 + i32.const 33 + i32.const 1 + call $__rust_alloc + local.tee 1 + i32.eqz + br_if 4 (;@6;) + local.get 1 + i32.const 0 + i64.load offset=1048731 align=1 + i64.store align=1 + local.get 1 + i32.const 8 + i32.add + i32.const 0 + i64.load offset=1048739 align=1 + i64.store align=1 + local.get 1 + i32.const 16 + i32.add + i32.const 0 + i64.load offset=1048747 align=1 + i64.store align=1 + local.get 1 + i32.const 24 + i32.add + i32.const 0 + i64.load offset=1048755 align=1 + i64.store align=1 + local.get 1 + i32.const 32 + i32.add + i32.const 0 + i32.load8_u offset=1048763 + i32.store8 + local.get 6 + local.get 1 + i32.store offset=112 + local.get 6 + i64.const 141733920801 + i64.store offset=116 align=4 + block ;; label = @11 + local.get 5 + i32.eqz + br_if 0 (;@11;) + local.get 6 + i32.const 112 + i32.add + i32.const 33 + local.get 5 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=112 + local.set 1 + local.get 6 + i32.load offset=120 + local.set 3 + end + local.get 1 + local.get 3 + i32.add + local.get 2 + local.get 5 + call $memcpy + drop + local.get 6 + i32.const 224 + i32.add + i32.const 8 + i32.add + local.get 6 + i32.const 112 + i32.add + i32.const 8 + i32.add + i32.load + local.get 5 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=112 + i64.store offset=224 + block ;; label = @11 + local.get 6 + i32.load offset=228 + local.get 1 + i32.sub + i32.const 10 + i32.gt_u + br_if 0 (;@11;) + local.get 6 + i32.const 224 + i32.add + local.get 1 + i32.const 11 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=232 + local.set 1 + end + local.get 6 + i32.load offset=224 + local.get 1 + i32.add + local.tee 1 + i32.const 0 + i64.load offset=1048764 align=1 + i64.store align=1 + local.get 1 + i32.const 7 + i32.add + i32.const 0 + i32.load offset=1048771 align=1 + i32.store align=1 + local.get 6 + i32.load offset=232 + local.set 4 + local.get 6 + i32.load offset=224 + local.set 5 + local.get 6 + i32.load offset=228 + local.set 3 + i32.const 1048728 + local.set 2 + br 6 (;@4;) + end + call $_ZN5alloc7raw_vec17capacity_overflow17h56c8d20d9eefc93dE + unreachable + end + local.get 1 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + i32.const 32 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + i32.const 1048576 + i32.const 43 + local.get 6 + i32.const 112 + i32.add + i32.const 1048620 + i32.const 1048712 + call $_ZN4core6result13unwrap_failed17h694db13a45aa6740E + unreachable + end + i32.const 33 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + i32.const 38 + local.set 8 + i32.const 38 + i32.const 1 + call $__rust_alloc + local.tee 1 + i32.eqz + br_if 1 (;@3;) + local.get 1 + i32.const 0 + i64.load offset=1048778 align=1 + i64.store align=1 + local.get 1 + i32.const 8 + i32.add + i32.const 0 + i64.load offset=1048786 align=1 + i64.store align=1 + local.get 1 + i32.const 16 + i32.add + i32.const 0 + i64.load offset=1048794 align=1 + i64.store align=1 + local.get 1 + i32.const 24 + i32.add + i32.const 0 + i64.load offset=1048802 align=1 + i64.store align=1 + local.get 1 + i32.const 30 + i32.add + i32.const 0 + i64.load offset=1048808 align=1 + i64.store align=1 + local.get 6 + local.get 1 + i32.store offset=112 + local.get 6 + i64.const 163208757286 + i64.store offset=116 align=4 + block ;; label = @5 + local.get 3 + i32.eqz + br_if 0 (;@5;) + local.get 6 + i32.const 112 + i32.add + i32.const 38 + local.get 3 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=112 + local.set 1 + local.get 6 + i32.load offset=120 + local.set 8 + end + local.get 1 + local.get 8 + i32.add + local.get 2 + local.get 3 + call $memcpy + drop + local.get 6 + i32.const 224 + i32.add + i32.const 8 + i32.add + local.get 6 + i32.const 112 + i32.add + i32.const 8 + i32.add + i32.load + local.get 3 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=112 + i64.store offset=224 + block ;; label = @5 + local.get 6 + i32.load offset=228 + local.get 1 + i32.sub + i32.const 7 + i32.gt_u + br_if 0 (;@5;) + local.get 6 + i32.const 224 + i32.add + local.get 1 + i32.const 8 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=232 + local.set 1 + end + local.get 6 + i32.load offset=224 + local.get 1 + i32.add + i64.const 2338605648480400160 + i64.store align=1 + local.get 6 + i32.const 112 + i32.add + i32.const 8 + i32.add + local.tee 3 + local.get 6 + i32.const 224 + i32.add + i32.const 8 + i32.add + local.tee 2 + i32.load + i32.const 8 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=224 + i64.store offset=112 + block ;; label = @5 + local.get 6 + i32.load offset=116 + local.get 1 + i32.sub + local.get 5 + i32.ge_u + br_if 0 (;@5;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + local.get 5 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + local.get 4 + local.get 5 + call $memcpy + drop + local.get 2 + local.get 3 + i32.load + local.get 5 + i32.add + local.tee 1 + i32.store + local.get 6 + local.get 6 + i64.load offset=112 + i64.store offset=224 + block ;; label = @5 + local.get 6 + i32.load offset=228 + local.get 1 + i32.sub + i32.const 10 + i32.gt_u + br_if 0 (;@5;) + local.get 6 + i32.const 224 + i32.add + local.get 1 + i32.const 11 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=232 + local.set 1 + end + local.get 6 + i32.load offset=224 + local.get 1 + i32.add + local.tee 1 + i32.const 0 + i64.load offset=1048764 align=1 + i64.store align=1 + local.get 1 + i32.const 7 + i32.add + i32.const 0 + i32.load offset=1048771 align=1 + i32.store align=1 + local.get 6 + i32.load offset=232 + local.set 4 + local.get 6 + i32.load offset=224 + local.set 5 + local.get 6 + i32.load offset=228 + local.set 3 + i32.const 1048775 + local.set 2 + end + i32.const 128 + i32.const 1 + call $__rust_alloc + local.tee 1 + i32.eqz + br_if 1 (;@2;) + local.get 6 + i64.const 4294967424 + i64.store offset=116 align=4 + local.get 6 + local.get 1 + i32.store offset=112 + local.get 1 + i32.const 123 + i32.store8 + local.get 6 + local.get 6 + i32.const 112 + i32.add + i32.store offset=224 + local.get 6 + i32.const 224 + i32.add + i32.const 1048832 + i32.const 6 + call $_ZN95_$LT$$RF$mut$u20$serde_json..ser..Serializer$LT$W$C$F$GT$$u20$as$u20$serde..ser..Serializer$GT$13serialize_str17ha208b0c3deecac07E.llvm.13022772514671157473 + local.tee 1 + br_if 2 (;@1;) + block ;; label = @4 + local.get 6 + i32.load offset=116 + local.get 6 + i32.load offset=120 + local.tee 1 + i32.ne + br_if 0 (;@4;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + i32.const 58 + i32.store8 + local.get 6 + local.get 6 + i32.load offset=120 + i32.const 1 + i32.add + i32.store offset=120 + local.get 6 + i32.const 224 + i32.add + local.get 2 + i32.const 3 + call $_ZN95_$LT$$RF$mut$u20$serde_json..ser..Serializer$LT$W$C$F$GT$$u20$as$u20$serde..ser..Serializer$GT$13serialize_str17ha208b0c3deecac07E.llvm.13022772514671157473 + local.tee 1 + br_if 2 (;@1;) + block ;; label = @4 + local.get 6 + i32.load offset=116 + local.get 6 + i32.load offset=120 + local.tee 1 + i32.ne + br_if 0 (;@4;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + i32.const 44 + i32.store8 + local.get 6 + local.get 6 + i32.load offset=120 + i32.const 1 + i32.add + i32.store offset=120 + local.get 6 + i32.const 224 + i32.add + i32.const 1048838 + i32.const 4 + call $_ZN95_$LT$$RF$mut$u20$serde_json..ser..Serializer$LT$W$C$F$GT$$u20$as$u20$serde..ser..Serializer$GT$13serialize_str17ha208b0c3deecac07E.llvm.13022772514671157473 + local.tee 1 + br_if 2 (;@1;) + local.get 4 + i32.const 11 + i32.add + local.set 2 + block ;; label = @4 + local.get 6 + i32.load offset=116 + local.get 6 + i32.load offset=120 + local.tee 1 + i32.ne + br_if 0 (;@4;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + i32.const 58 + i32.store8 + local.get 6 + local.get 6 + i32.load offset=120 + i32.const 1 + i32.add + i32.store offset=120 + local.get 6 + i32.const 224 + i32.add + local.get 5 + local.get 2 + call $_ZN95_$LT$$RF$mut$u20$serde_json..ser..Serializer$LT$W$C$F$GT$$u20$as$u20$serde..ser..Serializer$GT$13serialize_str17ha208b0c3deecac07E.llvm.13022772514671157473 + local.tee 1 + br_if 2 (;@1;) + block ;; label = @4 + local.get 6 + i32.load offset=116 + local.get 6 + i32.load offset=120 + local.tee 1 + i32.ne + br_if 0 (;@4;) + local.get 6 + i32.const 112 + i32.add + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 6 + i32.load offset=120 + local.set 1 + end + local.get 6 + i32.load offset=112 + local.get 1 + i32.add + i32.const 125 + i32.store8 + local.get 6 + local.get 6 + i32.load offset=120 + i32.const 1 + i32.add + i32.store offset=120 + local.get 6 + i32.load offset=112 + local.set 1 + block ;; label = @4 + local.get 6 + i64.load offset=116 align=4 + local.tee 9 + i32.wrap_i64 + local.tee 2 + i32.eqz + br_if 0 (;@4;) + local.get 1 + local.get 2 + i32.const 1 + call $__rust_dealloc + end + block ;; label = @4 + local.get 3 + i32.eqz + br_if 0 (;@4;) + local.get 5 + local.get 3 + i32.const 1 + call $__rust_dealloc + end + block ;; label = @4 + local.get 6 + i32.load offset=212 + local.tee 5 + i32.eqz + br_if 0 (;@4;) + local.get 6 + i32.load offset=208 + local.get 5 + i32.const 1 + call $__rust_dealloc + end + block ;; label = @4 + local.get 0 + i32.eqz + br_if 0 (;@4;) + local.get 7 + local.get 0 + i32.const 1 + call $__rust_dealloc + end + local.get 6 + i32.const 240 + i32.add + global.set $__stack_pointer + local.get 1 + local.get 9 + i64.const 32 + i64.shr_u + i32.wrap_i64 + return + end + i32.const 38 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + i32.const 128 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 6 + i32.const 112 + i32.add + call $_ZN77_$LT$alloc..raw_vec..RawVec$LT$T$C$A$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h509778c3875a0fceE + local.get 6 + local.get 1 + i32.store offset=112 + i32.const 1048576 + i32.const 43 + local.get 6 + i32.const 112 + i32.add + i32.const 1048636 + i32.const 1048816 + call $_ZN4core6result13unwrap_failed17h694db13a45aa6740E + unreachable) + (func $_ZN4core3ptr54drop_in_place$LT$$RF$mut$u20$alloc..string..String$GT$17h812419296af9506bE.llvm.13827028329745944904 (type 0) (param i32)) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17hddf51bcc9d84867eE.llvm.13827028329745944904 (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.load + local.set 0 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 127 + i32.gt_u + br_if 0 (;@2;) + block ;; label = @3 + local.get 0 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.ne + br_if 0 (;@3;) + local.get 0 + local.get 3 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 0 + i32.load offset=8 + local.set 3 + end + local.get 0 + i32.load + local.get 3 + i32.add + local.get 1 + i32.store8 + local.get 0 + local.get 0 + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br 1 (;@1;) + end + local.get 2 + i32.const 0 + i32.store offset=12 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + local.get 1 + i32.const 65536 + i32.ge_u + br_if 0 (;@4;) + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 3 + local.set 1 + br 2 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=15 + local.get 2 + local.get 1 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 4 + local.set 1 + br 1 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 offset=12 + i32.const 2 + local.set 1 + end + block ;; label = @2 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 1 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.get 4 + local.get 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 2 + i32.const 12 + i32.add + local.get 1 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 1 + i32.add + i32.store + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + i32.const 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h580641437cba117cE.llvm.13827028329745944904 (type 1) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 0 + i32.load + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 2 + i32.const 4 + i32.add + i32.const 1048844 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17h78b9c4149c22116dE.llvm.13827028329745944904 (type 3) (param i32 i32 i32) (result i32) + (local i32 i32) + block ;; label = @1 + local.get 0 + i32.load + local.tee 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 2 + i32.ge_u + br_if 0 (;@1;) + local.get 0 + local.get 4 + local.get 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 2 + i32.add + i32.store + i32.const 0) + (func $_ZN3md55utils8compress17hbf8940dfc4c2e578E (type 2) (param i32 i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + local.get 0 + local.get 1 + i32.load offset=16 align=1 + local.tee 2 + local.get 1 + i32.load offset=32 align=1 + local.tee 3 + local.get 1 + i32.load offset=48 align=1 + local.tee 4 + local.get 1 + i32.load align=1 + local.tee 5 + local.get 1 + i32.load offset=36 align=1 + local.tee 6 + local.get 1 + i32.load offset=52 align=1 + local.tee 7 + local.get 1 + i32.load offset=4 align=1 + local.tee 8 + local.get 1 + i32.load offset=20 align=1 + local.tee 9 + local.get 7 + local.get 6 + local.get 9 + local.get 8 + local.get 4 + local.get 3 + local.get 2 + local.get 5 + local.get 0 + i32.load + local.tee 10 + local.get 0 + i32.load offset=8 + local.tee 11 + local.get 0 + i32.load offset=4 + local.tee 12 + i32.and + i32.add + local.get 0 + i32.load offset=12 + local.tee 13 + local.get 12 + i32.const -1 + i32.xor + i32.and + i32.add + i32.add + i32.const -680876936 + i32.add + i32.const 7 + i32.rotl + local.get 12 + i32.add + local.tee 14 + i32.add + local.get 12 + local.get 1 + i32.load offset=12 align=1 + local.tee 15 + i32.add + local.get 11 + local.get 1 + i32.load offset=8 align=1 + local.tee 16 + i32.add + local.get 13 + local.get 8 + i32.add + local.get 14 + local.get 12 + i32.and + i32.add + local.get 11 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -389564586 + i32.add + i32.const 12 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 14 + i32.and + i32.add + local.get 12 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const 606105819 + i32.add + i32.const 17 + i32.rotl + local.get 17 + i32.add + local.tee 18 + local.get 17 + i32.and + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -1044525330 + i32.add + i32.const 22 + i32.rotl + local.get 18 + i32.add + local.tee 14 + local.get 18 + i32.and + i32.add + local.get 17 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -176418897 + i32.add + i32.const 7 + i32.rotl + local.get 14 + i32.add + local.tee 19 + i32.add + local.get 1 + i32.load offset=28 align=1 + local.tee 20 + local.get 14 + i32.add + local.get 1 + i32.load offset=24 align=1 + local.tee 21 + local.get 18 + i32.add + local.get 9 + local.get 17 + i32.add + local.get 19 + local.get 14 + i32.and + i32.add + local.get 18 + local.get 19 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const 1200080426 + i32.add + i32.const 12 + i32.rotl + local.get 19 + i32.add + local.tee 17 + local.get 19 + i32.and + i32.add + local.get 14 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -1473231341 + i32.add + i32.const 17 + i32.rotl + local.get 17 + i32.add + local.tee 14 + local.get 17 + i32.and + i32.add + local.get 19 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -45705983 + i32.add + i32.const 22 + i32.rotl + local.get 14 + i32.add + local.tee 18 + local.get 14 + i32.and + i32.add + local.get 17 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const 1770035416 + i32.add + i32.const 7 + i32.rotl + local.get 18 + i32.add + local.tee 19 + i32.add + local.get 1 + i32.load offset=44 align=1 + local.tee 22 + local.get 18 + i32.add + local.get 1 + i32.load offset=40 align=1 + local.tee 23 + local.get 14 + i32.add + local.get 6 + local.get 17 + i32.add + local.get 19 + local.get 18 + i32.and + i32.add + local.get 14 + local.get 19 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -1958414417 + i32.add + i32.const 12 + i32.rotl + local.get 19 + i32.add + local.tee 14 + local.get 19 + i32.and + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -42063 + i32.add + i32.const 17 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 14 + i32.and + i32.add + local.get 19 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -1990404162 + i32.add + i32.const 22 + i32.rotl + local.get 17 + i32.add + local.tee 18 + local.get 17 + i32.and + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const 1804603682 + i32.add + i32.const 7 + i32.rotl + local.get 18 + i32.add + local.tee 19 + i32.add + local.get 1 + i32.load offset=56 align=1 + local.tee 24 + local.get 17 + i32.add + local.get 7 + local.get 14 + i32.add + local.get 19 + local.get 18 + i32.and + i32.add + local.get 17 + local.get 19 + i32.const -1 + i32.xor + i32.and + i32.add + i32.const -40341101 + i32.add + i32.const 12 + i32.rotl + local.get 19 + i32.add + local.tee 14 + local.get 19 + i32.and + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + local.tee 25 + i32.and + i32.add + i32.const -1502002290 + i32.add + i32.const 17 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 25 + i32.and + i32.add + local.get 1 + i32.load offset=60 align=1 + local.tee 25 + local.get 18 + i32.add + local.get 17 + local.get 14 + i32.and + i32.add + local.get 19 + local.get 17 + i32.const -1 + i32.xor + local.tee 26 + i32.and + i32.add + i32.const 1236535329 + i32.add + i32.const 22 + i32.rotl + local.get 17 + i32.add + local.tee 1 + local.get 14 + i32.and + i32.add + i32.const -165796510 + i32.add + i32.const 5 + i32.rotl + local.get 1 + i32.add + local.tee 18 + i32.add + local.get 22 + local.get 17 + i32.add + local.get 18 + local.get 1 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 21 + local.get 14 + i32.add + local.get 1 + local.get 26 + i32.and + i32.add + local.get 18 + local.get 17 + i32.and + i32.add + i32.const -1069501632 + i32.add + i32.const 9 + i32.rotl + local.get 18 + i32.add + local.tee 14 + local.get 1 + i32.and + i32.add + i32.const 643717713 + i32.add + i32.const 14 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 5 + local.get 1 + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 17 + local.get 18 + i32.and + i32.add + i32.const -373897302 + i32.add + i32.const 20 + i32.rotl + local.get 17 + i32.add + local.tee 1 + local.get 14 + i32.and + i32.add + i32.const -701558691 + i32.add + i32.const 5 + i32.rotl + local.get 1 + i32.add + local.tee 18 + i32.add + local.get 25 + local.get 17 + i32.add + local.get 18 + local.get 1 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 23 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 18 + local.get 17 + i32.and + i32.add + i32.const 38016083 + i32.add + i32.const 9 + i32.rotl + local.get 18 + i32.add + local.tee 14 + local.get 1 + i32.and + i32.add + i32.const -660478335 + i32.add + i32.const 14 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 2 + local.get 1 + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 17 + local.get 18 + i32.and + i32.add + i32.const -405537848 + i32.add + i32.const 20 + i32.rotl + local.get 17 + i32.add + local.tee 1 + local.get 14 + i32.and + i32.add + i32.const 568446438 + i32.add + i32.const 5 + i32.rotl + local.get 1 + i32.add + local.tee 18 + i32.add + local.get 15 + local.get 17 + i32.add + local.get 18 + local.get 1 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 24 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 18 + local.get 17 + i32.and + i32.add + i32.const -1019803690 + i32.add + i32.const 9 + i32.rotl + local.get 18 + i32.add + local.tee 14 + local.get 1 + i32.and + i32.add + i32.const -187363961 + i32.add + i32.const 14 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 14 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 3 + local.get 1 + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 17 + local.get 18 + i32.and + i32.add + i32.const 1163531501 + i32.add + i32.const 20 + i32.rotl + local.get 17 + i32.add + local.tee 1 + local.get 14 + i32.and + i32.add + i32.const -1444681467 + i32.add + i32.const 5 + i32.rotl + local.get 1 + i32.add + local.tee 18 + i32.add + local.get 4 + local.get 1 + i32.add + local.get 16 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 18 + local.get 17 + i32.and + i32.add + i32.const -51403784 + i32.add + i32.const 9 + i32.rotl + local.get 18 + i32.add + local.tee 14 + local.get 18 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 20 + local.get 17 + i32.add + local.get 18 + local.get 1 + i32.const -1 + i32.xor + i32.and + i32.add + local.get 14 + local.get 1 + i32.and + i32.add + i32.const 1735328473 + i32.add + i32.const 14 + i32.rotl + local.get 14 + i32.add + local.tee 1 + local.get 18 + i32.and + i32.add + i32.const -1926607734 + i32.add + i32.const 20 + i32.rotl + local.get 1 + i32.add + local.tee 17 + local.get 1 + i32.xor + local.tee 19 + local.get 14 + i32.xor + i32.add + i32.const -378558 + i32.add + i32.const 4 + i32.rotl + local.get 17 + i32.add + local.tee 18 + i32.add + local.get 22 + local.get 1 + i32.add + local.get 3 + local.get 14 + i32.add + local.get 18 + local.get 19 + i32.xor + i32.add + i32.const -2022574463 + i32.add + i32.const 11 + i32.rotl + local.get 18 + i32.add + local.tee 19 + local.get 18 + i32.xor + local.tee 14 + local.get 17 + i32.xor + i32.add + i32.const 1839030562 + i32.add + i32.const 16 + i32.rotl + local.get 19 + i32.add + local.tee 1 + local.get 19 + i32.xor + local.get 24 + local.get 17 + i32.add + local.get 14 + local.get 1 + i32.xor + i32.add + i32.const -35309556 + i32.add + i32.const 23 + i32.rotl + local.get 1 + i32.add + local.tee 14 + i32.xor + i32.add + i32.const -1530992060 + i32.add + i32.const 4 + i32.rotl + local.get 14 + i32.add + local.tee 17 + i32.add + local.get 20 + local.get 1 + i32.add + local.get 17 + local.get 14 + i32.xor + local.get 2 + local.get 19 + i32.add + local.get 14 + local.get 1 + i32.xor + local.get 17 + i32.xor + i32.add + i32.const 1272893353 + i32.add + i32.const 11 + i32.rotl + local.get 17 + i32.add + local.tee 1 + i32.xor + i32.add + i32.const -155497632 + i32.add + i32.const 16 + i32.rotl + local.get 1 + i32.add + local.tee 18 + local.get 1 + i32.xor + local.get 23 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.xor + local.get 18 + i32.xor + i32.add + i32.const -1094730640 + i32.add + i32.const 23 + i32.rotl + local.get 18 + i32.add + local.tee 14 + i32.xor + i32.add + i32.const 681279174 + i32.add + i32.const 4 + i32.rotl + local.get 14 + i32.add + local.tee 17 + i32.add + local.get 15 + local.get 18 + i32.add + local.get 17 + local.get 14 + i32.xor + local.get 5 + local.get 1 + i32.add + local.get 14 + local.get 18 + i32.xor + local.get 17 + i32.xor + i32.add + i32.const -358537222 + i32.add + i32.const 11 + i32.rotl + local.get 17 + i32.add + local.tee 1 + i32.xor + i32.add + i32.const -722521979 + i32.add + i32.const 16 + i32.rotl + local.get 1 + i32.add + local.tee 18 + local.get 1 + i32.xor + local.get 21 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.xor + local.get 18 + i32.xor + i32.add + i32.const 76029189 + i32.add + i32.const 23 + i32.rotl + local.get 18 + i32.add + local.tee 14 + i32.xor + i32.add + i32.const -640364487 + i32.add + i32.const 4 + i32.rotl + local.get 14 + i32.add + local.tee 17 + i32.add + local.get 16 + local.get 14 + i32.add + local.get 4 + local.get 1 + i32.add + local.get 14 + local.get 18 + i32.xor + local.get 17 + i32.xor + i32.add + i32.const -421815835 + i32.add + i32.const 11 + i32.rotl + local.get 17 + i32.add + local.tee 1 + local.get 17 + i32.xor + local.get 25 + local.get 18 + i32.add + local.get 17 + local.get 14 + i32.xor + local.get 1 + i32.xor + i32.add + i32.const 530742520 + i32.add + i32.const 16 + i32.rotl + local.get 1 + i32.add + local.tee 14 + i32.xor + i32.add + i32.const -995338651 + i32.add + i32.const 23 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 1 + i32.const -1 + i32.xor + i32.or + local.get 14 + i32.xor + i32.add + i32.const -198630844 + i32.add + i32.const 6 + i32.rotl + local.get 17 + i32.add + local.tee 18 + i32.add + local.get 9 + local.get 17 + i32.add + local.get 24 + local.get 14 + i32.add + local.get 20 + local.get 1 + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + i32.or + local.get 17 + i32.xor + i32.add + i32.const 1126891415 + i32.add + i32.const 10 + i32.rotl + local.get 18 + i32.add + local.tee 1 + local.get 17 + i32.const -1 + i32.xor + i32.or + local.get 18 + i32.xor + i32.add + i32.const -1416354905 + i32.add + i32.const 15 + i32.rotl + local.get 1 + i32.add + local.tee 14 + local.get 18 + i32.const -1 + i32.xor + i32.or + local.get 1 + i32.xor + i32.add + i32.const -57434055 + i32.add + i32.const 21 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 1 + i32.const -1 + i32.xor + i32.or + local.get 14 + i32.xor + i32.add + i32.const 1700485571 + i32.add + i32.const 6 + i32.rotl + local.get 17 + i32.add + local.tee 18 + i32.add + local.get 8 + local.get 17 + i32.add + local.get 23 + local.get 14 + i32.add + local.get 15 + local.get 1 + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + i32.or + local.get 17 + i32.xor + i32.add + i32.const -1894986606 + i32.add + i32.const 10 + i32.rotl + local.get 18 + i32.add + local.tee 1 + local.get 17 + i32.const -1 + i32.xor + i32.or + local.get 18 + i32.xor + i32.add + i32.const -1051523 + i32.add + i32.const 15 + i32.rotl + local.get 1 + i32.add + local.tee 14 + local.get 18 + i32.const -1 + i32.xor + i32.or + local.get 1 + i32.xor + i32.add + i32.const -2054922799 + i32.add + i32.const 21 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 1 + i32.const -1 + i32.xor + i32.or + local.get 14 + i32.xor + i32.add + i32.const 1873313359 + i32.add + i32.const 6 + i32.rotl + local.get 17 + i32.add + local.tee 18 + i32.add + local.get 7 + local.get 17 + i32.add + local.get 21 + local.get 14 + i32.add + local.get 25 + local.get 1 + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + i32.or + local.get 17 + i32.xor + i32.add + i32.const -30611744 + i32.add + i32.const 10 + i32.rotl + local.get 18 + i32.add + local.tee 1 + local.get 17 + i32.const -1 + i32.xor + i32.or + local.get 18 + i32.xor + i32.add + i32.const -1560198380 + i32.add + i32.const 15 + i32.rotl + local.get 1 + i32.add + local.tee 14 + local.get 18 + i32.const -1 + i32.xor + i32.or + local.get 1 + i32.xor + i32.add + i32.const 1309151649 + i32.add + i32.const 21 + i32.rotl + local.get 14 + i32.add + local.tee 17 + local.get 1 + i32.const -1 + i32.xor + i32.or + local.get 14 + i32.xor + i32.add + i32.const -145523070 + i32.add + i32.const 6 + i32.rotl + local.get 17 + i32.add + local.tee 18 + local.get 10 + i32.add + i32.store + local.get 0 + local.get 13 + local.get 22 + local.get 1 + i32.add + local.get 18 + local.get 14 + i32.const -1 + i32.xor + i32.or + local.get 17 + i32.xor + i32.add + i32.const -1120210379 + i32.add + i32.const 10 + i32.rotl + local.get 18 + i32.add + local.tee 1 + i32.add + i32.store offset=12 + local.get 0 + local.get 11 + local.get 16 + local.get 14 + i32.add + local.get 1 + local.get 17 + i32.const -1 + i32.xor + i32.or + local.get 18 + i32.xor + i32.add + i32.const 718787259 + i32.add + i32.const 15 + i32.rotl + local.get 1 + i32.add + local.tee 14 + i32.add + i32.store offset=8 + local.get 0 + local.get 14 + local.get 12 + i32.add + local.get 6 + local.get 17 + i32.add + local.get 14 + local.get 18 + i32.const -1 + i32.xor + i32.or + local.get 1 + i32.xor + i32.add + i32.const -343485551 + i32.add + i32.const 21 + i32.rotl + i32.add + i32.store offset=4) + (func $_ZN44_$LT$D$u20$as$u20$digest..digest..Digest$GT$6update17h9d73d45711a1f61cE (type 5) (param i32 i32 i32) + (local i32 i32 i32 i32) + local.get 0 + local.get 0 + i64.load + local.get 2 + i64.extend_i32_u + i64.add + i64.store + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + i32.const 64 + local.get 0 + i32.load offset=8 + local.tee 3 + i32.sub + local.tee 4 + local.get 2 + i32.gt_u + br_if 0 (;@6;) + local.get 0 + i32.const 76 + i32.add + local.set 5 + local.get 3 + br_if 1 (;@5;) + br 5 (;@1;) + end + local.get 3 + local.get 2 + i32.add + local.tee 5 + local.get 3 + i32.lt_u + br_if 1 (;@4;) + local.get 5 + i32.const 64 + i32.gt_u + br_if 2 (;@3;) + local.get 0 + i32.const 8 + i32.add + local.get 3 + i32.add + i32.const 4 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 0 + local.get 0 + i32.load offset=8 + local.get 2 + i32.add + i32.store offset=8 + return + end + local.get 3 + i32.const 65 + i32.ge_u + br_if 2 (;@2;) + local.get 0 + i32.const 12 + i32.add + local.tee 6 + local.get 3 + i32.add + local.get 1 + local.get 4 + call $memcpy + drop + local.get 5 + local.get 6 + call $_ZN3md55utils8compress17hbf8940dfc4c2e578E + local.get 2 + local.get 4 + i32.sub + local.set 2 + local.get 1 + local.get 4 + i32.add + local.set 1 + br 3 (;@1;) + end + local.get 3 + local.get 5 + i32.const 1049000 + call $_ZN4core5slice5index22slice_index_order_fail17he388d03b2828b4ebE + unreachable + end + local.get 5 + i32.const 64 + i32.const 1049000 + call $_ZN4core5slice5index24slice_end_index_len_fail17he00053322d4d7aa4E + unreachable + end + local.get 3 + i32.const 64 + i32.const 1049016 + call $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE + unreachable + end + local.get 2 + i32.const 63 + i32.and + local.set 3 + local.get 1 + local.get 2 + i32.const -64 + i32.and + local.tee 2 + i32.add + local.set 4 + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + i32.const 0 + local.get 2 + i32.sub + local.set 2 + loop ;; label = @2 + local.get 5 + local.get 1 + call $_ZN3md55utils8compress17hbf8940dfc4c2e578E + local.get 1 + i32.const 64 + i32.add + local.set 1 + local.get 2 + i32.const 64 + i32.add + local.tee 2 + br_if 0 (;@2;) + end + end + local.get 0 + i32.const 12 + i32.add + local.get 4 + local.get 3 + call $memcpy + drop + local.get 0 + local.get 3 + i32.store offset=8) + (func $_ZN44_$LT$D$u20$as$u20$digest..digest..Digest$GT$8finalize17hd19b84ac4c75c838E (type 2) (param i32 i32) + (local i32 i32 i32 i64 i32 i32) + global.get $__stack_pointer + i32.const 96 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i64.const 0 + i64.store align=1 + local.get 0 + i32.const 8 + i32.add + i64.const 0 + i64.store align=1 + local.get 2 + local.get 1 + i32.const 96 + call $memcpy + local.tee 1 + i32.const 12 + i32.add + local.set 3 + local.get 1 + i32.const 76 + i32.add + local.set 4 + local.get 1 + i64.load + local.set 5 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.load offset=8 + local.tee 2 + i32.const 64 + i32.eq + br_if 0 (;@2;) + local.get 2 + i32.const 64 + i32.lt_u + br_if 1 (;@1;) + local.get 2 + i32.const 64 + i32.const 1048952 + call $_ZN4core9panicking18panic_bounds_check17h1d84519ec46ed48cE + unreachable + end + local.get 4 + local.get 3 + call $_ZN3md55utils8compress17hbf8940dfc4c2e578E + i32.const 0 + local.set 2 + local.get 1 + i32.const 0 + i32.store offset=8 + end + local.get 1 + i32.const 8 + i32.add + local.tee 6 + local.get 2 + i32.add + i32.const 4 + i32.add + i32.const 128 + i32.store8 + local.get 1 + local.get 1 + i32.load offset=8 + local.tee 7 + i32.const 1 + i32.add + local.tee 2 + i32.store offset=8 + block ;; label = @1 + block ;; label = @2 + local.get 2 + i32.const 65 + i32.ge_u + br_if 0 (;@2;) + local.get 6 + local.get 2 + i32.add + i32.const 4 + i32.add + i32.const 0 + i32.const 63 + local.get 7 + i32.sub + call $memset + drop + block ;; label = @3 + i32.const 64 + local.get 1 + i32.load offset=8 + i32.sub + i32.const 8 + i32.ge_u + br_if 0 (;@3;) + local.get 4 + local.get 3 + call $_ZN3md55utils8compress17hbf8940dfc4c2e578E + local.get 1 + i32.load offset=8 + local.tee 2 + i32.const 65 + i32.ge_u + br_if 2 (;@1;) + local.get 1 + i32.const 12 + i32.add + i32.const 0 + local.get 2 + call $memset + drop + end + local.get 1 + i32.const 68 + i32.add + local.get 5 + i64.const 3 + i64.shl + i64.store align=4 + local.get 4 + local.get 3 + call $_ZN3md55utils8compress17hbf8940dfc4c2e578E + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.const 84 + i32.add + i64.load align=4 + i64.store align=1 + local.get 0 + local.get 1 + i64.load offset=76 align=4 + i64.store align=1 + local.get 1 + i32.const 96 + i32.add + global.set $__stack_pointer + return + end + local.get 2 + i32.const 64 + i32.const 1048968 + call $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE + unreachable + end + local.get 2 + i32.const 64 + i32.const 1048984 + call $_ZN4core5slice5index24slice_end_index_len_fail17he00053322d4d7aa4E + unreachable) + (func $_ZN95_$LT$$RF$mut$u20$serde_json..ser..Serializer$LT$W$C$F$GT$$u20$as$u20$serde..ser..Serializer$GT$13serialize_str17ha208b0c3deecac07E.llvm.13022772514671157473 (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + local.get 0 + i32.load + local.tee 3 + i32.const 4 + i32.add + local.tee 4 + i32.load + local.get 3 + i32.const 8 + i32.add + local.tee 5 + i32.load + local.tee 0 + i32.ne + br_if 0 (;@1;) + local.get 3 + local.get 0 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 5 + i32.load + local.set 0 + end + local.get 3 + i32.load + local.get 0 + i32.add + i32.const 34 + i32.store8 + local.get 5 + local.get 5 + i32.load + i32.const 1 + i32.add + local.tee 6 + i32.store + local.get 1 + i32.const -1 + i32.add + local.set 7 + local.get 2 + i32.const -1 + i32.xor + local.set 8 + local.get 1 + local.get 2 + i32.add + local.set 9 + i32.const 0 + local.set 10 + local.get 1 + local.set 11 + i32.const 0 + local.set 12 + loop ;; label = @1 + i32.const 0 + local.set 0 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + loop ;; label = @6 + block ;; label = @7 + local.get 11 + local.get 0 + i32.add + local.tee 13 + local.get 9 + i32.ne + br_if 0 (;@7;) + local.get 12 + local.get 2 + i32.eq + br_if 3 (;@4;) + local.get 12 + i32.eqz + br_if 2 (;@5;) + block ;; label = @8 + local.get 12 + local.get 2 + i32.ge_u + br_if 0 (;@8;) + local.get 1 + local.get 12 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + br_if 3 (;@5;) + end + local.get 1 + local.get 2 + local.get 12 + local.get 2 + i32.const 1049188 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable + end + local.get 0 + i32.const 1 + i32.add + local.set 0 + local.get 13 + i32.load8_u + local.tee 14 + i32.const 1049972 + i32.add + i32.load8_u + local.tee 13 + i32.eqz + br_if 0 (;@6;) + end + local.get 10 + local.get 0 + i32.add + local.tee 15 + i32.const -1 + i32.add + local.tee 16 + local.get 12 + i32.le_u + br_if 3 (;@2;) + block ;; label = @6 + local.get 12 + i32.eqz + br_if 0 (;@6;) + block ;; label = @7 + local.get 12 + local.get 2 + i32.lt_u + br_if 0 (;@7;) + local.get 12 + local.get 2 + i32.eq + br_if 1 (;@6;) + br 4 (;@3;) + end + local.get 1 + local.get 12 + i32.add + i32.load8_s + i32.const -64 + i32.lt_s + br_if 3 (;@3;) + end + block ;; label = @6 + block ;; label = @7 + local.get 16 + local.get 2 + i32.lt_u + br_if 0 (;@7;) + local.get 2 + local.set 16 + local.get 8 + local.get 10 + i32.add + local.get 0 + i32.add + br_if 4 (;@3;) + br 1 (;@6;) + end + local.get 7 + local.get 10 + i32.add + local.get 0 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 3 (;@3;) + end + local.get 1 + local.get 12 + i32.add + local.set 17 + block ;; label = @6 + local.get 4 + i32.load + local.get 6 + i32.sub + local.get 10 + local.get 12 + i32.sub + local.tee 10 + local.get 0 + i32.add + i32.const -1 + i32.add + local.tee 12 + i32.ge_u + br_if 0 (;@6;) + local.get 3 + local.get 6 + local.get 12 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 5 + i32.load + local.set 6 + end + local.get 3 + i32.load + local.get 6 + i32.add + local.get 17 + local.get 12 + call $memcpy + drop + local.get 5 + local.get 10 + local.get 5 + i32.load + i32.add + local.get 0 + i32.add + i32.const -1 + i32.add + local.tee 6 + i32.store + br 3 (;@2;) + end + local.get 1 + local.get 12 + i32.add + local.set 13 + block ;; label = @5 + local.get 3 + i32.const 4 + i32.add + i32.load + local.get 6 + i32.sub + local.get 2 + local.get 12 + i32.sub + local.tee 0 + i32.ge_u + br_if 0 (;@5;) + local.get 3 + local.get 6 + local.get 0 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 3 + i32.const 8 + i32.add + i32.load + local.set 6 + end + local.get 3 + i32.load + local.get 6 + i32.add + local.get 13 + local.get 0 + call $memcpy + drop + local.get 3 + i32.const 8 + i32.add + local.tee 13 + local.get 13 + i32.load + local.get 0 + i32.add + local.tee 6 + i32.store + end + block ;; label = @4 + local.get 3 + i32.const 4 + i32.add + i32.load + local.get 6 + i32.ne + br_if 0 (;@4;) + local.get 3 + local.get 6 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 3 + i32.const 8 + i32.add + i32.load + local.set 6 + end + local.get 3 + i32.load + local.get 6 + i32.add + i32.const 34 + i32.store8 + local.get 3 + i32.const 8 + i32.add + local.tee 0 + local.get 0 + i32.load + i32.const 1 + i32.add + i32.store + i32.const 0 + return + end + local.get 1 + local.get 2 + local.get 12 + local.get 10 + local.get 0 + i32.add + i32.const -1 + i32.add + i32.const 1049172 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable + end + i32.const 1049214 + local.set 12 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + local.get 13 + i32.const -92 + i32.add + br_table 7 (;@4;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 6 (;@5;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 1 (;@10;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 2 (;@9;) 9 (;@2;) 9 (;@2;) 9 (;@2;) 3 (;@8;) 9 (;@2;) 4 (;@7;) 5 (;@6;) 0 (;@11;) + end + local.get 13 + i32.const 34 + i32.ne + br_if 8 (;@2;) + i32.const 1049216 + local.set 12 + br 6 (;@4;) + end + i32.const 1049210 + local.set 12 + br 5 (;@4;) + end + i32.const 1049208 + local.set 12 + br 4 (;@4;) + end + i32.const 1049206 + local.set 12 + br 3 (;@4;) + end + i32.const 1049204 + local.set 12 + br 2 (;@4;) + end + local.get 14 + i32.const 15 + i32.and + i32.const 1049956 + i32.add + i32.load8_u + local.set 12 + local.get 14 + i32.const 4 + i32.shr_u + i32.const 1049956 + i32.add + i32.load8_u + local.set 14 + block ;; label = @6 + local.get 4 + i32.load + local.get 6 + i32.sub + i32.const 5 + i32.gt_u + br_if 0 (;@6;) + local.get 3 + local.get 6 + i32.const 6 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 5 + i32.load + local.set 6 + end + local.get 3 + i32.load + local.get 6 + i32.add + local.tee 13 + local.get 12 + i32.store8 offset=5 + local.get 13 + local.get 14 + i32.store8 offset=4 + local.get 13 + i32.const 808482140 + i32.store align=1 + i32.const 6 + local.set 13 + br 2 (;@3;) + end + i32.const 1049212 + local.set 12 + end + block ;; label = @4 + local.get 4 + i32.load + local.get 6 + i32.sub + i32.const 1 + i32.gt_u + br_if 0 (;@4;) + local.get 3 + local.get 6 + i32.const 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h28121fe2e04fd170E + local.get 5 + i32.load + local.set 6 + end + local.get 3 + i32.load + local.get 6 + i32.add + local.get 12 + i32.load16_u align=1 + i32.store16 align=1 + i32.const 2 + local.set 13 + end + local.get 11 + local.get 0 + i32.add + local.set 11 + local.get 5 + local.get 5 + i32.load + local.get 13 + i32.add + local.tee 6 + i32.store + local.get 16 + i32.const 1 + i32.add + local.set 12 + local.get 15 + local.set 10 + br 1 (;@1;) + end + end + i32.const 1049032 + i32.const 40 + i32.const 1049156 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable) + (func $__rust_alloc (type 1) (param i32 i32) (result i32) + (local i32) + local.get 0 + local.get 1 + call $__rdl_alloc + local.set 2 + local.get 2 + return) + (func $__rust_dealloc (type 5) (param i32 i32 i32) + local.get 0 + local.get 1 + local.get 2 + call $__rdl_dealloc + return) + (func $__rust_realloc (type 7) (param i32 i32 i32 i32) (result i32) + (local i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call $__rdl_realloc + local.set 4 + local.get 4 + return) + (func $__rust_alloc_error_handler (type 2) (param i32 i32) + local.get 0 + local.get 1 + call $__rg_oom + return) + (func $_ZN4core3fmt5Write9write_fmt17hd7957869af5b4f91E (type 1) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 0 + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 2 + i32.const 4 + i32.add + i32.const 1049220 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN4core3ptr54drop_in_place$LT$$RF$mut$u20$alloc..string..String$GT$17h49df79e12a85d052E (type 0) (param i32)) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h4857cf2da1f41df4E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.load + local.set 0 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 127 + i32.gt_u + br_if 0 (;@2;) + block ;; label = @3 + local.get 0 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.ne + br_if 0 (;@3;) + local.get 0 + local.get 3 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 0 + i32.load offset=8 + local.set 3 + end + local.get 0 + i32.load + local.get 3 + i32.add + local.get 1 + i32.store8 + local.get 0 + local.get 0 + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br 1 (;@1;) + end + local.get 2 + i32.const 0 + i32.store offset=12 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + local.get 1 + i32.const 65536 + i32.ge_u + br_if 0 (;@4;) + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 3 + local.set 1 + br 2 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=15 + local.get 2 + local.get 1 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 4 + local.set 1 + br 1 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 offset=12 + i32.const 2 + local.set 1 + end + block ;; label = @2 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 1 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.get 4 + local.get 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 2 + i32.const 12 + i32.add + local.get 1 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 1 + i32.add + i32.store + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + i32.const 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h77392364fd5114f8E (type 1) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 0 + i32.load + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 2 + i32.const 4 + i32.add + i32.const 1049220 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17h82f10565ef6bfd7aE (type 3) (param i32 i32 i32) (result i32) + (local i32 i32) + block ;; label = @1 + local.get 0 + i32.load + local.tee 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 2 + i32.ge_u + br_if 0 (;@1;) + local.get 0 + local.get 4 + local.get 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 2 + i32.add + i32.store + i32.const 0) + (func $_ZN4core3ptr37drop_in_place$LT$core..fmt..Error$GT$17h0565fabb4f667d41E.llvm.8830830793381635981 (type 0) (param i32)) + (func $_ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h933b0833ab6449caE.llvm.8830830793381635981 (type 0) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.load + local.get 1 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Debug$GT$3fmt17h667b172896ba5eafE (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=8 + local.get 1 + call $_ZN40_$LT$str$u20$as$u20$core..fmt..Debug$GT$3fmt17hc53e3be06b94b8dbE) + (func $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Write$GT$10write_char17heb39c38eb75e5f9dE.llvm.8830830793381635981 (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 127 + i32.gt_u + br_if 0 (;@2;) + block ;; label = @3 + local.get 0 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.ne + br_if 0 (;@3;) + local.get 0 + local.get 3 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 0 + i32.load offset=8 + local.set 3 + end + local.get 0 + i32.load + local.get 3 + i32.add + local.get 1 + i32.store8 + local.get 0 + local.get 0 + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br 1 (;@1;) + end + local.get 2 + i32.const 0 + i32.store offset=12 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + local.get 1 + i32.const 65536 + i32.ge_u + br_if 0 (;@4;) + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 3 + local.set 1 + br 2 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=15 + local.get 2 + local.get 1 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 4 + local.set 1 + br 1 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 offset=12 + i32.const 2 + local.set 1 + end + block ;; label = @2 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 1 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.get 4 + local.get 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 2 + i32.const 12 + i32.add + local.get 1 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 1 + i32.add + i32.store + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + i32.const 0) + (func $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Write$GT$9write_str17h642c18f01b1837c1E.llvm.8830830793381635981 (type 3) (param i32 i32 i32) (result i32) + (local i32 i32) + block ;; label = @1 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.sub + local.get 2 + i32.ge_u + br_if 0 (;@1;) + local.get 0 + local.get 4 + local.get 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE + local.get 3 + i32.load + local.set 4 + end + local.get 0 + i32.load + local.get 4 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 3 + local.get 3 + i32.load + local.get 2 + i32.add + i32.store + i32.const 0) + (func $_ZN67_$LT$serde_json..error..ErrorCode$u20$as$u20$core..fmt..Display$GT$3fmt17h3d29ccb0e41cf0e1E (type 1) (param i32 i32) (result i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + block ;; label = @14 + block ;; label = @15 + block ;; label = @16 + block ;; label = @17 + block ;; label = @18 + block ;; label = @19 + block ;; label = @20 + block ;; label = @21 + block ;; label = @22 + local.get 0 + i32.load + br_table 0 (;@22;) 1 (;@21;) 2 (;@20;) 3 (;@19;) 4 (;@18;) 5 (;@17;) 6 (;@16;) 7 (;@15;) 8 (;@14;) 9 (;@13;) 10 (;@12;) 11 (;@11;) 12 (;@10;) 13 (;@9;) 14 (;@8;) 15 (;@7;) 16 (;@6;) 17 (;@5;) 18 (;@4;) 19 (;@3;) 20 (;@2;) 21 (;@1;) 0 (;@22;) + end + local.get 1 + local.get 0 + i32.load offset=4 + local.get 0 + i32.const 8 + i32.add + i32.load + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 0 + i32.const 4 + i32.add + local.get 1 + call $_ZN60_$LT$std..io..error..Error$u20$as$u20$core..fmt..Display$GT$3fmt17h3d2d7d46abd0cb82E + return + end + local.get 1 + i32.const 1049872 + i32.const 24 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049845 + i32.const 27 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049819 + i32.const 26 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049794 + i32.const 25 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049782 + i32.const 12 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049763 + i32.const 19 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049744 + i32.const 19 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049730 + i32.const 14 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049716 + i32.const 14 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049702 + i32.const 14 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049688 + i32.const 14 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049669 + i32.const 19 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049643 + i32.const 26 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049581 + i32.const 62 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049561 + i32.const 20 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049525 + i32.const 36 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049511 + i32.const 14 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049492 + i32.const 19 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049464 + i32.const 28 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E + return + end + local.get 1 + i32.const 1049440 + i32.const 24 + call $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E) + (func $_ZN61_$LT$serde_json..error..Error$u20$as$u20$core..fmt..Debug$GT$3fmt17h45431cd82259ef7aE (type 1) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 112 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + i64.const 0 + i64.store offset=60 align=4 + local.get 2 + i32.const 0 + i32.load offset=1049432 + i32.store offset=56 + local.get 0 + i32.load + local.set 0 + local.get 2 + i32.const 72 + i32.add + local.get 2 + i32.const 56 + i32.add + i32.const 1049244 + call $_ZN4core3fmt9Formatter3new17habe79b232356982dE + block ;; label = @1 + local.get 0 + local.get 2 + i32.const 72 + i32.add + call $_ZN67_$LT$serde_json..error..ErrorCode$u20$as$u20$core..fmt..Display$GT$3fmt17h3d29ccb0e41cf0e1E + br_if 0 (;@1;) + local.get 2 + i32.const 32 + i32.add + i32.const 20 + i32.add + i32.const 14 + i32.store + local.get 2 + i32.const 32 + i32.add + i32.const 12 + i32.add + i32.const 14 + i32.store + local.get 2 + i32.const 8 + i32.add + i32.const 20 + i32.add + i32.const 3 + i32.store + local.get 2 + i32.const 15 + i32.store offset=36 + local.get 2 + i64.const 4 + i64.store offset=12 align=4 + local.get 2 + i32.const 1049924 + i32.store offset=8 + local.get 2 + local.get 0 + i32.const 16 + i32.add + i32.store offset=48 + local.get 2 + local.get 0 + i32.const 12 + i32.add + i32.store offset=40 + local.get 2 + local.get 2 + i32.const 56 + i32.add + i32.store offset=32 + local.get 2 + local.get 2 + i32.const 32 + i32.add + i32.store offset=24 + local.get 1 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt9Formatter9write_fmt17h17510bd5fa687d11E + local.set 0 + block ;; label = @2 + local.get 2 + i32.load offset=60 + local.tee 1 + i32.eqz + br_if 0 (;@2;) + local.get 2 + i32.load offset=56 + local.get 1 + i32.const 1 + call $__rust_dealloc + end + local.get 2 + i32.const 112 + i32.add + global.set $__stack_pointer + local.get 0 + return + end + i32.const 1049268 + i32.const 55 + local.get 2 + i32.const 32 + i32.add + i32.const 1049416 + i32.const 1049400 + call $_ZN4core6result13unwrap_failed17h694db13a45aa6740E + unreachable) + (func $_ZN5alloc7raw_vec11finish_grow17h5323d616619f29b1E.llvm.14628612076018582588 (type 4) (param i32 i32 i32 i32) + (local i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + local.get 2 + i32.eqz + br_if 0 (;@9;) + i32.const 1 + local.set 4 + local.get 1 + i32.const 0 + i32.lt_s + br_if 1 (;@8;) + local.get 3 + i32.load + local.tee 5 + i32.eqz + br_if 2 (;@7;) + local.get 3 + i32.load offset=4 + local.tee 3 + br_if 4 (;@5;) + local.get 1 + i32.eqz + br_if 3 (;@6;) + br 5 (;@4;) + end + local.get 0 + local.get 1 + i32.store offset=4 + i32.const 1 + local.set 4 + end + i32.const 0 + local.set 1 + br 6 (;@1;) + end + local.get 1 + br_if 2 (;@4;) + end + local.get 2 + local.set 3 + br 2 (;@3;) + end + local.get 5 + local.get 3 + local.get 2 + local.get 1 + call $__rust_realloc + local.tee 3 + br_if 1 (;@3;) + br 2 (;@2;) + end + local.get 1 + local.get 2 + call $__rust_alloc + local.tee 3 + i32.eqz + br_if 1 (;@2;) + end + local.get 0 + local.get 3 + i32.store offset=4 + i32.const 0 + local.set 4 + br 1 (;@1;) + end + local.get 0 + local.get 1 + i32.store offset=4 + local.get 2 + local.set 1 + end + local.get 0 + local.get 4 + i32.store + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.store) + (func $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h142d4b7cc3a14bdeE (type 5) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + block ;; label = @1 + local.get 1 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.const 1 + i32.shl + local.tee 4 + local.get 2 + local.get 4 + local.get 2 + i32.gt_u + select + local.tee 2 + i32.const 8 + local.get 2 + i32.const 8 + i32.gt_u + select + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + i32.const 8 + i32.add + i32.const 1 + i32.store + local.get 3 + local.get 1 + i32.store offset=20 + local.get 3 + local.get 0 + i32.load + i32.store offset=16 + br 1 (;@2;) + end + local.get 3 + i32.const 0 + i32.store offset=16 + end + local.get 3 + local.get 2 + i32.const 1 + local.get 3 + i32.const 16 + i32.add + call $_ZN5alloc7raw_vec11finish_grow17h5323d616619f29b1E.llvm.14628612076018582588 + block ;; label = @2 + local.get 3 + i32.load + i32.const 1 + i32.ne + br_if 0 (;@2;) + local.get 3 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=4 + local.get 0 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 0 + local.get 3 + i64.load offset=4 align=4 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + global.set $__stack_pointer + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h56c8d20d9eefc93dE + unreachable) + (func $_ZN51_$LT$md5..Md5$u20$as$u20$core..default..Default$GT$7default17hd34bc9157fd9099bE (type 0) (param i32) + local.get 0 + i32.const 0 + i32.const 76 + call $memset + local.tee 0 + i32.const 84 + i32.add + i32.const 0 + i64.load offset=1050236 align=4 + i64.store align=4 + local.get 0 + i32.const 0 + i64.load offset=1050228 align=4 + i64.store offset=76 align=4) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hbfbca4fb35e9bd6dE (type 8) (param i32) (result i64) + i64.const 9147559743429524724) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hef2b492c5a1991f7E (type 8) (param i32) (result i64) + i64.const -304500839653225287) + (func $_ZN44_$LT$$RF$T$u20$as$u20$core..fmt..Display$GT$3fmt17hcabc397230f18c07E (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + local.get 1 + call $_ZN42_$LT$str$u20$as$u20$core..fmt..Display$GT$3fmt17h86821b8cd9767c9cE) + (func $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h4924ead02e4b7940E (type 5) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + block ;; label = @1 + local.get 1 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.const 1 + i32.shl + local.tee 4 + local.get 2 + local.get 4 + local.get 2 + i32.gt_u + select + local.tee 2 + i32.const 8 + local.get 2 + i32.const 8 + i32.gt_u + select + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + i32.const 8 + i32.add + i32.const 1 + i32.store + local.get 3 + local.get 1 + i32.store offset=20 + local.get 3 + local.get 0 + i32.load + i32.store offset=16 + br 1 (;@2;) + end + local.get 3 + i32.const 0 + i32.store offset=16 + end + local.get 3 + local.get 2 + i32.const 1 + local.get 3 + i32.const 16 + i32.add + call $_ZN5alloc7raw_vec11finish_grow17h3f2745a59523b24fE + block ;; label = @2 + local.get 3 + i32.load + i32.const 1 + i32.ne + br_if 0 (;@2;) + local.get 3 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=4 + local.get 0 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 0 + local.get 3 + i64.load offset=4 align=4 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + global.set $__stack_pointer + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h56c8d20d9eefc93dE + unreachable) + (func $_ZN4core3ptr100drop_in_place$LT$$RF$mut$u20$std..io..Write..write_fmt..Adapter$LT$alloc..vec..Vec$LT$u8$GT$$GT$$GT$17hbb05f427c3faacacE (type 0) (param i32)) + (func $_ZN4core3ptr226drop_in_place$LT$std..error..$LT$impl$u20$core..convert..From$LT$alloc..string..String$GT$$u20$for$u20$alloc..boxed..Box$LT$dyn$u20$std..error..Error$u2b$core..marker..Send$u2b$core..marker..Sync$GT$$GT$..from..StringError$GT$17h4523db22d8196732E (type 0) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@1;) + local.get 0 + local.get 1 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN4core3ptr70drop_in_place$LT$std..panicking..begin_panic_handler..PanicPayload$GT$17hd9ab65052492b52aE (type 0) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.load offset=4 + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@1;) + local.get 1 + local.get 0 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN4core6option15Option$LT$T$GT$6unwrap17h25bb243e5fdcf654E (type 9) (param i32) (result i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + i32.const 1050268 + i32.const 43 + i32.const 1051160 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable + end + local.get 0) + (func $_ZN4core6option15Option$LT$T$GT$6unwrap17hccc5d45ca79a283dE (type 1) (param i32 i32) (result i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + i32.const 1050268 + i32.const 43 + local.get 1 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable + end + local.get 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h9f0e7629dba1bc1eE (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.load + local.set 0 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 127 + i32.gt_u + br_if 0 (;@2;) + block ;; label = @3 + local.get 0 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.ne + br_if 0 (;@3;) + local.get 0 + local.get 3 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h4924ead02e4b7940E + local.get 0 + i32.load offset=8 + local.set 3 + end + local.get 0 + local.get 3 + i32.const 1 + i32.add + i32.store offset=8 + local.get 0 + i32.load + local.get 3 + i32.add + local.get 1 + i32.store8 + br 1 (;@1;) + end + local.get 2 + i32.const 0 + i32.store offset=12 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + local.get 1 + i32.const 65536 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=15 + local.get 2 + local.get 1 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 4 + local.set 1 + br 2 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 3 + local.set 1 + br 1 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 offset=12 + i32.const 2 + local.set 1 + end + block ;; label = @2 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 4 + i32.load + local.tee 3 + i32.sub + local.get 1 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.get 3 + local.get 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h4924ead02e4b7940E + local.get 4 + i32.load + local.set 3 + end + local.get 0 + i32.load + local.get 3 + i32.add + local.get 2 + i32.const 12 + i32.add + local.get 1 + call $memcpy + drop + local.get 4 + local.get 3 + local.get 1 + i32.add + i32.store + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + i32.const 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h4e63be9707973d51E (type 1) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 0 + i32.load + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 2 + i32.const 4 + i32.add + i32.const 1050244 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17hbb9d609fa6ca2265E (type 3) (param i32 i32 i32) (result i32) + (local i32 i32) + block ;; label = @1 + local.get 0 + i32.load + local.tee 3 + i32.const 4 + i32.add + i32.load + local.get 3 + i32.const 8 + i32.add + local.tee 4 + i32.load + local.tee 0 + i32.sub + local.get 2 + i32.ge_u + br_if 0 (;@1;) + local.get 3 + local.get 0 + local.get 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h4924ead02e4b7940E + local.get 4 + i32.load + local.set 0 + end + local.get 3 + i32.load + local.get 0 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 4 + local.get 0 + local.get 2 + i32.add + i32.store + i32.const 0) + (func $_ZN5alloc7raw_vec11finish_grow17h3f2745a59523b24fE (type 4) (param i32 i32 i32 i32) + (local i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 2 + i32.eqz + br_if 0 (;@7;) + i32.const 1 + local.set 4 + local.get 1 + i32.const 0 + i32.lt_s + br_if 1 (;@6;) + local.get 3 + i32.load + local.tee 5 + i32.eqz + br_if 3 (;@4;) + local.get 3 + i32.load offset=4 + local.tee 3 + br_if 2 (;@5;) + local.get 1 + br_if 4 (;@3;) + local.get 2 + local.set 3 + br 5 (;@2;) + end + local.get 0 + local.get 1 + i32.store offset=4 + i32.const 1 + local.set 4 + end + i32.const 0 + local.set 1 + br 4 (;@1;) + end + local.get 5 + local.get 3 + local.get 2 + local.get 1 + call $__rust_realloc + local.set 3 + br 2 (;@2;) + end + local.get 1 + br_if 0 (;@3;) + local.get 2 + local.set 3 + br 1 (;@2;) + end + local.get 1 + local.get 2 + call $__rust_alloc + local.set 3 + end + block ;; label = @2 + local.get 3 + i32.eqz + br_if 0 (;@2;) + local.get 0 + local.get 3 + i32.store offset=4 + i32.const 0 + local.set 4 + br 1 (;@1;) + end + local.get 0 + local.get 1 + i32.store offset=4 + local.get 2 + local.set 1 + end + local.get 0 + local.get 4 + i32.store + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.store) + (func $_ZN60_$LT$alloc..string..String$u20$as$u20$core..fmt..Display$GT$3fmt17h40c0b34608758a87E (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + local.get 0 + i32.const 8 + i32.add + i32.load + local.get 1 + call $_ZN42_$LT$str$u20$as$u20$core..fmt..Display$GT$3fmt17h86821b8cd9767c9cE) + (func $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17hbd2b2a561e0ef670E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 1 + i32.const 9 + i32.lt_u + br_if 0 (;@5;) + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 1 + i32.gt_u + br_if 1 (;@4;) + br 2 (;@3;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17heeb693c723d77fa0E + local.set 2 + br 2 (;@2;) + end + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 1 + end + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 3 + local.get 3 + local.get 3 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 3 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 3 + i32.gt_u + select + local.get 1 + i32.sub + local.get 0 + i32.le_u + br_if 0 (;@2;) + local.get 1 + i32.const 16 + local.get 0 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const -5 + i32.add + local.get 0 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.tee 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const -4 + i32.add + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17heeb693c723d77fa0E + local.tee 3 + i32.eqz + br_if 0 (;@2;) + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hee6c19b2ff028b5cE + local.set 0 + block ;; label = @3 + block ;; label = @4 + local.get 1 + i32.const -1 + i32.add + local.tee 2 + local.get 3 + i32.and + br_if 0 (;@4;) + local.get 0 + local.set 1 + br 1 (;@3;) + end + local.get 2 + local.get 3 + i32.add + i32.const 0 + local.get 1 + i32.sub + i32.and + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hee6c19b2ff028b5cE + local.set 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.get 2 + i32.const 0 + local.get 1 + local.get 2 + local.get 0 + i32.sub + local.get 3 + i32.gt_u + select + i32.add + local.tee 1 + local.get 0 + i32.sub + local.tee 2 + i32.sub + local.set 3 + block ;; label = @4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + br_if 0 (;@4;) + local.get 1 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h3ee811b32e33ddb4E + br 1 (;@3;) + end + local.get 0 + i32.load + local.set 0 + local.get 1 + local.get 3 + i32.store offset=4 + local.get 1 + local.get 0 + local.get 2 + i32.add + i32.store + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + br_if 1 (;@1;) + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 4 + i32.add + i32.le_u + br_if 1 (;@1;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 2 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 2 + local.get 0 + local.get 4 + i32.sub + local.tee 0 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h3ee811b32e33ddb4E + br 1 (;@1;) + end + local.get 2 + return + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + drop + local.get 0) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17heeb693c723d77fa0E (type 9) (param i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i64) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 1 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.const 245 + i32.lt_u + br_if 0 (;@3;) + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 3 + local.get 3 + local.get 3 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 3 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 3 + i32.gt_u + select + local.get 0 + i32.le_u + br_if 2 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 3 + i32.const 0 + i32.load offset=1054592 + i32.eqz + br_if 1 (;@2;) + i32.const 0 + local.set 5 + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + i32.const 31 + local.set 5 + local.get 3 + i32.const 16777215 + i32.gt_u + br_if 0 (;@4;) + local.get 3 + i32.const 6 + local.get 3 + i32.const 8 + i32.shr_u + i32.clz + local.tee 0 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 0 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 5 + end + i32.const 0 + local.get 3 + i32.sub + local.set 2 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 5 + i32.const 2 + i32.shl + i32.const 1054860 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@6;) + local.get 3 + local.get 5 + call $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h62dacf28ccbe01beE + i32.shl + local.set 6 + i32.const 0 + local.set 7 + i32.const 0 + local.set 4 + loop ;; label = @7 + block ;; label = @8 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 8 + local.get 3 + i32.lt_u + br_if 0 (;@8;) + local.get 8 + local.get 3 + i32.sub + local.tee 8 + local.get 2 + i32.ge_u + br_if 0 (;@8;) + local.get 8 + local.set 2 + local.get 0 + local.set 4 + local.get 8 + br_if 0 (;@8;) + i32.const 0 + local.set 2 + local.get 0 + local.set 4 + br 3 (;@5;) + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 8 + local.get 7 + local.get 8 + local.get 0 + local.get 6 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + i32.load + local.tee 0 + i32.ne + select + local.get 7 + local.get 8 + select + local.set 7 + local.get 6 + i32.const 1 + i32.shl + local.set 6 + local.get 0 + br_if 0 (;@7;) + end + block ;; label = @7 + local.get 7 + i32.eqz + br_if 0 (;@7;) + local.get 7 + local.set 0 + br 2 (;@5;) + end + local.get 4 + br_if 2 (;@4;) + end + i32.const 0 + local.set 4 + i32.const 1 + local.get 5 + i32.shl + call $_ZN8dlmalloc8dlmalloc9left_bits17hfbf3138e75a56fe9E + i32.const 0 + i32.load offset=1054592 + i32.and + local.tee 0 + i32.eqz + br_if 3 (;@2;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc9least_bit17hf1ac7fbb0c9afcf6E + i32.ctz + i32.const 2 + i32.shl + i32.const 1054860 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 3 (;@2;) + end + loop ;; label = @5 + local.get 0 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 7 + local.get 3 + i32.ge_u + local.get 7 + local.get 3 + i32.sub + local.tee 7 + local.get 2 + i32.lt_u + i32.and + local.tee 6 + select + local.set 4 + local.get 7 + local.get 2 + local.get 6 + select + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17h48f2502fcdcfa0a2E + local.tee 0 + br_if 0 (;@5;) + end + local.get 4 + i32.eqz + br_if 2 (;@2;) + end + block ;; label = @4 + i32.const 0 + i32.load offset=1054988 + local.tee 0 + local.get 3 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + local.get 0 + local.get 3 + i32.sub + i32.ge_u + br_if 2 (;@2;) + end + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 7 + local.get 4 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + block ;; label = @4 + block ;; label = @5 + local.get 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.lt_u + br_if 0 (;@5;) + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + block ;; label = @6 + local.get 2 + i32.const 256 + i32.lt_u + br_if 0 (;@6;) + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + br 2 (;@4;) + end + local.get 2 + i32.const 3 + i32.shr_u + local.tee 4 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 2 + block ;; label = @6 + block ;; label = @7 + i32.const 0 + i32.load offset=1054588 + local.tee 6 + i32.const 1 + local.get 4 + i32.shl + local.tee 4 + i32.and + i32.eqz + br_if 0 (;@7;) + local.get 2 + i32.load offset=8 + local.set 4 + br 1 (;@6;) + end + i32.const 0 + local.get 6 + local.get 4 + i32.or + i32.store offset=1054588 + local.get 2 + local.set 4 + end + local.get 2 + local.get 7 + i32.store offset=8 + local.get 4 + local.get 7 + i32.store offset=12 + local.get 7 + local.get 2 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + br 1 (;@4;) + end + local.get 0 + local.get 2 + local.get 3 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h75c2f837cb762f26E + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + i32.eqz + br_if 1 (;@2;) + br 2 (;@1;) + end + i32.const 16 + local.get 0 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const -5 + i32.add + local.get 0 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 3 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + i32.const 0 + i32.load offset=1054588 + local.tee 7 + local.get 3 + i32.const 3 + i32.shr_u + local.tee 2 + i32.shr_u + local.tee 0 + i32.const 3 + i32.and + br_if 0 (;@9;) + local.get 3 + i32.const 0 + i32.load offset=1054988 + i32.le_u + br_if 7 (;@2;) + local.get 0 + br_if 1 (;@8;) + i32.const 0 + i32.load offset=1054592 + local.tee 0 + i32.eqz + br_if 7 (;@2;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc9least_bit17hf1ac7fbb0c9afcf6E + i32.ctz + i32.const 2 + i32.shl + i32.const 1054860 + i32.add + i32.load + local.tee 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.get 3 + i32.sub + local.set 2 + block ;; label = @10 + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17h48f2502fcdcfa0a2E + local.tee 0 + i32.eqz + br_if 0 (;@10;) + loop ;; label = @11 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.get 3 + i32.sub + local.tee 7 + local.get 2 + local.get 7 + local.get 2 + i32.lt_u + local.tee 7 + select + local.set 2 + local.get 0 + local.get 4 + local.get 7 + select + local.set 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17h48f2502fcdcfa0a2E + local.tee 0 + br_if 0 (;@11;) + end + end + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 7 + local.get 4 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + local.get 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.lt_u + br_if 5 (;@4;) + local.get 7 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + local.set 7 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + i32.const 0 + i32.load offset=1054988 + local.tee 4 + i32.eqz + br_if 4 (;@5;) + local.get 4 + i32.const 3 + i32.shr_u + local.tee 8 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 6 + i32.const 0 + i32.load offset=1054996 + local.set 4 + i32.const 0 + i32.load offset=1054588 + local.tee 5 + i32.const 1 + local.get 8 + i32.shl + local.tee 8 + i32.and + i32.eqz + br_if 2 (;@7;) + local.get 6 + i32.load offset=8 + local.set 8 + br 3 (;@6;) + end + block ;; label = @9 + block ;; label = @10 + local.get 0 + i32.const -1 + i32.xor + i32.const 1 + i32.and + local.get 2 + i32.add + local.tee 3 + i32.const 3 + i32.shl + local.tee 4 + i32.const 1054604 + i32.add + i32.load + local.tee 0 + i32.const 8 + i32.add + i32.load + local.tee 2 + local.get 4 + i32.const 1054596 + i32.add + local.tee 4 + i32.eq + br_if 0 (;@10;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@9;) + end + i32.const 0 + local.get 7 + i32.const -2 + local.get 3 + i32.rotl + i32.and + i32.store offset=1054588 + end + local.get 0 + local.get 3 + i32.const 3 + i32.shl + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h75c2f837cb762f26E + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 7 (;@1;) + end + block ;; label = @8 + block ;; label = @9 + i32.const 1 + local.get 2 + i32.const 31 + i32.and + local.tee 2 + i32.shl + call $_ZN8dlmalloc8dlmalloc9left_bits17hfbf3138e75a56fe9E + local.get 0 + local.get 2 + i32.shl + i32.and + call $_ZN8dlmalloc8dlmalloc9least_bit17hf1ac7fbb0c9afcf6E + i32.ctz + local.tee 2 + i32.const 3 + i32.shl + local.tee 7 + i32.const 1054604 + i32.add + i32.load + local.tee 0 + i32.const 8 + i32.add + i32.load + local.tee 4 + local.get 7 + i32.const 1054596 + i32.add + local.tee 7 + i32.eq + br_if 0 (;@9;) + local.get 4 + local.get 7 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + br 1 (;@8;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 2 + i32.rotl + i32.and + i32.store offset=1054588 + end + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 4 + local.get 2 + i32.const 3 + i32.shl + local.get 3 + i32.sub + local.tee 7 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + block ;; label = @8 + i32.const 0 + i32.load offset=1054988 + local.tee 3 + i32.eqz + br_if 0 (;@8;) + local.get 3 + i32.const 3 + i32.shr_u + local.tee 6 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 2 + i32.const 0 + i32.load offset=1054996 + local.set 3 + block ;; label = @9 + block ;; label = @10 + i32.const 0 + i32.load offset=1054588 + local.tee 8 + i32.const 1 + local.get 6 + i32.shl + local.tee 6 + i32.and + i32.eqz + br_if 0 (;@10;) + local.get 2 + i32.load offset=8 + local.set 6 + br 1 (;@9;) + end + i32.const 0 + local.get 8 + local.get 6 + i32.or + i32.store offset=1054588 + local.get 2 + local.set 6 + end + local.get 2 + local.get 3 + i32.store offset=8 + local.get 6 + local.get 3 + i32.store offset=12 + local.get 3 + local.get 2 + i32.store offset=12 + local.get 3 + local.get 6 + i32.store offset=8 + end + i32.const 0 + local.get 4 + i32.store offset=1054996 + i32.const 0 + local.get 7 + i32.store offset=1054988 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 6 (;@1;) + end + i32.const 0 + local.get 5 + local.get 8 + i32.or + i32.store offset=1054588 + local.get 6 + local.set 8 + end + local.get 6 + local.get 4 + i32.store offset=8 + local.get 8 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 6 + i32.store offset=12 + local.get 4 + local.get 8 + i32.store offset=8 + end + i32.const 0 + local.get 7 + i32.store offset=1054996 + i32.const 0 + local.get 2 + i32.store offset=1054988 + br 1 (;@3;) + end + local.get 0 + local.get 2 + local.get 3 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h75c2f837cb762f26E + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + br_if 1 (;@1;) + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1054988 + local.tee 2 + local.get 3 + i32.ge_u + br_if 0 (;@12;) + i32.const 0 + i32.load offset=1054992 + local.tee 0 + local.get 3 + i32.gt_u + br_if 4 (;@8;) + i32.const 0 + local.set 2 + local.get 1 + i32.const 1054588 + local.get 3 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 0 + i32.sub + local.get 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 8 + i32.add + i32.const 65536 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5alloc17heece4aba06c14827E + local.get 1 + i32.load + local.tee 6 + i32.eqz + br_if 11 (;@1;) + local.get 1 + i32.load offset=8 + local.set 9 + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 1 + i32.load offset=4 + local.tee 8 + i32.add + local.tee 0 + i32.store offset=1055004 + i32.const 0 + i32.const 0 + i32.load offset=1055008 + local.tee 2 + local.get 0 + local.get 2 + local.get 0 + i32.gt_u + select + i32.store offset=1055008 + i32.const 0 + i32.load offset=1055000 + i32.eqz + br_if 1 (;@11;) + i32.const 1055012 + local.set 0 + loop ;; label = @13 + local.get 6 + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h7ba4cb35b2ab78b3E + i32.eq + br_if 3 (;@10;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@13;) + br 4 (;@9;) + end + end + i32.const 0 + i32.load offset=1054996 + local.set 0 + block ;; label = @12 + local.get 2 + local.get 3 + i32.sub + local.tee 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.ge_u + br_if 0 (;@12;) + i32.const 0 + i32.const 0 + i32.store offset=1054996 + i32.const 0 + i32.load offset=1054988 + local.set 3 + i32.const 0 + i32.const 0 + i32.store offset=1054988 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h75c2f837cb762f26E + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 11 (;@1;) + end + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 4 + i32.const 0 + local.get 2 + i32.store offset=1054988 + i32.const 0 + local.get 4 + i32.store offset=1054996 + local.get 4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 10 (;@1;) + end + i32.const 0 + i32.load offset=1055032 + local.tee 0 + i32.eqz + br_if 3 (;@7;) + local.get 6 + local.get 0 + i32.lt_u + br_if 3 (;@7;) + br 7 (;@3;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hcb93322195efbcceE + br_if 0 (;@9;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hba09df10f4d19d6eE + local.get 9 + i32.ne + br_if 0 (;@9;) + local.get 0 + i32.const 0 + i32.load offset=1055000 + call $_ZN8dlmalloc8dlmalloc7Segment5holds17h07422241f50b6662E + br_if 3 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1055032 + local.tee 0 + local.get 6 + local.get 6 + local.get 0 + i32.gt_u + select + i32.store offset=1055032 + local.get 6 + local.get 8 + i32.add + local.set 2 + i32.const 1055012 + local.set 0 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + loop ;; label = @12 + local.get 0 + i32.load + local.get 2 + i32.eq + br_if 1 (;@11;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@12;) + br 2 (;@10;) + end + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hcb93322195efbcceE + br_if 0 (;@10;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hba09df10f4d19d6eE + local.get 9 + i32.eq + br_if 1 (;@9;) + end + i32.const 0 + i32.load offset=1055000 + local.set 4 + i32.const 1055012 + local.set 0 + block ;; label = @10 + loop ;; label = @11 + block ;; label = @12 + local.get 0 + i32.load + local.get 4 + i32.gt_u + br_if 0 (;@12;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h7ba4cb35b2ab78b3E + local.get 4 + i32.gt_u + br_if 2 (;@10;) + end + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@11;) + end + i32.const 0 + local.set 0 + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h7ba4cb35b2ab78b3E + local.tee 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.tee 10 + i32.sub + i32.const -23 + i32.add + local.set 0 + local.get 4 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 2 + i32.sub + i32.add + local.tee 0 + local.get 0 + local.get 4 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.lt_u + select + local.tee 5 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + local.get 5 + local.get 10 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 0 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 11 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 12 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 13 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 14 + i32.const 0 + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 15 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 15 + i32.sub + local.tee 16 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 15 + i32.store offset=1055000 + i32.const 0 + local.get 8 + local.get 11 + i32.add + local.get 14 + local.get 12 + local.get 13 + i32.add + i32.add + local.get 16 + i32.add + i32.sub + local.tee 11 + i32.store offset=1054992 + local.get 15 + local.get 11 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 12 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 13 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 14 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 16 + local.get 15 + local.get 11 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.get 16 + local.get 14 + local.get 13 + local.get 12 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1055028 + local.get 5 + local.get 10 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + i32.const 0 + i64.load offset=1055012 align=4 + local.set 17 + local.get 2 + i32.const 8 + i32.add + i32.const 0 + i64.load offset=1055020 align=4 + i64.store align=4 + local.get 2 + local.get 17 + i64.store align=4 + i32.const 0 + local.get 9 + i32.store offset=1055024 + i32.const 0 + local.get 8 + i32.store offset=1055016 + i32.const 0 + local.get 6 + i32.store offset=1055012 + i32.const 0 + local.get 2 + i32.store offset=1055020 + loop ;; label = @10 + local.get 0 + i32.const 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17h8f835e0dbf36cac4E + i32.store offset=4 + local.get 2 + local.set 0 + local.get 7 + local.get 2 + i32.const 4 + i32.add + i32.gt_u + br_if 0 (;@10;) + end + local.get 5 + local.get 4 + i32.eq + br_if 7 (;@2;) + local.get 5 + local.get 4 + i32.sub + local.set 0 + local.get 4 + local.get 0 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + block ;; label = @10 + local.get 0 + i32.const 256 + i32.lt_u + br_if 0 (;@10;) + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + br 8 (;@2;) + end + local.get 0 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 0 + block ;; label = @10 + block ;; label = @11 + i32.const 0 + i32.load offset=1054588 + local.tee 7 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@11;) + local.get 0 + i32.load offset=8 + local.set 2 + br 1 (;@10;) + end + i32.const 0 + local.get 7 + local.get 2 + i32.or + i32.store offset=1054588 + local.get 0 + local.set 2 + end + local.get 0 + local.get 4 + i32.store offset=8 + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 7 (;@2;) + end + local.get 0 + i32.load + local.set 7 + local.get 0 + local.get 6 + i32.store + local.get 0 + local.get 0 + i32.load offset=4 + local.get 8 + i32.add + i32.store offset=4 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 2 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 8 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 5 + local.get 6 + local.get 2 + local.get 0 + i32.sub + i32.add + local.tee 2 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 4 + local.get 2 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 7 + local.get 5 + local.get 8 + i32.sub + i32.add + local.tee 0 + local.get 3 + local.get 2 + i32.add + i32.sub + local.set 3 + block ;; label = @9 + i32.const 0 + i32.load offset=1055000 + local.get 0 + i32.eq + br_if 0 (;@9;) + i32.const 0 + i32.load offset=1054996 + local.get 0 + i32.eq + br_if 4 (;@5;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h8cfc6665aae9b287E + br_if 5 (;@4;) + block ;; label = @10 + block ;; label = @11 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 7 + i32.const 256 + i32.lt_u + br_if 0 (;@11;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@10;) + end + block ;; label = @11 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 6 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 8 + i32.eq + br_if 0 (;@11;) + local.get 8 + local.get 6 + i32.store offset=12 + local.get 6 + local.get 8 + i32.store offset=8 + br 1 (;@10;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 7 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + local.get 7 + local.get 3 + i32.add + local.set 3 + local.get 0 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 0 + br 5 (;@4;) + end + i32.const 0 + local.get 4 + i32.store offset=1055000 + i32.const 0 + i32.const 0 + i32.load offset=1054992 + local.get 3 + i32.add + local.tee 0 + i32.store offset=1054992 + local.get 4 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 7 (;@1;) + end + i32.const 0 + local.get 0 + local.get 3 + i32.sub + local.tee 2 + i32.store offset=1054992 + i32.const 0 + i32.const 0 + i32.load offset=1055000 + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 4 + i32.store offset=1055000 + local.get 4 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 6 (;@1;) + end + i32.const 0 + local.get 6 + i32.store offset=1055032 + br 3 (;@3;) + end + local.get 0 + local.get 0 + i32.load offset=4 + local.get 8 + i32.add + i32.store offset=4 + i32.const 0 + i32.load offset=1054992 + local.set 2 + i32.const 0 + i32.load offset=1055000 + local.set 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 4 + i32.sub + local.tee 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 0 + i32.const 0 + local.get 2 + local.get 8 + i32.add + local.get 4 + i32.sub + local.tee 2 + i32.store offset=1054992 + i32.const 0 + local.get 0 + i32.store offset=1055000 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 8 + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.get 8 + local.get 6 + local.get 7 + local.get 4 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1055028 + br 3 (;@2;) + end + i32.const 0 + local.get 4 + i32.store offset=1054996 + i32.const 0 + i32.const 0 + i32.load offset=1054988 + local.get 3 + i32.add + local.tee 0 + i32.store offset=1054988 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 3 (;@1;) + end + local.get 4 + local.get 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 4 + local.get 3 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 3 (;@1;) + end + local.get 3 + i32.const 3 + i32.shr_u + local.tee 3 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 0 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1054588 + local.tee 7 + i32.const 1 + local.get 3 + i32.shl + local.tee 3 + i32.and + i32.eqz + br_if 0 (;@5;) + local.get 0 + i32.load offset=8 + local.set 3 + br 1 (;@4;) + end + i32.const 0 + local.get 7 + local.get 3 + i32.or + i32.store offset=1054588 + local.get 0 + local.set 3 + end + local.get 0 + local.get 4 + i32.store offset=8 + local.get 3 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 3 + i32.store offset=8 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + br 2 (;@1;) + end + i32.const 0 + i32.const 4095 + i32.store offset=1055036 + i32.const 0 + local.get 9 + i32.store offset=1055024 + i32.const 0 + local.get 8 + i32.store offset=1055016 + i32.const 0 + local.get 6 + i32.store offset=1055012 + i32.const 0 + i32.const 1054596 + i32.store offset=1054608 + i32.const 0 + i32.const 1054604 + i32.store offset=1054616 + i32.const 0 + i32.const 1054596 + i32.store offset=1054604 + i32.const 0 + i32.const 1054612 + i32.store offset=1054624 + i32.const 0 + i32.const 1054604 + i32.store offset=1054612 + i32.const 0 + i32.const 1054620 + i32.store offset=1054632 + i32.const 0 + i32.const 1054612 + i32.store offset=1054620 + i32.const 0 + i32.const 1054628 + i32.store offset=1054640 + i32.const 0 + i32.const 1054620 + i32.store offset=1054628 + i32.const 0 + i32.const 1054636 + i32.store offset=1054648 + i32.const 0 + i32.const 1054628 + i32.store offset=1054636 + i32.const 0 + i32.const 1054644 + i32.store offset=1054656 + i32.const 0 + i32.const 1054636 + i32.store offset=1054644 + i32.const 0 + i32.const 1054652 + i32.store offset=1054664 + i32.const 0 + i32.const 1054644 + i32.store offset=1054652 + i32.const 0 + i32.const 1054660 + i32.store offset=1054672 + i32.const 0 + i32.const 1054652 + i32.store offset=1054660 + i32.const 0 + i32.const 1054660 + i32.store offset=1054668 + i32.const 0 + i32.const 1054668 + i32.store offset=1054680 + i32.const 0 + i32.const 1054668 + i32.store offset=1054676 + i32.const 0 + i32.const 1054676 + i32.store offset=1054688 + i32.const 0 + i32.const 1054676 + i32.store offset=1054684 + i32.const 0 + i32.const 1054684 + i32.store offset=1054696 + i32.const 0 + i32.const 1054684 + i32.store offset=1054692 + i32.const 0 + i32.const 1054692 + i32.store offset=1054704 + i32.const 0 + i32.const 1054692 + i32.store offset=1054700 + i32.const 0 + i32.const 1054700 + i32.store offset=1054712 + i32.const 0 + i32.const 1054700 + i32.store offset=1054708 + i32.const 0 + i32.const 1054708 + i32.store offset=1054720 + i32.const 0 + i32.const 1054708 + i32.store offset=1054716 + i32.const 0 + i32.const 1054716 + i32.store offset=1054728 + i32.const 0 + i32.const 1054716 + i32.store offset=1054724 + i32.const 0 + i32.const 1054724 + i32.store offset=1054736 + i32.const 0 + i32.const 1054732 + i32.store offset=1054744 + i32.const 0 + i32.const 1054724 + i32.store offset=1054732 + i32.const 0 + i32.const 1054740 + i32.store offset=1054752 + i32.const 0 + i32.const 1054732 + i32.store offset=1054740 + i32.const 0 + i32.const 1054748 + i32.store offset=1054760 + i32.const 0 + i32.const 1054740 + i32.store offset=1054748 + i32.const 0 + i32.const 1054756 + i32.store offset=1054768 + i32.const 0 + i32.const 1054748 + i32.store offset=1054756 + i32.const 0 + i32.const 1054764 + i32.store offset=1054776 + i32.const 0 + i32.const 1054756 + i32.store offset=1054764 + i32.const 0 + i32.const 1054772 + i32.store offset=1054784 + i32.const 0 + i32.const 1054764 + i32.store offset=1054772 + i32.const 0 + i32.const 1054780 + i32.store offset=1054792 + i32.const 0 + i32.const 1054772 + i32.store offset=1054780 + i32.const 0 + i32.const 1054788 + i32.store offset=1054800 + i32.const 0 + i32.const 1054780 + i32.store offset=1054788 + i32.const 0 + i32.const 1054796 + i32.store offset=1054808 + i32.const 0 + i32.const 1054788 + i32.store offset=1054796 + i32.const 0 + i32.const 1054804 + i32.store offset=1054816 + i32.const 0 + i32.const 1054796 + i32.store offset=1054804 + i32.const 0 + i32.const 1054812 + i32.store offset=1054824 + i32.const 0 + i32.const 1054804 + i32.store offset=1054812 + i32.const 0 + i32.const 1054820 + i32.store offset=1054832 + i32.const 0 + i32.const 1054812 + i32.store offset=1054820 + i32.const 0 + i32.const 1054828 + i32.store offset=1054840 + i32.const 0 + i32.const 1054820 + i32.store offset=1054828 + i32.const 0 + i32.const 1054836 + i32.store offset=1054848 + i32.const 0 + i32.const 1054828 + i32.store offset=1054836 + i32.const 0 + i32.const 1054844 + i32.store offset=1054856 + i32.const 0 + i32.const 1054836 + i32.store offset=1054844 + i32.const 0 + i32.const 1054844 + i32.store offset=1054852 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 4 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 7 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 5 + i32.const 0 + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 0 + i32.sub + local.tee 9 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 0 + i32.store offset=1055000 + i32.const 0 + local.get 8 + local.get 2 + i32.add + local.get 5 + local.get 4 + local.get 7 + i32.add + i32.add + local.get 9 + i32.add + i32.sub + local.tee 2 + i32.store offset=1054992 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 8 + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.get 8 + local.get 6 + local.get 7 + local.get 4 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1055028 + end + i32.const 0 + local.set 2 + i32.const 0 + i32.load offset=1054992 + local.tee 0 + local.get 3 + i32.le_u + br_if 0 (;@1;) + i32.const 0 + local.get 0 + local.get 3 + i32.sub + local.tee 2 + i32.store offset=1054992 + i32.const 0 + i32.const 0 + i32.load offset=1055000 + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 4 + i32.store offset=1055000 + local.get 4 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 2 + end + local.get 1 + i32.const 16 + i32.add + global.set $__stack_pointer + local.get 2) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h3ee811b32e33ddb4E (type 2) (param i32 i32) + (local i32 i32 i32 i32) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 2 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h49d83fe486a8c426E + br_if 0 (;@3;) + local.get 0 + i32.load + local.set 3 + block ;; label = @4 + block ;; label = @5 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + br_if 0 (;@5;) + local.get 3 + local.get 1 + i32.add + local.set 1 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h956a4e2adf3eefcbE + local.tee 0 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@4;) + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1054988 + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + return + end + i32.const 1054588 + local.get 0 + local.get 3 + i32.sub + local.get 3 + local.get 1 + i32.add + i32.const 16 + i32.add + local.tee 0 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17hb5a074dd393cd90aE + i32.eqz + br_if 2 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 0 + i32.sub + i32.store offset=1055004 + return + end + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@3;) + end + block ;; label = @4 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 5 + i32.eq + br_if 0 (;@4;) + local.get 5 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 5 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + block ;; label = @3 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h5e879d0433022895E + i32.eqz + br_if 0 (;@3;) + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + br 2 (;@1;) + end + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const 0 + i32.load offset=1055000 + i32.eq + br_if 0 (;@4;) + local.get 2 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@3;) + i32.const 0 + local.get 0 + i32.store offset=1054996 + i32.const 0 + i32.const 0 + i32.load offset=1054988 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1054988 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + return + end + i32.const 0 + local.get 0 + i32.store offset=1055000 + i32.const 0 + i32.const 0 + i32.load offset=1054992 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1054992 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@2;) + i32.const 0 + i32.const 0 + i32.store offset=1054988 + i32.const 0 + i32.const 0 + i32.store offset=1054996 + return + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@3;) + end + block ;; label = @4 + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 2 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.eq + br_if 0 (;@4;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + local.get 0 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@1;) + i32.const 0 + local.get 1 + i32.store offset=1054988 + end + return + end + block ;; label = @1 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + return + end + local.get 1 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 1 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1054588 + local.tee 3 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 1 + i32.load offset=8 + local.set 2 + br 1 (;@1;) + end + i32.const 0 + local.get 3 + local.get 2 + i32.or + i32.store offset=1054588 + local.get 1 + local.set 2 + end + local.get 1 + local.get 0 + i32.store offset=8 + local.get 2 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=8) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E (type 0) (param i32) + (local i32 i32 i32 i32 i32) + local.get 0 + i32.load offset=24 + local.set 1 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h115dce7333e5fc2cE + local.get 0 + i32.ne + br_if 0 (;@3;) + local.get 0 + i32.const 20 + i32.const 16 + local.get 0 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 3 + select + i32.add + i32.load + local.tee 4 + br_if 1 (;@2;) + i32.const 0 + local.set 3 + br 2 (;@1;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4prev17h06d58a8550adfb36E + local.tee 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h115dce7333e5fc2cE + local.tee 3 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + i32.store offset=12 + local.get 3 + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + i32.store offset=8 + br 1 (;@1;) + end + local.get 2 + local.get 0 + i32.const 16 + i32.add + local.get 3 + select + local.set 2 + loop ;; label = @2 + local.get 2 + local.set 5 + block ;; label = @3 + local.get 4 + local.tee 3 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + local.set 2 + local.get 3 + i32.load offset=16 + local.set 4 + end + local.get 4 + br_if 0 (;@2;) + end + local.get 5 + i32.const 0 + i32.store + end + block ;; label = @1 + local.get 1 + i32.eqz + br_if 0 (;@1;) + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.load offset=28 + i32.const 2 + i32.shl + i32.const 1054860 + i32.add + local.tee 4 + i32.load + local.get 0 + i32.eq + br_if 0 (;@3;) + local.get 1 + i32.const 16 + i32.const 20 + local.get 1 + i32.load offset=16 + local.get 0 + i32.eq + select + i32.add + local.get 3 + i32.store + local.get 3 + br_if 1 (;@2;) + br 2 (;@1;) + end + local.get 4 + local.get 3 + i32.store + local.get 3 + br_if 0 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1054592 + i32.const -2 + local.get 0 + i32.load offset=28 + i32.rotl + i32.and + i32.store offset=1054592 + return + end + local.get 3 + local.get 1 + i32.store offset=24 + block ;; label = @2 + local.get 0 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 0 (;@2;) + local.get 3 + local.get 4 + i32.store offset=16 + local.get 4 + local.get 3 + i32.store offset=24 + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 4 + i32.eqz + br_if 0 (;@1;) + local.get 3 + i32.const 20 + i32.add + local.get 4 + i32.store + local.get 4 + local.get 3 + i32.store offset=24 + return + end) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E (type 2) (param i32 i32) + (local i32 i32 i32 i32 i32) + i32.const 0 + local.set 2 + block ;; label = @1 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@1;) + i32.const 31 + local.set 2 + local.get 1 + i32.const 16777215 + i32.gt_u + br_if 0 (;@1;) + local.get 1 + i32.const 6 + local.get 1 + i32.const 8 + i32.shr_u + i32.clz + local.tee 2 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 2 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 2 + end + local.get 0 + i64.const 0 + i64.store offset=16 align=4 + local.get 0 + local.get 2 + i32.store offset=28 + local.get 2 + i32.const 2 + i32.shl + i32.const 1054860 + i32.add + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + local.set 4 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1054592 + local.tee 5 + i32.const 1 + local.get 2 + i32.shl + local.tee 6 + i32.and + i32.eqz + br_if 0 (;@5;) + local.get 3 + i32.load + local.set 5 + local.get 2 + call $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h62dacf28ccbe01beE + local.set 2 + local.get 5 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.get 1 + i32.ne + br_if 1 (;@4;) + local.get 5 + local.set 2 + br 2 (;@3;) + end + i32.const 0 + local.get 5 + local.get 6 + i32.or + i32.store offset=1054592 + local.get 3 + local.get 0 + i32.store + local.get 0 + local.get 3 + i32.store offset=24 + br 3 (;@1;) + end + local.get 1 + local.get 2 + i32.shl + local.set 3 + loop ;; label = @4 + local.get 5 + local.get 3 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 6 + i32.load + local.tee 2 + i32.eqz + br_if 2 (;@2;) + local.get 3 + i32.const 1 + i32.shl + local.set 3 + local.get 2 + local.set 5 + local.get 2 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.get 1 + i32.ne + br_if 0 (;@4;) + end + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE + local.tee 2 + i32.load offset=8 + local.tee 3 + local.get 4 + i32.store offset=12 + local.get 2 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 2 + i32.store offset=12 + local.get 4 + local.get 3 + i32.store offset=8 + local.get 0 + i32.const 0 + i32.store offset=24 + return + end + local.get 6 + local.get 0 + i32.store + local.get 0 + local.get 5 + i32.store offset=24 + end + local.get 4 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 4 + i32.store offset=12) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h15a44562f2ff2228E (type 10) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + i32.const 0 + i32.load offset=1055020 + local.tee 0 + br_if 0 (;@1;) + i32.const 0 + i32.const 4095 + i32.store offset=1055036 + i32.const 0 + return + end + i32.const 1055012 + local.set 1 + i32.const 0 + local.set 2 + i32.const 0 + local.set 3 + loop ;; label = @1 + local.get 0 + local.tee 4 + i32.load offset=8 + local.set 0 + local.get 4 + i32.load offset=4 + local.set 5 + local.get 4 + i32.load + local.set 6 + block ;; label = @2 + block ;; label = @3 + i32.const 1054588 + local.get 4 + i32.const 12 + i32.add + i32.load + i32.const 1 + i32.shr_u + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hbadca9aef442623dE + i32.eqz + br_if 0 (;@3;) + local.get 4 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hcb93322195efbcceE + br_if 0 (;@3;) + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 7 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 7 + i32.sub + i32.add + local.tee 7 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.set 8 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 9 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 10 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 11 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 12 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h8cfc6665aae9b287E + br_if 0 (;@3;) + local.get 7 + local.get 8 + i32.add + local.get 6 + local.get 5 + local.get 9 + i32.add + local.get 10 + local.get 11 + i32.add + local.get 12 + i32.add + i32.sub + i32.add + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1054996 + local.get 7 + i32.eq + br_if 0 (;@5;) + local.get 7 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@4;) + end + i32.const 0 + i32.const 0 + i32.store offset=1054988 + i32.const 0 + i32.const 0 + i32.store offset=1054996 + end + block ;; label = @4 + i32.const 1054588 + local.get 6 + local.get 5 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17hb5a074dd393cd90aE + br_if 0 (;@4;) + local.get 7 + local.get 8 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 5 + i32.sub + i32.store offset=1055004 + local.get 1 + local.get 0 + i32.store offset=8 + local.get 5 + local.get 2 + i32.add + local.set 2 + br 1 (;@2;) + end + local.get 4 + local.set 1 + end + local.get 3 + i32.const 1 + i32.add + local.set 3 + local.get 0 + br_if 0 (;@1;) + end + i32.const 0 + local.get 3 + i32.const 4095 + local.get 3 + i32.const 4095 + i32.gt_u + select + i32.store offset=1055036 + local.get 2) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hb07eefd31eacd84cE (type 0) (param i32) + (local i32 i32 i32 i32 i32 i32) + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hee6c19b2ff028b5cE + local.set 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 2 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h49d83fe486a8c426E + br_if 0 (;@3;) + local.get 0 + i32.load + local.set 3 + block ;; label = @4 + block ;; label = @5 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + br_if 0 (;@5;) + local.get 3 + local.get 1 + i32.add + local.set 1 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h956a4e2adf3eefcbE + local.tee 0 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@4;) + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1054988 + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + return + end + i32.const 1054588 + local.get 0 + local.get 3 + i32.sub + local.get 3 + local.get 1 + i32.add + i32.const 16 + i32.add + local.tee 0 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17hb5a074dd393cd90aE + i32.eqz + br_if 2 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 0 + i32.sub + i32.store offset=1055004 + return + end + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@3;) + end + block ;; label = @4 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 5 + i32.eq + br_if 0 (;@4;) + local.get 5 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 5 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + block ;; label = @3 + block ;; label = @4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h5e879d0433022895E + i32.eqz + br_if 0 (;@4;) + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE + br 1 (;@3;) + end + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 2 + i32.const 0 + i32.load offset=1055000 + i32.eq + br_if 0 (;@7;) + local.get 2 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 1 (;@6;) + i32.const 0 + local.get 0 + i32.store offset=1054996 + i32.const 0 + i32.const 0 + i32.load offset=1054988 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1054988 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + return + end + i32.const 0 + local.get 0 + i32.store offset=1055000 + i32.const 0 + i32.const 0 + i32.load offset=1054992 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1054992 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1054996 + i32.eq + br_if 1 (;@5;) + br 2 (;@4;) + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @6 + block ;; label = @7 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@7;) + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 1 (;@6;) + end + block ;; label = @7 + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 2 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.eq + br_if 0 (;@7;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + local.get 0 + i32.const 0 + i32.load offset=1054996 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1054988 + br 3 (;@2;) + end + i32.const 0 + i32.const 0 + i32.store offset=1054988 + i32.const 0 + i32.const 0 + i32.store offset=1054996 + end + i32.const 0 + i32.load offset=1055028 + local.get 1 + i32.ge_u + br_if 1 (;@2;) + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 0 + local.get 0 + local.get 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 0 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 2 + i32.shl + i32.sub + local.tee 1 + local.get 1 + local.get 0 + i32.gt_u + select + i32.eqz + br_if 1 (;@2;) + i32.const 0 + i32.load offset=1055000 + i32.eqz + br_if 1 (;@2;) + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 1 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 3 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 4 + i32.const 0 + local.set 2 + block ;; label = @4 + i32.const 0 + i32.load offset=1054992 + local.tee 5 + local.get 4 + local.get 3 + local.get 1 + local.get 0 + i32.sub + i32.add + i32.add + local.tee 0 + i32.le_u + br_if 0 (;@4;) + local.get 5 + local.get 0 + i32.const -1 + i32.xor + i32.add + i32.const -65536 + i32.and + local.set 3 + i32.const 0 + i32.load offset=1055000 + local.set 1 + i32.const 1055012 + local.set 0 + block ;; label = @5 + loop ;; label = @6 + block ;; label = @7 + local.get 0 + i32.load + local.get 1 + i32.gt_u + br_if 0 (;@7;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h7ba4cb35b2ab78b3E + local.get 1 + i32.gt_u + br_if 2 (;@5;) + end + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@6;) + end + i32.const 0 + local.set 0 + end + i32.const 0 + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hcb93322195efbcceE + br_if 0 (;@4;) + i32.const 1054588 + local.get 0 + i32.const 12 + i32.add + i32.load + i32.const 1 + i32.shr_u + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hbadca9aef442623dE + i32.eqz + br_if 0 (;@4;) + local.get 0 + i32.load offset=4 + local.get 3 + i32.lt_u + br_if 0 (;@4;) + i32.const 1055012 + local.set 1 + loop ;; label = @5 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc7Segment5holds17h07422241f50b6662E + br_if 1 (;@4;) + local.get 1 + i32.load offset=8 + local.tee 1 + br_if 0 (;@5;) + end + i32.const 1054588 + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + local.tee 1 + local.get 1 + local.get 3 + i32.sub + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9free_part17he0a6ef0c01b934cbE + i32.eqz + br_if 0 (;@4;) + local.get 3 + i32.eqz + br_if 0 (;@4;) + local.get 0 + local.get 0 + i32.load offset=4 + local.get 3 + i32.sub + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 3 + i32.sub + i32.store offset=1055004 + i32.const 0 + i32.load offset=1054992 + local.set 1 + i32.const 0 + i32.load offset=1055000 + local.set 0 + i32.const 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.get 2 + i32.sub + local.tee 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 0 + i32.store offset=1055000 + i32.const 0 + local.get 1 + local.get 3 + local.get 2 + i32.add + i32.sub + local.tee 1 + i32.store offset=1054992 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 4 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 5 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 6 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.get 6 + local.get 5 + local.get 4 + local.get 2 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1055028 + local.get 3 + local.set 2 + end + local.get 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h15a44562f2ff2228E + i32.sub + i32.ne + br_if 1 (;@2;) + i32.const 0 + i32.load offset=1054992 + i32.const 0 + i32.load offset=1055028 + i32.le_u + br_if 1 (;@2;) + i32.const 0 + i32.const -1 + i32.store offset=1055028 + return + end + local.get 1 + i32.const 256 + i32.lt_u + br_if 1 (;@1;) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2d7ab4cd21b9b1e8E + i32.const 0 + i32.const 0 + i32.load offset=1055036 + i32.const -1 + i32.add + local.tee 0 + i32.store offset=1055036 + local.get 0 + br_if 0 (;@2;) + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h15a44562f2ff2228E + drop + return + end + return + end + local.get 1 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1054596 + i32.add + local.set 1 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1054588 + local.tee 3 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 1 + i32.load offset=8 + local.set 2 + br 1 (;@1;) + end + i32.const 0 + local.get 3 + local.get 2 + i32.or + i32.store offset=1054588 + local.get 1 + local.set 2 + end + local.get 1 + local.get 0 + i32.store offset=8 + local.get 2 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=8) + (func $_ZN60_$LT$std..io..error..Error$u20$as$u20$core..fmt..Display$GT$3fmt17h3d2d7d46abd0cb82E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 64 + i32.sub + local.tee 2 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 0 + i32.load8_u + br_table 0 (;@6;) 1 (;@5;) 2 (;@4;) 3 (;@3;) 0 (;@6;) + end + local.get 2 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.store offset=4 + i32.const 20 + i32.const 1 + call $__rust_alloc + local.tee 0 + i32.eqz + br_if 4 (;@1;) + local.get 0 + i32.const 16 + i32.add + i32.const 0 + i32.load offset=1051264 align=1 + i32.store align=1 + local.get 0 + i32.const 8 + i32.add + i32.const 0 + i64.load offset=1051256 align=1 + i64.store align=1 + local.get 0 + i32.const 0 + i64.load offset=1051248 align=1 + i64.store align=1 + local.get 2 + i64.const 85899345940 + i64.store offset=12 align=4 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 2 + i32.const 40 + i32.add + i32.const 20 + i32.add + i32.const 2 + i32.store + local.get 2 + i32.const 36 + i32.add + i32.const 21 + i32.store + local.get 2 + i64.const 3 + i64.store offset=44 align=4 + local.get 2 + i32.const 1051092 + i32.store offset=40 + local.get 2 + i32.const 22 + i32.store offset=28 + local.get 2 + local.get 2 + i32.const 24 + i32.add + i32.store offset=56 + local.get 2 + local.get 2 + i32.const 4 + i32.add + i32.store offset=32 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=24 + local.get 1 + local.get 2 + i32.const 40 + i32.add + call $_ZN4core3fmt9Formatter9write_fmt17h17510bd5fa687d11E + local.set 0 + local.get 2 + i32.load offset=12 + local.tee 1 + i32.eqz + br_if 3 (;@2;) + local.get 2 + i32.load offset=8 + local.tee 3 + i32.eqz + br_if 3 (;@2;) + local.get 3 + local.get 1 + i32.const 1 + call $__rust_dealloc + br 3 (;@2;) + end + i32.const 1051062 + local.set 3 + i32.const 16 + local.set 4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + block ;; label = @14 + block ;; label = @15 + block ;; label = @16 + block ;; label = @17 + block ;; label = @18 + block ;; label = @19 + block ;; label = @20 + block ;; label = @21 + block ;; label = @22 + block ;; label = @23 + block ;; label = @24 + block ;; label = @25 + block ;; label = @26 + block ;; label = @27 + block ;; label = @28 + block ;; label = @29 + block ;; label = @30 + block ;; label = @31 + block ;; label = @32 + block ;; label = @33 + block ;; label = @34 + block ;; label = @35 + block ;; label = @36 + block ;; label = @37 + block ;; label = @38 + block ;; label = @39 + block ;; label = @40 + block ;; label = @41 + block ;; label = @42 + block ;; label = @43 + block ;; label = @44 + block ;; label = @45 + block ;; label = @46 + local.get 0 + i32.load8_u offset=1 + br_table 41 (;@5;) 0 (;@46;) 1 (;@45;) 2 (;@44;) 3 (;@43;) 4 (;@42;) 5 (;@41;) 6 (;@40;) 7 (;@39;) 8 (;@38;) 9 (;@37;) 10 (;@36;) 11 (;@35;) 12 (;@34;) 13 (;@33;) 14 (;@32;) 15 (;@31;) 16 (;@30;) 17 (;@29;) 18 (;@28;) 19 (;@27;) 20 (;@26;) 21 (;@25;) 22 (;@24;) 23 (;@23;) 24 (;@22;) 25 (;@21;) 26 (;@20;) 27 (;@19;) 28 (;@18;) 29 (;@17;) 30 (;@16;) 31 (;@15;) 32 (;@14;) 33 (;@13;) 34 (;@12;) 35 (;@11;) 36 (;@10;) 37 (;@9;) 38 (;@8;) 39 (;@7;) 41 (;@5;) + end + i32.const 1051045 + local.set 3 + i32.const 17 + local.set 4 + br 40 (;@5;) + end + i32.const 1051027 + local.set 3 + i32.const 18 + local.set 4 + br 39 (;@5;) + end + i32.const 1051011 + local.set 3 + br 38 (;@5;) + end + i32.const 1050995 + local.set 3 + br 37 (;@5;) + end + i32.const 1050976 + local.set 3 + br 35 (;@6;) + end + i32.const 1050958 + local.set 3 + i32.const 18 + local.set 4 + br 35 (;@5;) + end + i32.const 1050945 + local.set 3 + i32.const 13 + local.set 4 + br 34 (;@5;) + end + i32.const 1050931 + local.set 3 + i32.const 14 + local.set 4 + br 33 (;@5;) + end + i32.const 1050910 + local.set 3 + i32.const 21 + local.set 4 + br 32 (;@5;) + end + i32.const 1050898 + local.set 3 + i32.const 12 + local.set 4 + br 31 (;@5;) + end + i32.const 1050887 + local.set 3 + i32.const 11 + local.set 4 + br 30 (;@5;) + end + i32.const 1050866 + local.set 3 + i32.const 21 + local.set 4 + br 29 (;@5;) + end + i32.const 1050845 + local.set 3 + i32.const 21 + local.set 4 + br 28 (;@5;) + end + i32.const 1050830 + local.set 3 + i32.const 15 + local.set 4 + br 27 (;@5;) + end + i32.const 1050816 + local.set 3 + i32.const 14 + local.set 4 + br 26 (;@5;) + end + i32.const 1050797 + local.set 3 + br 24 (;@6;) + end + i32.const 1050759 + local.set 3 + i32.const 38 + local.set 4 + br 24 (;@5;) + end + i32.const 1050703 + local.set 3 + i32.const 56 + local.set 4 + br 23 (;@5;) + end + i32.const 1050678 + local.set 3 + i32.const 25 + local.set 4 + br 22 (;@5;) + end + i32.const 1050655 + local.set 3 + i32.const 23 + local.set 4 + br 21 (;@5;) + end + i32.const 1050643 + local.set 3 + i32.const 12 + local.set 4 + br 20 (;@5;) + end + i32.const 1050634 + local.set 3 + i32.const 9 + local.set 4 + br 19 (;@5;) + end + i32.const 1050624 + local.set 3 + i32.const 10 + local.set 4 + br 18 (;@5;) + end + i32.const 1050608 + local.set 3 + br 17 (;@5;) + end + i32.const 1050585 + local.set 3 + i32.const 23 + local.set 4 + br 16 (;@5;) + end + i32.const 1050560 + local.set 3 + i32.const 25 + local.set 4 + br 15 (;@5;) + end + i32.const 1050546 + local.set 3 + i32.const 14 + local.set 4 + br 14 (;@5;) + end + i32.const 1050533 + local.set 3 + i32.const 13 + local.set 4 + br 13 (;@5;) + end + i32.const 1050513 + local.set 3 + i32.const 20 + local.set 4 + br 12 (;@5;) + end + i32.const 1050505 + local.set 3 + i32.const 8 + local.set 4 + br 11 (;@5;) + end + i32.const 1050478 + local.set 3 + i32.const 27 + local.set 4 + br 10 (;@5;) + end + i32.const 1050464 + local.set 3 + i32.const 14 + local.set 4 + br 9 (;@5;) + end + i32.const 1050447 + local.set 3 + i32.const 17 + local.set 4 + br 8 (;@5;) + end + i32.const 1050425 + local.set 3 + i32.const 22 + local.set 4 + br 7 (;@5;) + end + i32.const 1050404 + local.set 3 + i32.const 21 + local.set 4 + br 6 (;@5;) + end + i32.const 1050393 + local.set 3 + i32.const 11 + local.set 4 + br 5 (;@5;) + end + i32.const 1050371 + local.set 3 + i32.const 22 + local.set 4 + br 4 (;@5;) + end + i32.const 1050358 + local.set 3 + i32.const 13 + local.set 4 + br 3 (;@5;) + end + i32.const 1050347 + local.set 3 + i32.const 11 + local.set 4 + br 2 (;@5;) + end + i32.const 1050328 + local.set 3 + end + i32.const 19 + local.set 4 + end + local.get 2 + i32.const 60 + i32.add + i32.const 1 + i32.store + local.get 2 + local.get 4 + i32.store offset=28 + local.get 2 + local.get 3 + i32.store offset=24 + local.get 2 + i32.const 23 + i32.store offset=12 + local.get 2 + i64.const 1 + i64.store offset=44 align=4 + local.get 2 + i32.const 1050320 + i32.store offset=40 + local.get 2 + local.get 2 + i32.const 24 + i32.add + i32.store offset=8 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=56 + local.get 1 + local.get 2 + i32.const 40 + i32.add + call $_ZN4core3fmt9Formatter9write_fmt17h17510bd5fa687d11E + local.set 0 + br 2 (;@2;) + end + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 0 + i32.load + local.get 0 + i32.load offset=4 + local.get 1 + call $_ZN42_$LT$str$u20$as$u20$core..fmt..Display$GT$3fmt17h86821b8cd9767c9cE + local.set 0 + br 1 (;@2;) + end + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 0 + i32.load + local.get 1 + local.get 0 + i32.load offset=4 + i32.load offset=16 + call_indirect (type 1) + local.set 0 + end + local.get 2 + i32.const 64 + i32.add + global.set $__stack_pointer + local.get 0 + return + end + i32.const 20 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable) + (func $_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17h438eceaf49d629cdE (type 0) (param i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + local.get 0 + i32.load offset=8 + call $_ZN3std9panicking19begin_panic_handler28_$u7b$$u7b$closure$u7d$$u7d$17h9c6751687bfc5521E + unreachable) + (func $_ZN3std9panicking19begin_panic_handler28_$u7b$$u7b$closure$u7d$$u7d$17h9c6751687bfc5521E (type 5) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 0 + i32.const 20 + i32.add + i32.load + local.set 4 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 0 + i32.const 4 + i32.add + i32.load + br_table 0 (;@4;) 1 (;@3;) 3 (;@1;) + end + local.get 4 + br_if 2 (;@1;) + i32.const 1050268 + local.set 0 + i32.const 0 + local.set 4 + br 1 (;@2;) + end + local.get 4 + br_if 1 (;@1;) + local.get 0 + i32.load + local.tee 0 + i32.load offset=4 + local.set 4 + local.get 0 + i32.load + local.set 0 + end + local.get 3 + local.get 4 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 1051196 + local.get 1 + call $_ZN4core5panic10panic_info9PanicInfo7message17h36702d3d004a6deeE + local.get 2 + call $_ZN3std9panicking20rust_panic_with_hook17h364974e717ed59ecE + unreachable + end + local.get 3 + i32.const 0 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 1051176 + local.get 1 + call $_ZN4core5panic10panic_info9PanicInfo7message17h36702d3d004a6deeE + local.get 2 + call $_ZN3std9panicking20rust_panic_with_hook17h364974e717ed59ecE + unreachable) + (func $_ZN3std5alloc24default_alloc_error_hook17hc8541f7c1ec32afeE (type 2) (param i32 i32)) + (func $rust_oom (type 2) (param i32 i32) + (local i32) + local.get 0 + local.get 1 + i32.const 0 + i32.load offset=1054568 + local.tee 2 + i32.const 24 + local.get 2 + select + call_indirect (type 2) + unreachable + unreachable) + (func $__rdl_alloc (type 1) (param i32 i32) (result i32) + local.get 0 + local.get 1 + call $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17hbd2b2a561e0ef670E) + (func $__rdl_dealloc (type 5) (param i32 i32 i32) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hb07eefd31eacd84cE) + (func $__rdl_realloc (type 7) (param i32 i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const 9 + i32.lt_u + br_if 0 (;@4;) + local.get 3 + local.get 2 + call $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17hbd2b2a561e0ef670E + local.tee 2 + br_if 1 (;@3;) + i32.const 0 + return + end + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E + local.set 1 + local.get 1 + local.get 1 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 1 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 1 + i32.gt_u + select + local.get 3 + i32.le_u + br_if 1 (;@2;) + i32.const 16 + local.get 3 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.const -5 + i32.add + local.get 3 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.set 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hee6c19b2ff028b5cE + local.set 1 + local.get 1 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 5 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 6 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + br_if 0 (;@11;) + local.get 5 + local.get 4 + i32.ge_u + br_if 1 (;@10;) + local.get 6 + i32.const 0 + i32.load offset=1055000 + i32.eq + br_if 2 (;@9;) + local.get 6 + i32.const 0 + i32.load offset=1054996 + i32.eq + br_if 3 (;@8;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h5e879d0433022895E + br_if 7 (;@4;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.tee 7 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.lt_u + br_if 7 (;@4;) + local.get 5 + local.get 4 + i32.sub + local.set 8 + local.get 7 + i32.const 256 + i32.lt_u + br_if 4 (;@7;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17hb07925f032cc8648E + br 5 (;@6;) + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + local.set 5 + local.get 4 + i32.const 256 + i32.lt_u + br_if 6 (;@4;) + block ;; label = @11 + local.get 5 + local.get 4 + i32.const 4 + i32.add + i32.lt_u + br_if 0 (;@11;) + local.get 5 + local.get 4 + i32.sub + i32.const 131073 + i32.lt_u + br_if 6 (;@5;) + end + i32.const 1054588 + local.get 1 + local.get 1 + i32.load + local.tee 6 + i32.sub + local.get 5 + local.get 6 + i32.add + i32.const 16 + i32.add + local.tee 7 + local.get 4 + i32.const 31 + i32.add + i32.const 1054588 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9page_size17h2c29bf8b31566e63E + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + local.tee 5 + i32.const 1 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5remap17h2ff00066846ea921E + local.tee 4 + i32.eqz + br_if 6 (;@4;) + local.get 4 + local.get 6 + i32.add + local.tee 1 + local.get 5 + local.get 6 + i32.sub + local.tee 3 + i32.const -16 + i32.add + local.tee 2 + i32.store offset=4 + call $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17h8f835e0dbf36cac4E + local.set 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.get 0 + i32.store offset=4 + local.get 1 + local.get 3 + i32.const -12 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + i32.const 0 + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1055004 + local.get 5 + local.get 7 + i32.sub + i32.add + local.tee 3 + i32.store offset=1055004 + i32.const 0 + i32.const 0 + i32.load offset=1055032 + local.tee 2 + local.get 4 + local.get 4 + local.get 2 + i32.gt_u + select + i32.store offset=1055032 + i32.const 0 + i32.const 0 + i32.load offset=1055008 + local.tee 2 + local.get 3 + local.get 2 + local.get 3 + i32.gt_u + select + i32.store offset=1055008 + br 9 (;@1;) + end + local.get 5 + local.get 4 + i32.sub + local.tee 5 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.lt_u + br_if 4 (;@5;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 6 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 6 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 6 + local.get 5 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h3ee811b32e33ddb4E + br 4 (;@5;) + end + i32.const 0 + i32.load offset=1054992 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.le_u + br_if 4 (;@4;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 6 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 6 + local.get 5 + local.get 4 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.get 4 + i32.store offset=1054992 + i32.const 0 + local.get 6 + i32.store offset=1055000 + br 3 (;@5;) + end + i32.const 0 + i32.load offset=1054988 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.lt_u + br_if 3 (;@4;) + block ;; label = @8 + block ;; label = @9 + local.get 5 + local.get 4 + i32.sub + local.tee 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.ge_u + br_if 0 (;@9;) + local.get 1 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + i32.const 0 + local.set 6 + i32.const 0 + local.set 5 + br 1 (;@8;) + end + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.tee 5 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 7 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 5 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk12clear_pinuse17h1e84b2f283ad8e89E + end + i32.const 0 + local.get 5 + i32.store offset=1054996 + i32.const 0 + local.get 6 + i32.store offset=1054988 + br 2 (;@5;) + end + block ;; label = @7 + local.get 6 + i32.const 12 + i32.add + i32.load + local.tee 9 + local.get 6 + i32.const 8 + i32.add + i32.load + local.tee 6 + i32.eq + br_if 0 (;@7;) + local.get 6 + local.get 9 + i32.store offset=12 + local.get 9 + local.get 6 + i32.store offset=8 + br 1 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1054588 + i32.const -2 + local.get 7 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1054588 + end + block ;; label = @6 + local.get 8 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E + i32.lt_u + br_if 0 (;@6;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E + local.set 5 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 5 + local.get 8 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + local.get 5 + local.get 8 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h3ee811b32e33ddb4E + br 1 (;@5;) + end + local.get 1 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE + end + local.get 1 + br_if 3 (;@1;) + end + local.get 3 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17heeb693c723d77fa0E + local.tee 4 + i32.eqz + br_if 1 (;@2;) + local.get 4 + local.get 0 + local.get 3 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E + i32.const -8 + i32.const -4 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + select + i32.add + local.tee 2 + local.get 2 + local.get 3 + i32.gt_u + select + call $memcpy + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hb07eefd31eacd84cE + local.get 3 + return + end + local.get 2 + local.get 0 + local.get 3 + local.get 1 + local.get 1 + local.get 3 + i32.gt_u + select + call $memcpy + drop + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hb07eefd31eacd84cE + end + local.get 2 + return + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE + drop + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E) + (func $rust_begin_unwind (type 0) (param i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 1 + global.set $__stack_pointer + local.get 0 + call $_ZN4core5panic10panic_info9PanicInfo8location17h6f567dfbe8cd82afE + i32.const 1051144 + call $_ZN4core6option15Option$LT$T$GT$6unwrap17hccc5d45ca79a283dE + local.set 2 + local.get 0 + call $_ZN4core5panic10panic_info9PanicInfo7message17h36702d3d004a6deeE + call $_ZN4core6option15Option$LT$T$GT$6unwrap17h25bb243e5fdcf654E + local.set 3 + local.get 1 + local.get 2 + i32.store offset=8 + local.get 1 + local.get 0 + i32.store offset=4 + local.get 1 + local.get 3 + i32.store + local.get 1 + call $_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17h438eceaf49d629cdE + unreachable) + (func $_ZN3std9panicking20rust_panic_with_hook17h364974e717ed59ecE (type 4) (param i32 i32 i32 i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 4 + global.set $__stack_pointer + i32.const 1 + local.set 5 + i32.const 0 + i32.const 0 + i32.load offset=1054584 + local.tee 6 + i32.const 1 + i32.add + i32.store offset=1054584 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1055040 + i32.const 1 + i32.ne + br_if 0 (;@2;) + i32.const 0 + i32.load offset=1055044 + i32.const 1 + i32.add + local.set 5 + br 1 (;@1;) + end + i32.const 0 + i32.const 1 + i32.store offset=1055040 + end + i32.const 0 + local.get 5 + i32.store offset=1055044 + block ;; label = @1 + block ;; label = @2 + local.get 6 + i32.const 0 + i32.lt_s + br_if 0 (;@2;) + local.get 5 + i32.const 2 + i32.gt_u + br_if 0 (;@2;) + local.get 4 + local.get 3 + i32.store offset=28 + local.get 4 + local.get 2 + i32.store offset=24 + i32.const 0 + i32.load offset=1054572 + local.tee 6 + i32.const -1 + i32.le_s + br_if 0 (;@2;) + i32.const 0 + local.get 6 + i32.const 1 + i32.add + local.tee 6 + i32.store offset=1054572 + block ;; label = @3 + i32.const 0 + i32.load offset=1054580 + local.tee 2 + i32.eqz + br_if 0 (;@3;) + i32.const 0 + i32.load offset=1054576 + local.set 6 + local.get 4 + i32.const 8 + i32.add + local.get 0 + local.get 1 + i32.load offset=16 + call_indirect (type 2) + local.get 4 + local.get 4 + i64.load offset=8 + i64.store offset=16 + local.get 6 + local.get 4 + i32.const 16 + i32.add + local.get 2 + i32.load offset=20 + call_indirect (type 2) + i32.const 0 + i32.load offset=1054572 + local.set 6 + end + i32.const 0 + local.get 6 + i32.const -1 + i32.add + i32.store offset=1054572 + local.get 5 + i32.const 1 + i32.le_u + br_if 1 (;@1;) + end + unreachable + unreachable + end + local.get 0 + local.get 1 + call $rust_panic + unreachable) + (func $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h0213f8a547c7e7bbE (type 2) (param i32 i32) + (local i32 i32 i32 i32 i64) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 1 + i32.const 4 + i32.add + local.set 3 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.load offset=4 + i32.eqz + br_if 0 (;@2;) + i32.const 0 + i32.load offset=1050312 + local.set 4 + br 1 (;@1;) + end + local.get 1 + i32.load + local.set 5 + local.get 2 + i64.const 0 + i64.store offset=12 align=4 + local.get 2 + i32.const 0 + i32.load offset=1050312 + local.tee 4 + i32.store offset=8 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=20 + local.get 2 + i32.const 24 + i32.add + i32.const 16 + i32.add + local.get 5 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.get 5 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 5 + i64.load align=4 + i64.store offset=24 + local.get 2 + i32.const 20 + i32.add + i32.const 1050244 + local.get 2 + i32.const 24 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + drop + local.get 3 + i32.const 8 + i32.add + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + i32.load + i32.store + local.get 3 + local.get 2 + i64.load offset=8 + i64.store align=4 + end + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.tee 5 + local.get 3 + i32.const 8 + i32.add + i32.load + i32.store + local.get 1 + i32.const 12 + i32.add + i32.const 0 + i32.store + local.get 3 + i64.load align=4 + local.set 6 + local.get 1 + i32.const 8 + i32.add + i32.const 0 + i32.store + local.get 1 + local.get 4 + i32.store offset=4 + local.get 2 + local.get 6 + i64.store offset=24 + block ;; label = @1 + i32.const 12 + i32.const 4 + call $__rust_alloc + local.tee 1 + br_if 0 (;@1;) + i32.const 12 + i32.const 4 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 1 + local.get 2 + i64.load offset=24 + i64.store align=4 + local.get 1 + i32.const 8 + i32.add + local.get 5 + i32.load + i32.store + local.get 0 + i32.const 1051216 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store + local.get 2 + i32.const 48 + i32.add + global.set $__stack_pointer) + (func $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17h023e80216351dde5E (type 2) (param i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 1 + i32.const 4 + i32.add + local.set 3 + block ;; label = @1 + local.get 1 + i32.load offset=4 + br_if 0 (;@1;) + local.get 1 + i32.load + local.set 1 + local.get 2 + i64.const 0 + i64.store offset=12 align=4 + local.get 2 + i32.const 0 + i32.load offset=1050312 + i32.store offset=8 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=20 + local.get 2 + i32.const 24 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=24 + local.get 2 + i32.const 20 + i32.add + i32.const 1050244 + local.get 2 + i32.const 24 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + drop + local.get 3 + i32.const 8 + i32.add + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + i32.load + i32.store + local.get 3 + local.get 2 + i64.load offset=8 + i64.store align=4 + end + local.get 0 + i32.const 1051216 + i32.store offset=4 + local.get 0 + local.get 3 + i32.store + local.get 2 + i32.const 48 + i32.add + global.set $__stack_pointer) + (func $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h8c5dc867f0a69941E (type 2) (param i32 i32) + (local i32 i32) + local.get 1 + i32.load offset=4 + local.set 2 + local.get 1 + i32.load + local.set 3 + block ;; label = @1 + i32.const 8 + i32.const 4 + call $__rust_alloc + local.tee 1 + br_if 0 (;@1;) + i32.const 8 + i32.const 4 + call $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E + unreachable + end + local.get 1 + local.get 2 + i32.store offset=4 + local.get 1 + local.get 3 + i32.store + local.get 0 + i32.const 1051232 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store) + (func $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17hb5cbf70b53a72f1eE (type 2) (param i32 i32) + local.get 0 + i32.const 1051232 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store) + (func $rust_panic (type 2) (param i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 1 + i32.store offset=12 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 2 + i32.const 8 + i32.add + call $__rust_start_panic + drop + unreachable + unreachable) + (func $__rust_start_panic (type 9) (param i32) (result i32) + unreachable + unreachable) + (func $_ZN8dlmalloc8dlmalloc8align_up17h4772c6244aec6713E (type 1) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.add + i32.const -1 + i32.add + i32.const 0 + local.get 1 + i32.sub + i32.and) + (func $_ZN8dlmalloc8dlmalloc9left_bits17hfbf3138e75a56fe9E (type 9) (param i32) (result i32) + local.get 0 + i32.const 1 + i32.shl + local.tee 0 + i32.const 0 + local.get 0 + i32.sub + i32.or) + (func $_ZN8dlmalloc8dlmalloc9least_bit17hf1ac7fbb0c9afcf6E (type 9) (param i32) (result i32) + i32.const 0 + local.get 0 + i32.sub + local.get 0 + i32.and) + (func $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h62dacf28ccbe01beE (type 9) (param i32) (result i32) + i32.const 0 + i32.const 25 + local.get 0 + i32.const 1 + i32.shr_u + i32.sub + local.get 0 + i32.const 31 + i32.eq + select) + (func $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17h8f835e0dbf36cac4E (type 10) (result i32) + i32.const 7) + (func $_ZN8dlmalloc8dlmalloc5Chunk4size17h477182019ccb4687E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const -8 + i32.and) + (func $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h5e879d0433022895E (type 9) (param i32) (result i32) + local.get 0 + i32.load8_u offset=4 + i32.const 2 + i32.and + i32.const 1 + i32.shr_u) + (func $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h49d83fe486a8c426E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and) + (func $_ZN8dlmalloc8dlmalloc5Chunk12clear_pinuse17h1e84b2f283ad8e89E (type 0) (param i32) + local.get 0 + local.get 0 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4) + (func $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h8cfc6665aae9b287E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 1 + i32.ne) + (func $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17h433d048e993b396eE (type 9) (param i32) (result i32) + local.get 0 + i32.load8_u offset=4 + i32.const 3 + i32.and + i32.eqz) + (func $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17ha2f9cf9ea44c655dE (type 2) (param i32 i32) + local.get 0 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and + local.get 1 + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + i32.const 4 + i32.add + local.tee 0 + local.get 0 + i32.load + i32.const 1 + i32.or + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h75c2f837cb762f26E (type 2) (param i32 i32) + local.get 0 + local.get 1 + i32.const 3 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + i32.const 4 + i32.add + local.tee 0 + local.get 0 + i32.load + i32.const 1 + i32.or + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17hb3cda7ee1be519b8E (type 2) (param i32 i32) + local.get 0 + local.get 1 + i32.const 3 + i32.or + i32.store offset=4) + (func $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h94ceb082391f899dE (type 2) (param i32 i32) + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17hde64410721cd558fE (type 5) (param i32 i32 i32) + local.get 2 + local.get 2 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17ha281c8f37de9cb65E (type 1) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.add) + (func $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h956a4e2adf3eefcbE (type 1) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.sub) + (func $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17h955b963a7a834301E (type 9) (param i32) (result i32) + local.get 0 + i32.const 8 + i32.add) + (func $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hee6c19b2ff028b5cE (type 9) (param i32) (result i32) + local.get 0 + i32.const -8 + i32.add) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17h48f2502fcdcfa0a2E (type 9) (param i32) (result i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.load offset=16 + local.tee 1 + br_if 0 (;@1;) + local.get 0 + i32.const 20 + i32.add + i32.load + local.set 1 + end + local.get 1) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h045726532a1e0c8dE (type 9) (param i32) (result i32) + local.get 0) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h115dce7333e5fc2cE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk4prev17h06d58a8550adfb36E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=8) + (func $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hcb93322195efbcceE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12 + i32.const 1 + i32.and) + (func $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hba09df10f4d19d6eE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12 + i32.const 1 + i32.shr_u) + (func $_ZN8dlmalloc8dlmalloc7Segment5holds17h07422241f50b6662E (type 1) (param i32 i32) (result i32) + (local i32 i32) + i32.const 0 + local.set 2 + block ;; label = @1 + local.get 0 + i32.load + local.tee 3 + local.get 1 + i32.gt_u + br_if 0 (;@1;) + local.get 3 + local.get 0 + i32.load offset=4 + i32.add + local.get 1 + i32.gt_u + local.set 2 + end + local.get 2) + (func $_ZN8dlmalloc8dlmalloc7Segment3top17h7ba4cb35b2ab78b3E (type 9) (param i32) (result i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + i32.add) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5alloc17heece4aba06c14827E (type 5) (param i32 i32 i32) + (local i32) + local.get 2 + i32.const 16 + i32.shr_u + memory.grow + local.set 3 + local.get 0 + i32.const 0 + i32.store offset=8 + local.get 0 + i32.const 0 + local.get 2 + i32.const -65536 + i32.and + local.get 3 + i32.const -1 + i32.eq + local.tee 2 + select + i32.store offset=4 + local.get 0 + i32.const 0 + local.get 3 + i32.const 16 + i32.shl + local.get 2 + select + i32.store) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5remap17h2ff00066846ea921E (type 11) (param i32 i32 i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9free_part17he0a6ef0c01b934cbE (type 7) (param i32 i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17hb5a074dd393cd90aE (type 3) (param i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hbadca9aef442623dE (type 1) (param i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9page_size17h2c29bf8b31566e63E (type 9) (param i32) (result i32) + i32.const 65536) + (func $_ZN5alloc5alloc18handle_alloc_error17h45a714900d29bef5E (type 2) (param i32 i32) + local.get 0 + local.get 1 + call $__rust_alloc_error_handler + unreachable) + (func $__rg_oom (type 2) (param i32 i32) + local.get 0 + local.get 1 + call $rust_oom + unreachable) + (func $_ZN5alloc7raw_vec17capacity_overflow17h56c8d20d9eefc93dE (type 12) + i32.const 1051296 + i32.const 17 + i32.const 1051316 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable) + (func $_ZN4core3ops8function6FnOnce9call_once17h66d552c917209568E (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + drop + loop (result i32) ;; label = @1 + br 0 (;@1;) + end) + (func $_ZN4core3ptr102drop_in_place$LT$$RF$core..iter..adapters..copied..Copied$LT$core..slice..iter..Iter$LT$u8$GT$$GT$$GT$17haa4e00c186f7b014E (type 0) (param i32)) + (func $_ZN4core9panicking18panic_bounds_check17h1d84519ec46ed48cE (type 5) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + local.get 1 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 28 + i32.add + i32.const 2 + i32.store + local.get 3 + i32.const 44 + i32.add + i32.const 14 + i32.store + local.get 3 + i64.const 2 + i64.store offset=12 align=4 + local.get 3 + i32.const 1051456 + i32.store offset=8 + local.get 3 + i32.const 14 + i32.store offset=36 + local.get 3 + local.get 3 + i32.const 32 + i32.add + i32.store offset=24 + local.get 3 + local.get 3 + i32.store offset=40 + local.get 3 + local.get 3 + i32.const 4 + i32.add + i32.store offset=32 + local.get 3 + i32.const 8 + i32.add + local.get 2 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE (type 5) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + local.get 1 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 28 + i32.add + i32.const 2 + i32.store + local.get 3 + i32.const 44 + i32.add + i32.const 14 + i32.store + local.get 3 + i64.const 2 + i64.store offset=12 align=4 + local.get 3 + i32.const 1051852 + i32.store offset=8 + local.get 3 + i32.const 14 + i32.store offset=36 + local.get 3 + local.get 3 + i32.const 32 + i32.add + i32.store offset=24 + local.get 3 + local.get 3 + i32.const 4 + i32.add + i32.store offset=40 + local.get 3 + local.get 3 + i32.store offset=32 + local.get 3 + i32.const 8 + i32.add + local.get 2 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core5slice5index24slice_end_index_len_fail17he00053322d4d7aa4E (type 5) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + local.get 1 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 28 + i32.add + i32.const 2 + i32.store + local.get 3 + i32.const 44 + i32.add + i32.const 14 + i32.store + local.get 3 + i64.const 2 + i64.store offset=12 align=4 + local.get 3 + i32.const 1051884 + i32.store offset=8 + local.get 3 + i32.const 14 + i32.store offset=36 + local.get 3 + local.get 3 + i32.const 32 + i32.add + i32.store offset=24 + local.get 3 + local.get 3 + i32.const 4 + i32.add + i32.store offset=40 + local.get 3 + local.get 3 + i32.store offset=32 + local.get 3 + i32.const 8 + i32.add + local.get 2 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core3fmt9Formatter3pad17h72ccc4219c1d09f0E (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + local.get 0 + i32.load offset=16 + local.set 3 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 0 + i32.load offset=8 + local.tee 4 + i32.const 1 + i32.eq + br_if 0 (;@4;) + local.get 3 + i32.const 1 + i32.eq + br_if 1 (;@3;) + local.get 0 + i32.load offset=24 + local.get 1 + local.get 2 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3) + local.set 3 + br 3 (;@1;) + end + local.get 3 + i32.const 1 + i32.ne + br_if 1 (;@2;) + end + local.get 1 + local.get 2 + i32.add + local.set 5 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 6 + br_if 0 (;@5;) + i32.const 0 + local.set 7 + local.get 1 + local.set 3 + br 1 (;@4;) + end + i32.const 0 + local.set 7 + local.get 1 + local.set 3 + loop ;; label = @5 + local.get 3 + local.tee 8 + local.get 5 + i32.eq + br_if 2 (;@3;) + local.get 8 + i32.const 1 + i32.add + local.set 3 + block ;; label = @6 + local.get 8 + i32.load8_s + local.tee 9 + i32.const -1 + i32.gt_s + br_if 0 (;@6;) + local.get 9 + i32.const 255 + i32.and + local.set 9 + block ;; label = @7 + block ;; label = @8 + local.get 3 + local.get 5 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 10 + local.get 5 + local.set 3 + br 1 (;@7;) + end + local.get 8 + i32.const 2 + i32.add + local.set 3 + local.get 8 + i32.load8_u offset=1 + i32.const 63 + i32.and + local.set 10 + end + local.get 9 + i32.const 224 + i32.lt_u + br_if 0 (;@6;) + block ;; label = @7 + block ;; label = @8 + local.get 3 + local.get 5 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 11 + local.get 5 + local.set 12 + br 1 (;@7;) + end + local.get 3 + i32.const 1 + i32.add + local.set 12 + local.get 3 + i32.load8_u + i32.const 63 + i32.and + local.set 11 + end + block ;; label = @7 + local.get 9 + i32.const 240 + i32.ge_u + br_if 0 (;@7;) + local.get 12 + local.set 3 + br 1 (;@6;) + end + block ;; label = @7 + block ;; label = @8 + local.get 12 + local.get 5 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 12 + local.get 5 + local.set 3 + br 1 (;@7;) + end + local.get 12 + i32.const 1 + i32.add + local.set 3 + local.get 12 + i32.load8_u + i32.const 63 + i32.and + local.set 12 + end + local.get 10 + i32.const 12 + i32.shl + local.get 9 + i32.const 18 + i32.shl + i32.const 1835008 + i32.and + i32.or + local.get 11 + i32.const 6 + i32.shl + i32.or + local.get 12 + i32.or + i32.const 1114112 + i32.eq + br_if 3 (;@3;) + end + local.get 7 + local.get 8 + i32.sub + local.get 3 + i32.add + local.set 7 + local.get 6 + i32.const -1 + i32.add + local.tee 6 + br_if 0 (;@5;) + end + end + local.get 3 + local.get 5 + i32.eq + br_if 0 (;@3;) + block ;; label = @4 + local.get 3 + i32.load8_s + local.tee 8 + i32.const -1 + i32.gt_s + br_if 0 (;@4;) + block ;; label = @5 + block ;; label = @6 + local.get 3 + i32.const 1 + i32.add + local.get 5 + i32.ne + br_if 0 (;@6;) + i32.const 0 + local.set 3 + local.get 5 + local.set 6 + br 1 (;@5;) + end + local.get 3 + i32.const 2 + i32.add + local.set 6 + local.get 3 + i32.load8_u offset=1 + i32.const 63 + i32.and + i32.const 6 + i32.shl + local.set 3 + end + local.get 8 + i32.const 255 + i32.and + i32.const 224 + i32.lt_u + br_if 0 (;@4;) + block ;; label = @5 + block ;; label = @6 + local.get 6 + local.get 5 + i32.ne + br_if 0 (;@6;) + i32.const 0 + local.set 6 + local.get 5 + local.set 9 + br 1 (;@5;) + end + local.get 6 + i32.const 1 + i32.add + local.set 9 + local.get 6 + i32.load8_u + i32.const 63 + i32.and + local.set 6 + end + local.get 8 + i32.const 255 + i32.and + i32.const 240 + i32.lt_u + br_if 0 (;@4;) + local.get 8 + i32.const 255 + i32.and + local.set 8 + local.get 6 + local.get 3 + i32.or + local.set 3 + block ;; label = @5 + block ;; label = @6 + local.get 9 + local.get 5 + i32.ne + br_if 0 (;@6;) + i32.const 0 + local.set 5 + br 1 (;@5;) + end + local.get 9 + i32.load8_u + i32.const 63 + i32.and + local.set 5 + end + local.get 3 + i32.const 6 + i32.shl + local.get 8 + i32.const 18 + i32.shl + i32.const 1835008 + i32.and + i32.or + local.get 5 + i32.or + i32.const 1114112 + i32.eq + br_if 1 (;@3;) + end + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 7 + br_if 0 (;@6;) + i32.const 0 + local.set 8 + br 1 (;@5;) + end + block ;; label = @6 + local.get 7 + local.get 2 + i32.lt_u + br_if 0 (;@6;) + i32.const 0 + local.set 3 + local.get 2 + local.set 8 + local.get 7 + local.get 2 + i32.eq + br_if 1 (;@5;) + br 2 (;@4;) + end + i32.const 0 + local.set 3 + local.get 7 + local.set 8 + local.get 1 + local.get 7 + i32.add + i32.load8_s + i32.const -64 + i32.lt_s + br_if 1 (;@4;) + end + local.get 8 + local.set 7 + local.get 1 + local.set 3 + end + local.get 7 + local.get 2 + local.get 3 + select + local.set 2 + local.get 3 + local.get 1 + local.get 3 + select + local.set 1 + end + local.get 4 + i32.const 1 + i32.eq + br_if 0 (;@2;) + local.get 0 + i32.load offset=24 + local.get 1 + local.get 2 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3) + return + end + local.get 0 + i32.const 12 + i32.add + i32.load + local.set 6 + block ;; label = @2 + block ;; label = @3 + local.get 2 + br_if 0 (;@3;) + i32.const 0 + local.set 8 + br 1 (;@2;) + end + local.get 2 + i32.const 3 + i32.and + local.set 7 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const -1 + i32.add + i32.const 3 + i32.ge_u + br_if 0 (;@4;) + i32.const 0 + local.set 8 + local.get 1 + local.set 3 + br 1 (;@3;) + end + i32.const 0 + local.set 8 + i32.const 0 + local.get 2 + i32.const -4 + i32.and + i32.sub + local.set 5 + local.get 1 + local.set 3 + loop ;; label = @4 + local.get 8 + local.get 3 + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 3 + i32.const 1 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 3 + i32.const 2 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 3 + i32.const 3 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.set 8 + local.get 3 + i32.const 4 + i32.add + local.set 3 + local.get 5 + i32.const 4 + i32.add + local.tee 5 + br_if 0 (;@4;) + end + end + local.get 7 + i32.eqz + br_if 0 (;@2;) + loop ;; label = @3 + local.get 8 + local.get 3 + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.set 8 + local.get 3 + i32.const 1 + i32.add + local.set 3 + local.get 7 + i32.const -1 + i32.add + local.tee 7 + br_if 0 (;@3;) + end + end + block ;; label = @2 + local.get 6 + local.get 8 + i32.le_u + br_if 0 (;@2;) + i32.const 0 + local.set 3 + local.get 6 + local.get 8 + i32.sub + local.tee 7 + local.set 6 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + local.get 0 + i32.load8_u offset=32 + local.tee 8 + local.get 8 + i32.const 3 + i32.eq + select + i32.const 3 + i32.and + br_table 2 (;@3;) 0 (;@5;) 1 (;@4;) 2 (;@3;) + end + i32.const 0 + local.set 6 + local.get 7 + local.set 3 + br 1 (;@3;) + end + local.get 7 + i32.const 1 + i32.shr_u + local.set 3 + local.get 7 + i32.const 1 + i32.add + i32.const 1 + i32.shr_u + local.set 6 + end + local.get 3 + i32.const 1 + i32.add + local.set 3 + local.get 0 + i32.const 28 + i32.add + i32.load + local.set 7 + local.get 0 + i32.load offset=4 + local.set 8 + local.get 0 + i32.load offset=24 + local.set 5 + block ;; label = @3 + loop ;; label = @4 + local.get 3 + i32.const -1 + i32.add + local.tee 3 + i32.eqz + br_if 1 (;@3;) + local.get 5 + local.get 8 + local.get 7 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@4;) + end + i32.const 1 + return + end + i32.const 1 + local.set 3 + local.get 8 + i32.const 1114112 + i32.eq + br_if 1 (;@1;) + local.get 5 + local.get 1 + local.get 2 + local.get 7 + i32.load offset=12 + call_indirect (type 3) + br_if 1 (;@1;) + i32.const 0 + local.set 3 + loop ;; label = @3 + block ;; label = @4 + local.get 6 + local.get 3 + i32.ne + br_if 0 (;@4;) + local.get 6 + local.get 6 + i32.lt_u + return + end + local.get 3 + i32.const 1 + i32.add + local.set 3 + local.get 5 + local.get 8 + local.get 7 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@3;) + end + local.get 3 + i32.const -1 + i32.add + local.get 6 + i32.lt_u + return + end + local.get 0 + i32.load offset=24 + local.get 1 + local.get 2 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3) + return + end + local.get 3) + (func $_ZN4core9panicking5panic17hceae0c79b0247f98E (type 5) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + i32.const 20 + i32.add + i32.const 0 + i32.store + local.get 3 + i32.const 1051332 + i32.store offset=16 + local.get 3 + i64.const 1 + i64.store offset=4 align=4 + local.get 3 + local.get 1 + i32.store offset=28 + local.get 3 + local.get 0 + i32.store offset=24 + local.get 3 + local.get 3 + i32.const 24 + i32.add + i32.store + local.get 3 + local.get 2 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core5slice5index22slice_index_order_fail17he388d03b2828b4ebE (type 5) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + local.get 1 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 28 + i32.add + i32.const 2 + i32.store + local.get 3 + i32.const 44 + i32.add + i32.const 14 + i32.store + local.get 3 + i64.const 2 + i64.store offset=12 align=4 + local.get 3 + i32.const 1051936 + i32.store offset=8 + local.get 3 + i32.const 14 + i32.store offset=36 + local.get 3 + local.get 3 + i32.const 32 + i32.add + i32.store offset=24 + local.get 3 + local.get 3 + i32.const 4 + i32.add + i32.store offset=40 + local.get 3 + local.get 3 + i32.store offset=32 + local.get 3 + i32.const 8 + i32.add + local.get 2 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$u32$GT$3fmt17h3df307cf9bb0f560E (type 1) (param i32 i32) (result i32) + local.get 0 + i64.load32_u + i32.const 1 + local.get 1 + call $_ZN4core3fmt3num3imp7fmt_u6417h4d8c26c3623cb98bE) + (func $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E (type 2) (param i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 1 + i32.store offset=12 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 2 + i32.const 1051388 + i32.store offset=4 + local.get 2 + i32.const 1051332 + i32.store + local.get 2 + call $rust_begin_unwind + unreachable) + (func $_ZN4core3fmt5write17hb363a5cc37db74afE (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + i32.const 36 + i32.add + local.get 1 + i32.store + local.get 3 + i32.const 3 + i32.store8 offset=40 + local.get 3 + i64.const 137438953472 + i64.store offset=8 + local.get 3 + local.get 0 + i32.store offset=32 + i32.const 0 + local.set 4 + local.get 3 + i32.const 0 + i32.store offset=24 + local.get 3 + i32.const 0 + i32.store offset=16 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.load offset=8 + local.tee 5 + br_if 0 (;@4;) + local.get 2 + i32.const 20 + i32.add + i32.load + local.tee 6 + i32.eqz + br_if 1 (;@3;) + local.get 2 + i32.load + local.set 1 + local.get 2 + i32.load offset=16 + local.set 0 + local.get 6 + i32.const 3 + i32.shl + i32.const -8 + i32.add + i32.const 3 + i32.shr_u + i32.const 1 + i32.add + local.tee 4 + local.set 6 + loop ;; label = @5 + block ;; label = @6 + local.get 1 + i32.const 4 + i32.add + i32.load + local.tee 7 + i32.eqz + br_if 0 (;@6;) + local.get 3 + i32.load offset=32 + local.get 1 + i32.load + local.get 7 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 3) + br_if 4 (;@2;) + end + local.get 0 + i32.load + local.get 3 + i32.const 8 + i32.add + local.get 0 + i32.const 4 + i32.add + i32.load + call_indirect (type 1) + br_if 3 (;@2;) + local.get 0 + i32.const 8 + i32.add + local.set 0 + local.get 1 + i32.const 8 + i32.add + local.set 1 + local.get 6 + i32.const -1 + i32.add + local.tee 6 + br_if 0 (;@5;) + br 2 (;@3;) + end + end + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@3;) + local.get 0 + i32.const 5 + i32.shl + local.tee 8 + i32.const -32 + i32.add + i32.const 5 + i32.shr_u + i32.const 1 + i32.add + local.set 4 + local.get 2 + i32.load + local.set 1 + i32.const 0 + local.set 6 + loop ;; label = @4 + block ;; label = @5 + local.get 1 + i32.const 4 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@5;) + local.get 3 + i32.load offset=32 + local.get 1 + i32.load + local.get 0 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 3) + br_if 3 (;@2;) + end + local.get 3 + local.get 5 + local.get 6 + i32.add + local.tee 0 + i32.const 28 + i32.add + i32.load8_u + i32.store8 offset=40 + local.get 3 + local.get 0 + i32.const 4 + i32.add + i64.load align=4 + i64.const 32 + i64.rotl + i64.store offset=8 + local.get 0 + i32.const 24 + i32.add + i32.load + local.set 9 + local.get 2 + i32.load offset=16 + local.set 10 + i32.const 0 + local.set 11 + i32.const 0 + local.set 7 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 0 + i32.const 20 + i32.add + i32.load + br_table 1 (;@6;) 0 (;@7;) 2 (;@5;) 1 (;@6;) + end + local.get 9 + i32.const 3 + i32.shl + local.set 12 + i32.const 0 + local.set 7 + local.get 10 + local.get 12 + i32.add + local.tee 12 + i32.load offset=4 + i32.const 37 + i32.ne + br_if 1 (;@5;) + local.get 12 + i32.load + i32.load + local.set 9 + end + i32.const 1 + local.set 7 + end + local.get 3 + local.get 9 + i32.store offset=20 + local.get 3 + local.get 7 + i32.store offset=16 + local.get 0 + i32.const 16 + i32.add + i32.load + local.set 7 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 0 + i32.const 12 + i32.add + i32.load + br_table 1 (;@6;) 0 (;@7;) 2 (;@5;) 1 (;@6;) + end + local.get 7 + i32.const 3 + i32.shl + local.set 9 + local.get 10 + local.get 9 + i32.add + local.tee 9 + i32.load offset=4 + i32.const 37 + i32.ne + br_if 1 (;@5;) + local.get 9 + i32.load + i32.load + local.set 7 + end + i32.const 1 + local.set 11 + end + local.get 3 + local.get 7 + i32.store offset=28 + local.get 3 + local.get 11 + i32.store offset=24 + local.get 10 + local.get 0 + i32.load + i32.const 3 + i32.shl + i32.add + local.tee 0 + i32.load + local.get 3 + i32.const 8 + i32.add + local.get 0 + i32.load offset=4 + call_indirect (type 1) + br_if 2 (;@2;) + local.get 1 + i32.const 8 + i32.add + local.set 1 + local.get 8 + local.get 6 + i32.const 32 + i32.add + local.tee 6 + i32.ne + br_if 0 (;@4;) + end + end + i32.const 0 + local.set 0 + local.get 4 + local.get 2 + i32.load offset=4 + i32.lt_u + local.tee 1 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=32 + local.get 2 + i32.load + local.get 4 + i32.const 3 + i32.shl + i32.add + i32.const 0 + local.get 1 + select + local.tee 1 + i32.load + local.get 1 + i32.load offset=4 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 3) + i32.eqz + br_if 1 (;@1;) + end + i32.const 1 + local.set 0 + end + local.get 3 + i32.const 48 + i32.add + global.set $__stack_pointer + local.get 0) + (func $_ZN71_$LT$core..ops..range..Range$LT$Idx$GT$$u20$as$u20$core..fmt..Debug$GT$3fmt17h0acba3bf85e29330E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + i32.const 1 + local.set 3 + block ;; label = @1 + local.get 0 + local.get 1 + call $_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Debug$u20$for$u20$usize$GT$3fmt17h5109d00c3a19a277E + br_if 0 (;@1;) + local.get 1 + i32.const 28 + i32.add + i32.load + local.set 4 + local.get 1 + i32.load offset=24 + local.set 5 + local.get 2 + i32.const 28 + i32.add + i32.const 0 + i32.store + local.get 2 + i32.const 1051332 + i32.store offset=24 + local.get 2 + i64.const 1 + i64.store offset=12 align=4 + local.get 2 + i32.const 1051336 + i32.store offset=8 + local.get 5 + local.get 4 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + local.get 1 + call $_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Debug$u20$for$u20$usize$GT$3fmt17h5109d00c3a19a277E + local.set 3 + end + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 3) + (func $_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..Debug$u20$for$u20$usize$GT$3fmt17h5109d00c3a19a277E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 128 + i32.sub + local.tee 2 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 1 + i32.load + local.tee 3 + i32.const 16 + i32.and + br_if 0 (;@5;) + local.get 3 + i32.const 32 + i32.and + br_if 1 (;@4;) + local.get 0 + i64.load32_u + i32.const 1 + local.get 1 + call $_ZN4core3fmt3num3imp7fmt_u6417h4d8c26c3623cb98bE + local.set 0 + br 4 (;@1;) + end + local.get 0 + i32.load + local.set 0 + i32.const 0 + local.set 3 + loop ;; label = @5 + local.get 2 + local.get 3 + i32.add + i32.const 127 + i32.add + i32.const 48 + i32.const 87 + local.get 0 + i32.const 15 + i32.and + local.tee 4 + i32.const 10 + i32.lt_u + select + local.get 4 + i32.add + i32.store8 + local.get 3 + i32.const -1 + i32.add + local.set 3 + local.get 0 + i32.const 15 + i32.gt_u + local.set 4 + local.get 0 + i32.const 4 + i32.shr_u + local.set 0 + local.get 4 + br_if 0 (;@5;) + end + local.get 3 + i32.const 128 + i32.add + local.tee 0 + i32.const 129 + i32.ge_u + br_if 1 (;@3;) + local.get 1 + i32.const 1 + i32.const 1051536 + i32.const 2 + local.get 2 + local.get 3 + i32.add + i32.const 128 + i32.add + i32.const 0 + local.get 3 + i32.sub + call $_ZN4core3fmt9Formatter12pad_integral17h8c76600d11a2c4b1E + local.set 0 + br 3 (;@1;) + end + local.get 0 + i32.load + local.set 0 + i32.const 0 + local.set 3 + loop ;; label = @4 + local.get 2 + local.get 3 + i32.add + i32.const 127 + i32.add + i32.const 48 + i32.const 55 + local.get 0 + i32.const 15 + i32.and + local.tee 4 + i32.const 10 + i32.lt_u + select + local.get 4 + i32.add + i32.store8 + local.get 3 + i32.const -1 + i32.add + local.set 3 + local.get 0 + i32.const 15 + i32.gt_u + local.set 4 + local.get 0 + i32.const 4 + i32.shr_u + local.set 0 + local.get 4 + br_if 0 (;@4;) + end + local.get 3 + i32.const 128 + i32.add + local.tee 0 + i32.const 129 + i32.ge_u + br_if 1 (;@2;) + local.get 1 + i32.const 1 + i32.const 1051536 + i32.const 2 + local.get 2 + local.get 3 + i32.add + i32.const 128 + i32.add + i32.const 0 + local.get 3 + i32.sub + call $_ZN4core3fmt9Formatter12pad_integral17h8c76600d11a2c4b1E + local.set 0 + br 2 (;@1;) + end + local.get 0 + i32.const 128 + i32.const 1051520 + call $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE + unreachable + end + local.get 0 + i32.const 128 + i32.const 1051520 + call $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE + unreachable + end + local.get 2 + i32.const 128 + i32.add + global.set $__stack_pointer + local.get 0) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17h509a82f298b121bcE (type 8) (param i32) (result i64) + i64.const -8369601888463335144) + (func $_ZN44_$LT$$RF$T$u20$as$u20$core..fmt..Display$GT$3fmt17ha820d3379de3c823E (type 1) (param i32 i32) (result i32) + local.get 1 + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + call $_ZN4core3fmt9Formatter3pad17h72ccc4219c1d09f0E) + (func $_ZN4core5panic10panic_info9PanicInfo7message17h36702d3d004a6deeE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=8) + (func $_ZN4core5panic10panic_info9PanicInfo8location17h6f567dfbe8cd82afE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12) + (func $_ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17he0fb0ec556a6ab4aE (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + local.get 1 + local.get 0 + i32.load offset=4 + i32.load offset=12 + call_indirect (type 1)) + (func $_ZN4core6result13unwrap_failed17h694db13a45aa6740E (type 13) (param i32 i32 i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 64 + i32.sub + local.tee 5 + global.set $__stack_pointer + local.get 5 + local.get 1 + i32.store offset=12 + local.get 5 + local.get 0 + i32.store offset=8 + local.get 5 + local.get 3 + i32.store offset=20 + local.get 5 + local.get 2 + i32.store offset=16 + local.get 5 + i32.const 44 + i32.add + i32.const 2 + i32.store + local.get 5 + i32.const 60 + i32.add + i32.const 38 + i32.store + local.get 5 + i64.const 2 + i64.store offset=28 align=4 + local.get 5 + i32.const 1051476 + i32.store offset=24 + local.get 5 + i32.const 39 + i32.store offset=52 + local.get 5 + local.get 5 + i32.const 48 + i32.add + i32.store offset=40 + local.get 5 + local.get 5 + i32.const 16 + i32.add + i32.store offset=56 + local.get 5 + local.get 5 + i32.const 8 + i32.add + i32.store offset=48 + local.get 5 + i32.const 24 + i32.add + local.get 4 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable) + (func $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E (type 13) (param i32 i32 i32 i32 i32) + (local i32 i32 i32 i32 i32) + global.get $__stack_pointer + i32.const 112 + i32.sub + local.tee 5 + global.set $__stack_pointer + local.get 5 + local.get 3 + i32.store offset=12 + local.get 5 + local.get 2 + i32.store offset=8 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 1 + i32.const 257 + i32.lt_u + br_if 0 (;@7;) + i32.const 0 + local.set 6 + loop ;; label = @8 + block ;; label = @9 + local.get 0 + local.get 6 + i32.add + local.tee 7 + i32.const 256 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 0 (;@9;) + local.get 6 + i32.const 256 + i32.add + local.set 7 + br 5 (;@4;) + end + block ;; label = @9 + local.get 7 + i32.const 255 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 0 (;@9;) + local.get 6 + i32.const 255 + i32.add + local.set 7 + br 5 (;@4;) + end + local.get 7 + i32.const 254 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + br_if 3 (;@5;) + local.get 7 + i32.const 253 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + br_if 2 (;@6;) + local.get 6 + i32.const -4 + i32.add + local.tee 6 + i32.const -256 + i32.ne + br_if 0 (;@8;) + end + i32.const 0 + local.set 6 + br 4 (;@3;) + end + local.get 5 + local.get 1 + i32.store offset=20 + local.get 5 + local.get 0 + i32.store offset=16 + local.get 5 + i32.const 1051332 + i32.store offset=24 + i32.const 0 + local.set 7 + br 4 (;@2;) + end + local.get 6 + i32.const 253 + i32.add + local.set 7 + br 1 (;@4;) + end + local.get 6 + i32.const 254 + i32.add + local.set 7 + end + block ;; label = @4 + local.get 7 + local.get 1 + i32.lt_u + br_if 0 (;@4;) + local.get 1 + local.set 6 + local.get 7 + local.get 1 + i32.eq + br_if 1 (;@3;) + br 3 (;@1;) + end + local.get 0 + local.get 7 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 2 (;@1;) + local.get 7 + local.set 6 + end + local.get 5 + local.get 6 + i32.store offset=20 + local.get 5 + local.get 0 + i32.store offset=16 + local.get 5 + i32.const 1052004 + i32.store offset=24 + i32.const 5 + local.set 7 + end + local.get 5 + local.get 7 + i32.store offset=28 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + local.get 2 + local.get 1 + i32.gt_u + local.tee 7 + br_if 0 (;@8;) + local.get 3 + local.get 1 + i32.gt_u + br_if 0 (;@8;) + local.get 2 + local.get 3 + i32.gt_u + br_if 1 (;@7;) + local.get 2 + i32.eqz + br_if 2 (;@6;) + block ;; label = @9 + block ;; label = @10 + local.get 2 + local.get 1 + i32.lt_u + br_if 0 (;@10;) + local.get 1 + local.get 2 + i32.ne + br_if 1 (;@9;) + br 4 (;@6;) + end + local.get 0 + local.get 2 + i32.add + i32.load8_s + i32.const -65 + i32.gt_s + br_if 3 (;@6;) + end + local.get 5 + local.get 2 + i32.store offset=32 + local.get 2 + local.set 3 + br 3 (;@5;) + end + local.get 5 + local.get 2 + local.get 3 + local.get 7 + select + i32.store offset=40 + local.get 5 + i32.const 48 + i32.add + i32.const 20 + i32.add + i32.const 3 + i32.store + local.get 5 + i32.const 72 + i32.add + i32.const 20 + i32.add + i32.const 39 + i32.store + local.get 5 + i32.const 84 + i32.add + i32.const 39 + i32.store + local.get 5 + i64.const 3 + i64.store offset=52 align=4 + local.get 5 + i32.const 1052044 + i32.store offset=48 + local.get 5 + i32.const 14 + i32.store offset=76 + local.get 5 + local.get 5 + i32.const 72 + i32.add + i32.store offset=64 + local.get 5 + local.get 5 + i32.const 24 + i32.add + i32.store offset=88 + local.get 5 + local.get 5 + i32.const 16 + i32.add + i32.store offset=80 + local.get 5 + local.get 5 + i32.const 40 + i32.add + i32.store offset=72 + local.get 5 + i32.const 48 + i32.add + local.get 4 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable + end + local.get 5 + i32.const 100 + i32.add + i32.const 39 + i32.store + local.get 5 + i32.const 72 + i32.add + i32.const 20 + i32.add + i32.const 39 + i32.store + local.get 5 + i32.const 84 + i32.add + i32.const 14 + i32.store + local.get 5 + i32.const 48 + i32.add + i32.const 20 + i32.add + i32.const 4 + i32.store + local.get 5 + i64.const 4 + i64.store offset=52 align=4 + local.get 5 + i32.const 1052104 + i32.store offset=48 + local.get 5 + i32.const 14 + i32.store offset=76 + local.get 5 + local.get 5 + i32.const 72 + i32.add + i32.store offset=64 + local.get 5 + local.get 5 + i32.const 24 + i32.add + i32.store offset=96 + local.get 5 + local.get 5 + i32.const 16 + i32.add + i32.store offset=88 + local.get 5 + local.get 5 + i32.const 12 + i32.add + i32.store offset=80 + local.get 5 + local.get 5 + i32.const 8 + i32.add + i32.store offset=72 + local.get 5 + i32.const 48 + i32.add + local.get 4 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable + end + local.get 5 + local.get 3 + i32.store offset=32 + local.get 3 + i32.eqz + br_if 1 (;@4;) + end + loop ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 3 + local.get 1 + i32.lt_u + local.tee 7 + br_if 0 (;@7;) + local.get 1 + local.get 3 + i32.eq + br_if 5 (;@2;) + br 1 (;@6;) + end + local.get 0 + local.get 3 + i32.add + local.tee 6 + i32.load8_s + i32.const -64 + i32.lt_s + br_if 0 (;@6;) + block ;; label = @7 + block ;; label = @8 + local.get 7 + br_if 0 (;@8;) + local.get 1 + local.get 3 + i32.ne + br_if 1 (;@7;) + br 6 (;@2;) + end + local.get 6 + i32.load8_s + i32.const -65 + i32.gt_s + br_if 4 (;@3;) + end + local.get 0 + local.get 1 + local.get 3 + local.get 1 + local.get 4 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable + end + local.get 3 + i32.const -1 + i32.add + local.tee 3 + br_if 0 (;@5;) + end + end + i32.const 0 + local.set 3 + end + local.get 3 + local.get 1 + i32.eq + br_if 0 (;@2;) + i32.const 1 + local.set 6 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 0 + local.get 3 + i32.add + local.tee 2 + i32.load8_s + local.tee 7 + i32.const -1 + i32.gt_s + br_if 0 (;@6;) + i32.const 0 + local.set 8 + local.get 0 + local.get 1 + i32.add + local.tee 6 + local.set 0 + block ;; label = @7 + local.get 2 + i32.const 1 + i32.add + local.get 6 + i32.eq + br_if 0 (;@7;) + local.get 2 + i32.const 2 + i32.add + local.set 0 + local.get 2 + i32.load8_u offset=1 + i32.const 63 + i32.and + local.set 8 + end + local.get 7 + i32.const 31 + i32.and + local.set 1 + local.get 7 + i32.const 255 + i32.and + i32.const 223 + i32.gt_u + br_if 1 (;@5;) + local.get 8 + local.get 1 + i32.const 6 + i32.shl + i32.or + local.set 7 + br 2 (;@4;) + end + local.get 5 + local.get 7 + i32.const 255 + i32.and + i32.store offset=36 + br 2 (;@3;) + end + i32.const 0 + local.set 2 + local.get 6 + local.set 9 + block ;; label = @5 + local.get 0 + local.get 6 + i32.eq + br_if 0 (;@5;) + local.get 0 + i32.const 1 + i32.add + local.set 9 + local.get 0 + i32.load8_u + i32.const 63 + i32.and + local.set 2 + end + local.get 2 + local.get 8 + i32.const 6 + i32.shl + i32.or + local.set 0 + block ;; label = @5 + local.get 7 + i32.const 255 + i32.and + i32.const 240 + i32.ge_u + br_if 0 (;@5;) + local.get 0 + local.get 1 + i32.const 12 + i32.shl + i32.or + local.set 7 + br 1 (;@4;) + end + i32.const 0 + local.set 7 + block ;; label = @5 + local.get 9 + local.get 6 + i32.eq + br_if 0 (;@5;) + local.get 9 + i32.load8_u + i32.const 63 + i32.and + local.set 7 + end + local.get 0 + i32.const 6 + i32.shl + local.get 1 + i32.const 18 + i32.shl + i32.const 1835008 + i32.and + i32.or + local.get 7 + i32.or + local.tee 7 + i32.const 1114112 + i32.eq + br_if 2 (;@2;) + end + local.get 5 + local.get 7 + i32.store offset=36 + i32.const 1 + local.set 6 + local.get 7 + i32.const 128 + i32.lt_u + br_if 0 (;@3;) + i32.const 2 + local.set 6 + local.get 7 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + i32.const 3 + i32.const 4 + local.get 7 + i32.const 65536 + i32.lt_u + select + local.set 6 + end + local.get 5 + local.get 3 + i32.store offset=40 + local.get 5 + local.get 6 + local.get 3 + i32.add + i32.store offset=44 + local.get 5 + i32.const 48 + i32.add + i32.const 20 + i32.add + i32.const 5 + i32.store + local.get 5 + i32.const 108 + i32.add + i32.const 39 + i32.store + local.get 5 + i32.const 100 + i32.add + i32.const 39 + i32.store + local.get 5 + i32.const 72 + i32.add + i32.const 20 + i32.add + i32.const 40 + i32.store + local.get 5 + i32.const 84 + i32.add + i32.const 41 + i32.store + local.get 5 + i64.const 5 + i64.store offset=52 align=4 + local.get 5 + i32.const 1052188 + i32.store offset=48 + local.get 5 + i32.const 14 + i32.store offset=76 + local.get 5 + local.get 5 + i32.const 72 + i32.add + i32.store offset=64 + local.get 5 + local.get 5 + i32.const 24 + i32.add + i32.store offset=104 + local.get 5 + local.get 5 + i32.const 16 + i32.add + i32.store offset=96 + local.get 5 + local.get 5 + i32.const 40 + i32.add + i32.store offset=88 + local.get 5 + local.get 5 + i32.const 36 + i32.add + i32.store offset=80 + local.get 5 + local.get 5 + i32.const 32 + i32.add + i32.store offset=72 + local.get 5 + i32.const 48 + i32.add + local.get 4 + call $_ZN4core9panicking9panic_fmt17hf69c8b08bc9d2ee5E + unreachable + end + i32.const 1051344 + i32.const 43 + local.get 4 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable + end + local.get 0 + local.get 1 + i32.const 0 + local.get 7 + i32.const 1051988 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable) + (func $_ZN4core3fmt9Formatter12pad_integral17h8c76600d11a2c4b1E (type 14) (param i32 i32 i32 i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.eqz + br_if 0 (;@2;) + i32.const 43 + i32.const 1114112 + local.get 0 + i32.load + local.tee 6 + i32.const 1 + i32.and + local.tee 1 + select + local.set 7 + local.get 1 + local.get 5 + i32.add + local.set 8 + br 1 (;@1;) + end + local.get 5 + i32.const 1 + i32.add + local.set 8 + local.get 0 + i32.load + local.set 6 + i32.const 45 + local.set 7 + end + block ;; label = @1 + block ;; label = @2 + local.get 6 + i32.const 4 + i32.and + br_if 0 (;@2;) + i32.const 0 + local.set 2 + br 1 (;@1;) + end + block ;; label = @2 + block ;; label = @3 + local.get 3 + br_if 0 (;@3;) + i32.const 0 + local.set 9 + br 1 (;@2;) + end + local.get 3 + i32.const 3 + i32.and + local.set 10 + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const -1 + i32.add + i32.const 3 + i32.ge_u + br_if 0 (;@4;) + i32.const 0 + local.set 9 + local.get 2 + local.set 1 + br 1 (;@3;) + end + i32.const 0 + local.set 9 + i32.const 0 + local.get 3 + i32.const -4 + i32.and + i32.sub + local.set 11 + local.get 2 + local.set 1 + loop ;; label = @4 + local.get 9 + local.get 1 + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 1 + i32.const 1 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 1 + i32.const 2 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.get 1 + i32.const 3 + i32.add + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.set 9 + local.get 1 + i32.const 4 + i32.add + local.set 1 + local.get 11 + i32.const 4 + i32.add + local.tee 11 + br_if 0 (;@4;) + end + end + local.get 10 + i32.eqz + br_if 0 (;@2;) + loop ;; label = @3 + local.get 9 + local.get 1 + i32.load8_u + i32.const 192 + i32.and + i32.const 128 + i32.ne + i32.add + local.set 9 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 10 + i32.const -1 + i32.add + local.tee 10 + br_if 0 (;@3;) + end + end + local.get 9 + local.get 8 + i32.add + local.set 8 + end + i32.const 1 + local.set 1 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.load offset=8 + i32.const 1 + i32.eq + br_if 0 (;@2;) + local.get 0 + local.get 7 + local.get 2 + local.get 3 + call $_ZN4core3fmt9Formatter12pad_integral12write_prefix17h585c4f72e1d84c1aE + br_if 1 (;@1;) + local.get 0 + i32.load offset=24 + local.get 4 + local.get 5 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3) + return + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 9 + local.get 8 + i32.le_u + br_if 0 (;@6;) + local.get 6 + i32.const 8 + i32.and + br_if 4 (;@2;) + i32.const 0 + local.set 1 + local.get 9 + local.get 8 + i32.sub + local.tee 10 + local.set 8 + i32.const 1 + local.get 0 + i32.load8_u offset=32 + local.tee 9 + local.get 9 + i32.const 3 + i32.eq + select + i32.const 3 + i32.and + br_table 3 (;@3;) 1 (;@5;) 2 (;@4;) 3 (;@3;) + end + local.get 0 + local.get 7 + local.get 2 + local.get 3 + call $_ZN4core3fmt9Formatter12pad_integral12write_prefix17h585c4f72e1d84c1aE + br_if 4 (;@1;) + local.get 0 + i32.load offset=24 + local.get 4 + local.get 5 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3) + return + end + i32.const 0 + local.set 8 + local.get 10 + local.set 1 + br 1 (;@3;) + end + local.get 10 + i32.const 1 + i32.shr_u + local.set 1 + local.get 10 + i32.const 1 + i32.add + i32.const 1 + i32.shr_u + local.set 8 + end + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 0 + i32.const 28 + i32.add + i32.load + local.set 10 + local.get 0 + i32.load offset=4 + local.set 9 + local.get 0 + i32.load offset=24 + local.set 11 + block ;; label = @3 + loop ;; label = @4 + local.get 1 + i32.const -1 + i32.add + local.tee 1 + i32.eqz + br_if 1 (;@3;) + local.get 11 + local.get 9 + local.get 10 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@4;) + end + i32.const 1 + return + end + i32.const 1 + local.set 1 + local.get 9 + i32.const 1114112 + i32.eq + br_if 1 (;@1;) + local.get 0 + local.get 7 + local.get 2 + local.get 3 + call $_ZN4core3fmt9Formatter12pad_integral12write_prefix17h585c4f72e1d84c1aE + br_if 1 (;@1;) + local.get 0 + i32.load offset=24 + local.get 4 + local.get 5 + local.get 0 + i32.load offset=28 + i32.load offset=12 + call_indirect (type 3) + br_if 1 (;@1;) + local.get 0 + i32.load offset=28 + local.set 10 + local.get 0 + i32.load offset=24 + local.set 11 + i32.const 0 + local.set 1 + block ;; label = @3 + loop ;; label = @4 + block ;; label = @5 + local.get 8 + local.get 1 + i32.ne + br_if 0 (;@5;) + local.get 8 + local.set 1 + br 2 (;@3;) + end + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 11 + local.get 9 + local.get 10 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@4;) + end + local.get 1 + i32.const -1 + i32.add + local.set 1 + end + local.get 1 + local.get 8 + i32.lt_u + local.set 1 + br 1 (;@1;) + end + local.get 0 + i32.load offset=4 + local.set 6 + local.get 0 + i32.const 48 + i32.store offset=4 + local.get 0 + i32.load8_u offset=32 + local.set 12 + i32.const 1 + local.set 1 + local.get 0 + i32.const 1 + i32.store8 offset=32 + local.get 0 + local.get 7 + local.get 2 + local.get 3 + call $_ZN4core3fmt9Formatter12pad_integral12write_prefix17h585c4f72e1d84c1aE + br_if 0 (;@1;) + i32.const 0 + local.set 1 + local.get 9 + local.get 8 + i32.sub + local.tee 10 + local.set 3 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + i32.const 1 + local.get 0 + i32.load8_u offset=32 + local.tee 9 + local.get 9 + i32.const 3 + i32.eq + select + i32.const 3 + i32.and + br_table 2 (;@2;) 0 (;@4;) 1 (;@3;) 2 (;@2;) + end + i32.const 0 + local.set 3 + local.get 10 + local.set 1 + br 1 (;@2;) + end + local.get 10 + i32.const 1 + i32.shr_u + local.set 1 + local.get 10 + i32.const 1 + i32.add + i32.const 1 + i32.shr_u + local.set 3 + end + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 0 + i32.const 28 + i32.add + i32.load + local.set 10 + local.get 0 + i32.load offset=4 + local.set 9 + local.get 0 + i32.load offset=24 + local.set 11 + block ;; label = @2 + loop ;; label = @3 + local.get 1 + i32.const -1 + i32.add + local.tee 1 + i32.eqz + br_if 1 (;@2;) + local.get 11 + local.get 9 + local.get 10 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@3;) + end + i32.const 1 + return + end + i32.const 1 + local.set 1 + local.get 9 + i32.const 1114112 + i32.eq + br_if 0 (;@1;) + local.get 0 + i32.load offset=24 + local.get 4 + local.get 5 + local.get 0 + i32.load offset=28 + i32.load offset=12 + call_indirect (type 3) + br_if 0 (;@1;) + local.get 0 + i32.load offset=28 + local.set 1 + local.get 0 + i32.load offset=24 + local.set 11 + i32.const 0 + local.set 10 + block ;; label = @2 + loop ;; label = @3 + local.get 3 + local.get 10 + i32.eq + br_if 1 (;@2;) + local.get 10 + i32.const 1 + i32.add + local.set 10 + local.get 11 + local.get 9 + local.get 1 + i32.load offset=16 + call_indirect (type 1) + i32.eqz + br_if 0 (;@3;) + end + i32.const 1 + local.set 1 + local.get 10 + i32.const -1 + i32.add + local.get 3 + i32.lt_u + br_if 1 (;@1;) + end + local.get 0 + local.get 12 + i32.store8 offset=32 + local.get 0 + local.get 6 + i32.store offset=4 + i32.const 0 + return + end + local.get 1) + (func $_ZN4core3fmt9Formatter3new17habe79b232356982dE (type 5) (param i32 i32 i32) + local.get 0 + i32.const 3 + i32.store8 offset=32 + local.get 0 + i64.const 137438953472 + i64.store align=4 + local.get 0 + local.get 1 + i32.store offset=24 + local.get 0 + i32.const 0 + i32.store offset=16 + local.get 0 + i32.const 0 + i32.store offset=8 + local.get 0 + i32.const 28 + i32.add + local.get 2 + i32.store) + (func $_ZN4core3fmt9Formatter12pad_integral12write_prefix17h585c4f72e1d84c1aE (type 7) (param i32 i32 i32 i32) (result i32) + (local i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 1114112 + i32.eq + br_if 0 (;@3;) + i32.const 1 + local.set 4 + local.get 0 + i32.load offset=24 + local.get 1 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=16 + call_indirect (type 1) + br_if 1 (;@2;) + end + local.get 2 + br_if 1 (;@1;) + i32.const 0 + local.set 4 + end + local.get 4 + return + end + local.get 0 + i32.load offset=24 + local.get 2 + local.get 3 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3)) + (func $_ZN4core3fmt9Formatter9write_str17h8d1fd395c47aef26E (type 3) (param i32 i32 i32) (result i32) + local.get 0 + i32.load offset=24 + local.get 1 + local.get 2 + local.get 0 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3)) + (func $_ZN4core3fmt9Formatter9write_fmt17h17510bd5fa687d11E (type 1) (param i32 i32) (result i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.const 28 + i32.add + i32.load + local.set 3 + local.get 0 + i32.load offset=24 + local.set 0 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 0 + local.get 3 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hb363a5cc37db74afE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN40_$LT$str$u20$as$u20$core..fmt..Debug$GT$3fmt17hc53e3be06b94b8dbE (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i64) + i32.const 1 + local.set 3 + block ;; label = @1 + block ;; label = @2 + local.get 2 + i32.load offset=24 + local.tee 4 + i32.const 34 + local.get 2 + i32.const 28 + i32.add + i32.load + local.tee 5 + i32.load offset=16 + local.tee 6 + call_indirect (type 1) + br_if 0 (;@2;) + block ;; label = @3 + block ;; label = @4 + local.get 1 + br_if 0 (;@4;) + i32.const 0 + local.set 7 + br 1 (;@3;) + end + local.get 0 + local.get 1 + i32.add + local.set 8 + i32.const 0 + local.set 7 + local.get 0 + local.set 9 + local.get 0 + local.set 10 + i32.const 0 + local.set 11 + block ;; label = @4 + loop ;; label = @5 + local.get 10 + i32.const 1 + i32.add + local.set 12 + block ;; label = @6 + block ;; label = @7 + local.get 10 + i32.load8_s + local.tee 2 + i32.const -1 + i32.le_s + br_if 0 (;@7;) + local.get 2 + i32.const 255 + i32.and + local.set 13 + local.get 12 + local.set 10 + br 1 (;@6;) + end + block ;; label = @7 + block ;; label = @8 + local.get 12 + local.get 8 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 3 + local.get 8 + local.set 12 + br 1 (;@7;) + end + local.get 10 + i32.const 2 + i32.add + local.set 12 + local.get 10 + i32.load8_u offset=1 + i32.const 63 + i32.and + local.set 3 + end + local.get 2 + i32.const 31 + i32.and + local.set 14 + block ;; label = @7 + local.get 2 + i32.const 255 + i32.and + local.tee 2 + i32.const 223 + i32.gt_u + br_if 0 (;@7;) + local.get 3 + local.get 14 + i32.const 6 + i32.shl + i32.or + local.set 13 + local.get 12 + local.set 10 + br 1 (;@6;) + end + block ;; label = @7 + block ;; label = @8 + local.get 12 + local.get 8 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 12 + local.get 8 + local.set 10 + br 1 (;@7;) + end + local.get 12 + i32.const 1 + i32.add + local.set 10 + local.get 12 + i32.load8_u + i32.const 63 + i32.and + local.set 12 + end + local.get 12 + local.get 3 + i32.const 6 + i32.shl + i32.or + local.set 12 + block ;; label = @7 + local.get 2 + i32.const 240 + i32.ge_u + br_if 0 (;@7;) + local.get 12 + local.get 14 + i32.const 12 + i32.shl + i32.or + local.set 13 + br 1 (;@6;) + end + block ;; label = @7 + block ;; label = @8 + local.get 10 + local.get 8 + i32.ne + br_if 0 (;@8;) + i32.const 0 + local.set 2 + local.get 8 + local.set 10 + br 1 (;@7;) + end + local.get 10 + i32.load8_u + i32.const 63 + i32.and + local.set 2 + local.get 10 + i32.const 1 + i32.add + local.set 10 + end + local.get 12 + i32.const 6 + i32.shl + local.get 14 + i32.const 18 + i32.shl + i32.const 1835008 + i32.and + i32.or + local.get 2 + i32.or + local.tee 13 + i32.const 1114112 + i32.eq + br_if 2 (;@4;) + end + i32.const 116 + local.set 14 + i32.const 2 + local.set 2 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + block ;; label = @14 + local.get 13 + i32.const -9 + i32.add + br_table 6 (;@8;) 3 (;@11;) 1 (;@13;) 1 (;@13;) 2 (;@12;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 1 (;@13;) 4 (;@10;) 0 (;@14;) + end + local.get 13 + i32.const 92 + i32.eq + br_if 3 (;@10;) + end + block ;; label = @13 + local.get 13 + call $_ZN4core7unicode12unicode_data15grapheme_extend6lookup17hd0ff6a60cca6cd88E + br_if 0 (;@13;) + local.get 13 + call $_ZN4core7unicode9printable12is_printable17he5bf65b33214db13E + br_if 6 (;@7;) + end + local.get 13 + i32.const 1 + i32.or + i32.clz + i32.const 2 + i32.shr_u + i32.const 7 + i32.xor + i64.extend_i32_u + i64.const 21474836480 + i64.or + local.set 15 + i32.const 3 + local.set 2 + local.get 13 + local.set 14 + br 4 (;@8;) + end + i32.const 114 + local.set 14 + br 2 (;@9;) + end + i32.const 110 + local.set 14 + br 1 (;@9;) + end + local.get 13 + local.set 14 + end + end + local.get 11 + local.get 7 + i32.lt_u + br_if 1 (;@6;) + block ;; label = @8 + local.get 7 + i32.eqz + br_if 0 (;@8;) + block ;; label = @9 + local.get 7 + local.get 1 + i32.lt_u + br_if 0 (;@9;) + local.get 7 + local.get 1 + i32.eq + br_if 1 (;@8;) + br 3 (;@6;) + end + local.get 0 + local.get 7 + i32.add + i32.load8_s + i32.const -64 + i32.lt_s + br_if 2 (;@6;) + end + block ;; label = @8 + local.get 11 + i32.eqz + br_if 0 (;@8;) + block ;; label = @9 + local.get 11 + local.get 1 + i32.lt_u + br_if 0 (;@9;) + local.get 11 + local.get 1 + i32.ne + br_if 3 (;@6;) + br 1 (;@8;) + end + local.get 0 + local.get 11 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 2 (;@6;) + end + block ;; label = @8 + local.get 4 + local.get 0 + local.get 7 + i32.add + local.get 11 + local.get 7 + i32.sub + local.get 5 + i32.load offset=12 + call_indirect (type 3) + i32.eqz + br_if 0 (;@8;) + i32.const 1 + return + end + loop ;; label = @8 + local.get 2 + local.set 12 + i32.const 1 + local.set 3 + i32.const 92 + local.set 7 + i32.const 1 + local.set 2 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + block ;; label = @14 + local.get 12 + br_table 2 (;@12;) 1 (;@13;) 5 (;@9;) 0 (;@14;) 2 (;@12;) + end + block ;; label = @14 + block ;; label = @15 + block ;; label = @16 + block ;; label = @17 + local.get 15 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const 255 + i32.and + br_table 5 (;@12;) 6 (;@11;) 3 (;@14;) 0 (;@17;) 1 (;@16;) 2 (;@15;) 5 (;@12;) + end + local.get 15 + i64.const -1095216660481 + i64.and + i64.const 8589934592 + i64.or + local.set 15 + i32.const 3 + local.set 2 + i32.const 123 + local.set 7 + br 7 (;@9;) + end + local.get 15 + i64.const -1095216660481 + i64.and + i64.const 12884901888 + i64.or + local.set 15 + i32.const 3 + local.set 2 + i32.const 117 + local.set 7 + br 6 (;@9;) + end + local.get 15 + i64.const -1095216660481 + i64.and + i64.const 17179869184 + i64.or + local.set 15 + i32.const 3 + local.set 2 + br 5 (;@9;) + end + i32.const 48 + i32.const 87 + local.get 14 + local.get 15 + i32.wrap_i64 + local.tee 2 + i32.const 2 + i32.shl + i32.shr_u + i32.const 15 + i32.and + local.tee 7 + i32.const 10 + i32.lt_u + select + local.get 7 + i32.add + local.set 7 + local.get 2 + i32.eqz + br_if 3 (;@10;) + local.get 15 + i64.const -1 + i64.add + i64.const 4294967295 + i64.and + local.get 15 + i64.const -4294967296 + i64.and + i64.or + local.set 15 + i32.const 3 + local.set 2 + br 4 (;@9;) + end + i32.const 0 + local.set 2 + local.get 14 + local.set 7 + br 3 (;@9;) + end + i32.const 1 + local.set 2 + block ;; label = @12 + local.get 13 + i32.const 128 + i32.lt_u + br_if 0 (;@12;) + i32.const 2 + local.set 2 + local.get 13 + i32.const 2048 + i32.lt_u + br_if 0 (;@12;) + i32.const 3 + i32.const 4 + local.get 13 + i32.const 65536 + i32.lt_u + select + local.set 2 + end + local.get 2 + local.get 11 + i32.add + local.set 7 + br 4 (;@7;) + end + local.get 15 + i64.const -1095216660481 + i64.and + local.set 15 + i32.const 3 + local.set 2 + i32.const 125 + local.set 7 + br 1 (;@9;) + end + local.get 15 + i64.const -1095216660481 + i64.and + i64.const 4294967296 + i64.or + local.set 15 + i32.const 3 + local.set 2 + end + local.get 4 + local.get 7 + local.get 6 + call_indirect (type 1) + i32.eqz + br_if 0 (;@8;) + br 6 (;@2;) + end + end + local.get 11 + local.get 9 + i32.sub + local.get 10 + i32.add + local.set 11 + local.get 10 + local.set 9 + local.get 10 + local.get 8 + i32.ne + br_if 1 (;@5;) + br 2 (;@4;) + end + end + local.get 0 + local.get 1 + local.get 7 + local.get 11 + i32.const 1051768 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable + end + block ;; label = @4 + local.get 7 + br_if 0 (;@4;) + i32.const 0 + local.set 7 + br 1 (;@3;) + end + block ;; label = @4 + local.get 7 + local.get 1 + i32.lt_u + br_if 0 (;@4;) + local.get 7 + local.get 1 + i32.eq + br_if 1 (;@3;) + br 3 (;@1;) + end + local.get 0 + local.get 7 + i32.add + i32.load8_s + i32.const -65 + i32.le_s + br_if 2 (;@1;) + end + i32.const 1 + local.set 3 + local.get 4 + local.get 0 + local.get 7 + i32.add + local.get 1 + local.get 7 + i32.sub + local.get 5 + i32.load offset=12 + call_indirect (type 3) + br_if 0 (;@2;) + local.get 4 + i32.const 34 + local.get 6 + call_indirect (type 1) + return + end + local.get 3 + return + end + local.get 0 + local.get 1 + local.get 7 + local.get 1 + i32.const 1051784 + call $_ZN4core3str16slice_error_fail17h0f2453c2264eb1f1E + unreachable) + (func $_ZN4core7unicode12unicode_data15grapheme_extend6lookup17hd0ff6a60cca6cd88E (type 9) (param i32) (result i32) + (local i32 i32 i32 i32 i32) + local.get 0 + i32.const 11 + i32.shl + local.set 1 + i32.const 0 + local.set 2 + i32.const 31 + local.set 3 + i32.const 31 + local.set 4 + block ;; label = @1 + block ;; label = @2 + loop ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 3 + i32.const 1 + i32.shr_u + local.get 2 + i32.add + local.tee 3 + i32.const 2 + i32.shl + i32.const 1053748 + i32.add + i32.load + i32.const 11 + i32.shl + local.tee 5 + local.get 1 + i32.lt_u + br_if 0 (;@5;) + local.get 5 + local.get 1 + i32.eq + br_if 3 (;@2;) + local.get 3 + local.set 4 + br 1 (;@4;) + end + local.get 3 + i32.const 1 + i32.add + local.set 2 + end + local.get 4 + local.get 2 + i32.sub + local.set 3 + local.get 4 + local.get 2 + i32.gt_u + br_if 0 (;@3;) + br 2 (;@1;) + end + end + local.get 3 + i32.const 1 + i32.add + local.set 2 + end + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 2 + i32.const 30 + i32.gt_u + br_if 0 (;@3;) + local.get 2 + i32.const 2 + i32.shl + local.set 3 + i32.const 689 + local.set 4 + block ;; label = @4 + local.get 2 + i32.const 30 + i32.eq + br_if 0 (;@4;) + local.get 3 + i32.const 1053752 + i32.add + i32.load + i32.const 21 + i32.shr_u + local.set 4 + end + i32.const 0 + local.set 5 + block ;; label = @4 + local.get 2 + i32.const -1 + i32.add + local.tee 1 + local.get 2 + i32.gt_u + br_if 0 (;@4;) + local.get 1 + i32.const 31 + i32.ge_u + br_if 2 (;@2;) + local.get 1 + i32.const 2 + i32.shl + i32.const 1053748 + i32.add + i32.load + i32.const 2097151 + i32.and + local.set 5 + end + block ;; label = @4 + local.get 4 + local.get 3 + i32.const 1053748 + i32.add + i32.load + i32.const 21 + i32.shr_u + local.tee 2 + i32.const 1 + i32.add + i32.eq + br_if 0 (;@4;) + local.get 0 + local.get 5 + i32.sub + local.set 1 + local.get 2 + i32.const 689 + local.get 2 + i32.const 689 + i32.gt_u + select + local.set 3 + local.get 4 + i32.const -1 + i32.add + local.set 5 + i32.const 0 + local.set 4 + loop ;; label = @5 + local.get 3 + local.get 2 + i32.eq + br_if 4 (;@1;) + local.get 4 + local.get 2 + i32.const 1053872 + i32.add + i32.load8_u + i32.add + local.tee 4 + local.get 1 + i32.gt_u + br_if 1 (;@4;) + local.get 5 + local.get 2 + i32.const 1 + i32.add + local.tee 2 + i32.ne + br_if 0 (;@5;) + end + local.get 5 + local.set 2 + end + local.get 2 + i32.const 1 + i32.and + return + end + local.get 2 + i32.const 31 + i32.const 1053692 + call $_ZN4core9panicking18panic_bounds_check17h1d84519ec46ed48cE + unreachable + end + local.get 1 + i32.const 31 + i32.const 1053724 + call $_ZN4core9panicking18panic_bounds_check17h1d84519ec46ed48cE + unreachable + end + local.get 3 + i32.const 689 + i32.const 1053708 + call $_ZN4core9panicking18panic_bounds_check17h1d84519ec46ed48cE + unreachable) + (func $_ZN4core7unicode9printable12is_printable17he5bf65b33214db13E (type 9) (param i32) (result i32) + (local i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + local.get 0 + i32.const 65536 + i32.lt_u + br_if 0 (;@9;) + local.get 0 + i32.const 131072 + i32.lt_u + br_if 1 (;@8;) + local.get 0 + i32.const -173790 + i32.add + i32.const 33 + i32.gt_u + local.get 0 + i32.const -177973 + i32.add + i32.const 10 + i32.gt_u + i32.and + local.get 0 + i32.const 2097150 + i32.and + i32.const 178206 + i32.ne + i32.and + local.get 0 + i32.const -183970 + i32.add + i32.const 13 + i32.gt_u + i32.and + local.get 0 + i32.const -191457 + i32.add + i32.const 3102 + i32.gt_u + i32.and + local.get 0 + i32.const -195102 + i32.add + i32.const 1505 + i32.gt_u + i32.and + local.get 0 + i32.const -201547 + i32.add + i32.const 716212 + i32.gt_u + i32.and + local.get 0 + i32.const 918000 + i32.lt_u + i32.and + local.set 1 + br 2 (;@7;) + end + i32.const 1052300 + local.set 2 + i32.const 0 + local.set 3 + local.get 0 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + local.set 4 + block ;; label = @9 + loop ;; label = @10 + local.get 2 + i32.const 2 + i32.add + local.set 5 + local.get 3 + local.get 2 + i32.load8_u offset=1 + local.tee 1 + i32.add + local.set 6 + block ;; label = @11 + local.get 2 + i32.load8_u + local.tee 2 + local.get 4 + i32.eq + br_if 0 (;@11;) + local.get 2 + local.get 4 + i32.gt_u + br_if 2 (;@9;) + local.get 6 + local.set 3 + local.get 5 + local.set 2 + local.get 5 + i32.const 1052382 + i32.ne + br_if 1 (;@10;) + br 2 (;@9;) + end + local.get 6 + local.get 3 + i32.lt_u + br_if 4 (;@6;) + local.get 6 + i32.const 290 + i32.gt_u + br_if 5 (;@5;) + local.get 3 + i32.const 1052382 + i32.add + local.set 2 + block ;; label = @11 + loop ;; label = @12 + local.get 1 + i32.eqz + br_if 1 (;@11;) + local.get 1 + i32.const -1 + i32.add + local.set 1 + local.get 2 + i32.load8_u + local.set 3 + local.get 2 + i32.const 1 + i32.add + local.set 2 + local.get 3 + local.get 0 + i32.const 255 + i32.and + i32.ne + br_if 0 (;@12;) + end + i32.const 0 + local.set 1 + br 4 (;@7;) + end + local.get 6 + local.set 3 + local.get 5 + local.set 2 + local.get 5 + i32.const 1052382 + i32.ne + br_if 0 (;@10;) + end + end + local.get 0 + i32.const 65535 + i32.and + local.set 0 + i32.const 1052672 + local.set 2 + i32.const 1 + local.set 1 + loop ;; label = @9 + local.get 2 + i32.const 1 + i32.add + local.set 6 + block ;; label = @10 + block ;; label = @11 + local.get 2 + i32.load8_u + local.tee 3 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee 5 + i32.const 0 + i32.lt_s + br_if 0 (;@11;) + local.get 6 + local.set 2 + br 1 (;@10;) + end + local.get 6 + i32.const 1052981 + i32.eq + br_if 6 (;@4;) + local.get 5 + i32.const 127 + i32.and + i32.const 8 + i32.shl + local.get 2 + i32.load8_u offset=1 + i32.or + local.set 3 + local.get 2 + i32.const 2 + i32.add + local.set 2 + end + local.get 0 + local.get 3 + i32.sub + local.tee 0 + i32.const 0 + i32.lt_s + br_if 2 (;@7;) + local.get 1 + i32.const 1 + i32.xor + local.set 1 + local.get 2 + i32.const 1052981 + i32.ne + br_if 0 (;@9;) + br 2 (;@7;) + end + end + i32.const 1052981 + local.set 2 + i32.const 0 + local.set 3 + local.get 0 + i32.const 8 + i32.shr_u + i32.const 255 + i32.and + local.set 4 + block ;; label = @8 + loop ;; label = @9 + local.get 2 + i32.const 2 + i32.add + local.set 5 + local.get 3 + local.get 2 + i32.load8_u offset=1 + local.tee 1 + i32.add + local.set 6 + block ;; label = @10 + local.get 2 + i32.load8_u + local.tee 2 + local.get 4 + i32.eq + br_if 0 (;@10;) + local.get 2 + local.get 4 + i32.gt_u + br_if 2 (;@8;) + local.get 6 + local.set 3 + local.get 5 + local.set 2 + local.get 5 + i32.const 1053057 + i32.ne + br_if 1 (;@9;) + br 2 (;@8;) + end + local.get 6 + local.get 3 + i32.lt_u + br_if 6 (;@3;) + local.get 6 + i32.const 175 + i32.gt_u + br_if 7 (;@2;) + local.get 3 + i32.const 1053057 + i32.add + local.set 2 + block ;; label = @10 + loop ;; label = @11 + local.get 1 + i32.eqz + br_if 1 (;@10;) + local.get 1 + i32.const -1 + i32.add + local.set 1 + local.get 2 + i32.load8_u + local.set 3 + local.get 2 + i32.const 1 + i32.add + local.set 2 + local.get 3 + local.get 0 + i32.const 255 + i32.and + i32.ne + br_if 0 (;@11;) + end + i32.const 0 + local.set 1 + br 3 (;@7;) + end + local.get 6 + local.set 3 + local.get 5 + local.set 2 + local.get 5 + i32.const 1053057 + i32.ne + br_if 0 (;@9;) + end + end + local.get 0 + i32.const 65535 + i32.and + local.set 0 + i32.const 1053232 + local.set 2 + i32.const 1 + local.set 1 + loop ;; label = @8 + local.get 2 + i32.const 1 + i32.add + local.set 6 + block ;; label = @9 + block ;; label = @10 + local.get 2 + i32.load8_u + local.tee 3 + i32.const 24 + i32.shl + i32.const 24 + i32.shr_s + local.tee 5 + i32.const 0 + i32.lt_s + br_if 0 (;@10;) + local.get 6 + local.set 2 + br 1 (;@9;) + end + local.get 6 + i32.const 1053651 + i32.eq + br_if 8 (;@1;) + local.get 5 + i32.const 127 + i32.and + i32.const 8 + i32.shl + local.get 2 + i32.load8_u offset=1 + i32.or + local.set 3 + local.get 2 + i32.const 2 + i32.add + local.set 2 + end + local.get 0 + local.get 3 + i32.sub + local.tee 0 + i32.const 0 + i32.lt_s + br_if 1 (;@7;) + local.get 1 + i32.const 1 + i32.xor + local.set 1 + local.get 2 + i32.const 1053651 + i32.ne + br_if 0 (;@8;) + end + end + local.get 1 + i32.const 1 + i32.and + return + end + local.get 3 + local.get 6 + i32.const 1052268 + call $_ZN4core5slice5index22slice_index_order_fail17he388d03b2828b4ebE + unreachable + end + local.get 6 + i32.const 290 + i32.const 1052268 + call $_ZN4core5slice5index24slice_end_index_len_fail17he00053322d4d7aa4E + unreachable + end + i32.const 1051344 + i32.const 43 + i32.const 1052284 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable + end + local.get 3 + local.get 6 + i32.const 1052268 + call $_ZN4core5slice5index22slice_index_order_fail17he388d03b2828b4ebE + unreachable + end + local.get 6 + i32.const 175 + i32.const 1052268 + call $_ZN4core5slice5index24slice_end_index_len_fail17he00053322d4d7aa4E + unreachable + end + i32.const 1051344 + i32.const 43 + i32.const 1052284 + call $_ZN4core9panicking5panic17hceae0c79b0247f98E + unreachable) + (func $_ZN42_$LT$str$u20$as$u20$core..fmt..Display$GT$3fmt17h86821b8cd9767c9cE (type 3) (param i32 i32 i32) (result i32) + local.get 2 + local.get 0 + local.get 1 + call $_ZN4core3fmt9Formatter3pad17h72ccc4219c1d09f0E) + (func $_ZN41_$LT$char$u20$as$u20$core..fmt..Debug$GT$3fmt17h73734b2156cbce99E (type 1) (param i32 i32) (result i32) + (local i32 i32 i32 i32 i64 i32) + i32.const 1 + local.set 2 + block ;; label = @1 + local.get 1 + i32.load offset=24 + local.tee 3 + i32.const 39 + local.get 1 + i32.const 28 + i32.add + i32.load + i32.load offset=16 + local.tee 4 + call_indirect (type 1) + br_if 0 (;@1;) + i32.const 116 + local.set 5 + i32.const 2 + local.set 1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + local.get 0 + i32.load + local.tee 0 + i32.const -9 + i32.add + br_table 8 (;@2;) 3 (;@7;) 1 (;@9;) 1 (;@9;) 2 (;@8;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 1 (;@9;) 4 (;@6;) 0 (;@10;) + end + local.get 0 + i32.const 92 + i32.eq + br_if 3 (;@6;) + end + local.get 0 + call $_ZN4core7unicode12unicode_data15grapheme_extend6lookup17hd0ff6a60cca6cd88E + br_if 3 (;@5;) + local.get 0 + call $_ZN4core7unicode9printable12is_printable17he5bf65b33214db13E + i32.eqz + br_if 4 (;@4;) + i32.const 1 + local.set 1 + local.get 0 + local.set 5 + br 6 (;@2;) + end + i32.const 114 + local.set 5 + i32.const 2 + local.set 1 + br 5 (;@2;) + end + i32.const 110 + local.set 5 + i32.const 2 + local.set 1 + br 4 (;@2;) + end + i32.const 2 + local.set 1 + local.get 0 + local.set 5 + br 3 (;@2;) + end + local.get 0 + i32.const 1 + i32.or + i32.clz + i32.const 2 + i32.shr_u + i32.const 7 + i32.xor + i64.extend_i32_u + i64.const 21474836480 + i64.or + local.set 6 + br 1 (;@3;) + end + local.get 0 + i32.const 1 + i32.or + i32.clz + i32.const 2 + i32.shr_u + i32.const 7 + i32.xor + i64.extend_i32_u + i64.const 21474836480 + i64.or + local.set 6 + end + i32.const 3 + local.set 1 + local.get 0 + local.set 5 + end + loop ;; label = @2 + local.get 1 + local.set 7 + i32.const 0 + local.set 1 + local.get 5 + local.set 0 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 7 + br_table 1 (;@6;) 4 (;@3;) 2 (;@5;) 0 (;@7;) 1 (;@6;) + end + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + local.get 6 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const 255 + i32.and + br_table 5 (;@6;) 0 (;@11;) 4 (;@7;) 1 (;@10;) 2 (;@9;) 3 (;@8;) 5 (;@6;) + end + local.get 6 + i64.const -1095216660481 + i64.and + local.set 6 + i32.const 125 + local.set 0 + i32.const 3 + local.set 1 + br 7 (;@3;) + end + local.get 6 + i64.const -1095216660481 + i64.and + i64.const 8589934592 + i64.or + local.set 6 + i32.const 123 + local.set 0 + i32.const 3 + local.set 1 + br 6 (;@3;) + end + local.get 6 + i64.const -1095216660481 + i64.and + i64.const 12884901888 + i64.or + local.set 6 + i32.const 117 + local.set 0 + i32.const 3 + local.set 1 + br 5 (;@3;) + end + local.get 6 + i64.const -1095216660481 + i64.and + i64.const 17179869184 + i64.or + local.set 6 + i32.const 92 + local.set 0 + i32.const 3 + local.set 1 + br 4 (;@3;) + end + i32.const 48 + i32.const 87 + local.get 5 + local.get 6 + i32.wrap_i64 + local.tee 1 + i32.const 2 + i32.shl + i32.shr_u + i32.const 15 + i32.and + local.tee 0 + i32.const 10 + i32.lt_u + select + local.get 0 + i32.add + local.set 0 + local.get 1 + i32.eqz + br_if 2 (;@4;) + local.get 6 + i64.const -1 + i64.add + i64.const 4294967295 + i64.and + local.get 6 + i64.const -4294967296 + i64.and + i64.or + local.set 6 + i32.const 3 + local.set 1 + br 3 (;@3;) + end + local.get 3 + i32.const 39 + local.get 4 + call_indirect (type 1) + local.set 2 + br 4 (;@1;) + end + i32.const 92 + local.set 0 + i32.const 1 + local.set 1 + br 1 (;@3;) + end + local.get 6 + i64.const -1095216660481 + i64.and + i64.const 4294967296 + i64.or + local.set 6 + i32.const 3 + local.set 1 + end + local.get 3 + local.get 0 + local.get 4 + call_indirect (type 1) + i32.eqz + br_if 0 (;@2;) + end + end + local.get 2) + (func $_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..LowerHex$u20$for$u20$i8$GT$3fmt17hd631321d4e9e6babE (type 1) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 128 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.load8_u + local.set 3 + i32.const 0 + local.set 0 + loop ;; label = @1 + local.get 2 + local.get 0 + i32.add + i32.const 127 + i32.add + i32.const 48 + i32.const 87 + local.get 3 + i32.const 15 + i32.and + local.tee 4 + i32.const 10 + i32.lt_u + select + local.get 4 + i32.add + i32.store8 + local.get 0 + i32.const -1 + i32.add + local.set 0 + local.get 3 + i32.const 255 + i32.and + local.tee 4 + i32.const 4 + i32.shr_u + local.set 3 + local.get 4 + i32.const 15 + i32.gt_u + br_if 0 (;@1;) + end + block ;; label = @1 + local.get 0 + i32.const 128 + i32.add + local.tee 3 + i32.const 129 + i32.lt_u + br_if 0 (;@1;) + local.get 3 + i32.const 128 + i32.const 1051520 + call $_ZN4core5slice5index26slice_start_index_len_fail17hfdb57cc8dc82f9cbE + unreachable + end + local.get 1 + i32.const 1 + i32.const 1051536 + i32.const 2 + local.get 2 + local.get 0 + i32.add + i32.const 128 + i32.add + i32.const 0 + local.get 0 + i32.sub + call $_ZN4core3fmt9Formatter12pad_integral17h8c76600d11a2c4b1E + local.set 0 + local.get 2 + i32.const 128 + i32.add + global.set $__stack_pointer + local.get 0) + (func $_ZN4core3fmt3num3imp7fmt_u6417h4d8c26c3623cb98bE (type 15) (param i64 i32 i32) (result i32) + (local i32 i32 i64 i32 i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + i32.const 39 + local.set 4 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i64.const 10000 + i64.ge_u + br_if 0 (;@2;) + local.get 0 + local.set 5 + br 1 (;@1;) + end + i32.const 39 + local.set 4 + loop ;; label = @2 + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.add + local.tee 6 + i32.const -4 + i32.add + local.get 0 + local.get 0 + i64.const 10000 + i64.div_u + local.tee 5 + i64.const 10000 + i64.mul + i64.sub + i32.wrap_i64 + local.tee 7 + i32.const 65535 + i32.and + i32.const 100 + i32.div_u + local.tee 8 + i32.const 1 + i32.shl + i32.const 1051538 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + local.get 6 + i32.const -2 + i32.add + local.get 7 + local.get 8 + i32.const 100 + i32.mul + i32.sub + i32.const 65535 + i32.and + i32.const 1 + i32.shl + i32.const 1051538 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + local.get 4 + i32.const -4 + i32.add + local.set 4 + local.get 0 + i64.const 99999999 + i64.gt_u + local.set 6 + local.get 5 + local.set 0 + local.get 6 + br_if 0 (;@2;) + end + end + block ;; label = @1 + local.get 5 + i32.wrap_i64 + local.tee 6 + i32.const 99 + i32.le_s + br_if 0 (;@1;) + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -2 + i32.add + local.tee 4 + i32.add + local.get 5 + i32.wrap_i64 + local.tee 6 + local.get 6 + i32.const 65535 + i32.and + i32.const 100 + i32.div_u + local.tee 6 + i32.const 100 + i32.mul + i32.sub + i32.const 65535 + i32.and + i32.const 1 + i32.shl + i32.const 1051538 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + end + block ;; label = @1 + block ;; label = @2 + local.get 6 + i32.const 10 + i32.lt_s + br_if 0 (;@2;) + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -2 + i32.add + local.tee 4 + i32.add + local.get 6 + i32.const 1 + i32.shl + i32.const 1051538 + i32.add + i32.load16_u align=1 + i32.store16 align=1 + br 1 (;@1;) + end + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.const -1 + i32.add + local.tee 4 + i32.add + local.get 6 + i32.const 48 + i32.add + i32.store8 + end + local.get 2 + local.get 1 + i32.const 1051332 + i32.const 0 + local.get 3 + i32.const 9 + i32.add + local.get 4 + i32.add + i32.const 39 + local.get 4 + i32.sub + call $_ZN4core3fmt9Formatter12pad_integral17h8c76600d11a2c4b1E + local.set 4 + local.get 3 + i32.const 48 + i32.add + global.set $__stack_pointer + local.get 4) + (func $_ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17hb9caf99136f460abE (type 1) (param i32 i32) (result i32) + local.get 0 + i32.load + local.tee 0 + i64.extend_i32_u + local.get 0 + i32.const -1 + i32.xor + i64.extend_i32_s + i64.const 1 + i64.add + local.get 0 + i32.const -1 + i32.gt_s + local.tee 0 + select + local.get 0 + local.get 1 + call $_ZN4core3fmt3num3imp7fmt_u6417h4d8c26c3623cb98bE) + (func $_ZN53_$LT$core..fmt..Error$u20$as$u20$core..fmt..Debug$GT$3fmt17hc2ef6a25142e514aE (type 1) (param i32 i32) (result i32) + local.get 1 + i32.load offset=24 + i32.const 1053740 + i32.const 5 + local.get 1 + i32.const 28 + i32.add + i32.load + i32.load offset=12 + call_indirect (type 3)) + (func $memcpy (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32) + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + local.get 2 + i32.const 3 + i32.and + local.set 3 + i32.const 0 + local.set 4 + block ;; label = @2 + local.get 2 + i32.const -1 + i32.add + i32.const 3 + i32.lt_u + br_if 0 (;@2;) + local.get 2 + i32.const -4 + i32.and + local.set 5 + i32.const 0 + local.set 4 + loop ;; label = @3 + local.get 0 + local.get 4 + i32.add + local.tee 2 + local.get 1 + local.get 4 + i32.add + local.tee 6 + i32.load8_u + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.get 6 + i32.const 1 + i32.add + i32.load8_u + i32.store8 + local.get 2 + i32.const 2 + i32.add + local.get 6 + i32.const 2 + i32.add + i32.load8_u + i32.store8 + local.get 2 + i32.const 3 + i32.add + local.get 6 + i32.const 3 + i32.add + i32.load8_u + i32.store8 + local.get 5 + local.get 4 + i32.const 4 + i32.add + local.tee 4 + i32.ne + br_if 0 (;@3;) + end + end + local.get 3 + i32.eqz + br_if 0 (;@1;) + local.get 1 + local.get 4 + i32.add + local.set 2 + local.get 0 + local.get 4 + i32.add + local.set 4 + loop ;; label = @2 + local.get 4 + local.get 2 + i32.load8_u + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.set 2 + local.get 4 + i32.const 1 + i32.add + local.set 4 + local.get 3 + i32.const -1 + i32.add + local.tee 3 + br_if 0 (;@2;) + end + end + local.get 0) + (func $memset (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32) + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + local.get 2 + i32.const 7 + i32.and + local.set 3 + i32.const 0 + local.set 4 + block ;; label = @2 + local.get 2 + i32.const -1 + i32.add + i32.const 7 + i32.lt_u + br_if 0 (;@2;) + local.get 2 + i32.const -8 + i32.and + local.set 5 + i32.const 0 + local.set 4 + loop ;; label = @3 + local.get 0 + local.get 4 + i32.add + local.tee 2 + local.get 1 + i32.store8 + local.get 2 + i32.const 7 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 6 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 5 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 4 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 3 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 2 + i32.add + local.get 1 + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.get 1 + i32.store8 + local.get 5 + local.get 4 + i32.const 8 + i32.add + local.tee 4 + i32.ne + br_if 0 (;@3;) + end + end + local.get 3 + i32.eqz + br_if 0 (;@1;) + local.get 0 + local.get 4 + i32.add + local.set 2 + loop ;; label = @2 + local.get 2 + local.get 1 + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.set 2 + local.get 3 + i32.const -1 + i32.add + local.tee 3 + br_if 0 (;@2;) + end + end + local.get 0) + (func $memcmp (type 3) (param i32 i32 i32) (result i32) + (local i32 i32 i32) + i32.const 0 + local.set 3 + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + block ;; label = @2 + loop ;; label = @3 + local.get 0 + i32.load8_u + local.tee 4 + local.get 1 + i32.load8_u + local.tee 5 + i32.ne + br_if 1 (;@2;) + local.get 0 + i32.const 1 + i32.add + local.set 0 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 2 + i32.const -1 + i32.add + local.tee 2 + i32.eqz + br_if 2 (;@1;) + br 0 (;@3;) + end + end + local.get 4 + local.get 5 + i32.sub + local.set 3 + end + local.get 3) + (table (;0;) 44 44 funcref) + (memory (;0;) 17) + (global $__stack_pointer (mut i32) (i32.const 1048576)) + (global (;1;) i32 (i32.const 1055048)) + (global (;2;) i32 (i32.const 1055056)) + (export "memory" (memory 0)) + (export "authentication" (func $authentication)) + (export "__data_end" (global 1)) + (export "__heap_base" (global 2)) + (elem (;0;) (i32.const 1) func $_ZN4core3fmt3num52_$LT$impl$u20$core..fmt..LowerHex$u20$for$u20$i8$GT$3fmt17hd631321d4e9e6babE $_ZN4core3ptr37drop_in_place$LT$core..fmt..Error$GT$17h79bafd6618374d9aE $_ZN53_$LT$core..fmt..Error$u20$as$u20$core..fmt..Debug$GT$3fmt17hc2ef6a25142e514aE $_ZN4core3ptr45drop_in_place$LT$serde_json..error..Error$GT$17h6d198a4aa7f19cffE $_ZN61_$LT$serde_json..error..Error$u20$as$u20$core..fmt..Debug$GT$3fmt17h45431cd82259ef7aE $_ZN4core3ptr54drop_in_place$LT$$RF$mut$u20$alloc..string..String$GT$17h812419296af9506bE.llvm.13827028329745944904 $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17h78b9c4149c22116dE.llvm.13827028329745944904 $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17hddf51bcc9d84867eE.llvm.13827028329745944904 $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h580641437cba117cE.llvm.13827028329745944904 $_ZN4core3ptr54drop_in_place$LT$$RF$mut$u20$alloc..string..String$GT$17h49df79e12a85d052E $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17h82f10565ef6bfd7aE $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h4857cf2da1f41df4E $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h77392364fd5114f8E $_ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$u32$GT$3fmt17h3df307cf9bb0f560E $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Debug$GT$3fmt17h667b172896ba5eafE $_ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h933b0833ab6449caE.llvm.8830830793381635981 $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Write$GT$9write_str17h642c18f01b1837c1E.llvm.8830830793381635981 $_ZN58_$LT$alloc..string..String$u20$as$u20$core..fmt..Write$GT$10write_char17heb39c38eb75e5f9dE.llvm.8830830793381635981 $_ZN4core3fmt5Write9write_fmt17hd7957869af5b4f91E $_ZN4core3ptr37drop_in_place$LT$core..fmt..Error$GT$17h0565fabb4f667d41E.llvm.8830830793381635981 $_ZN4core3fmt3num3imp52_$LT$impl$u20$core..fmt..Display$u20$for$u20$i32$GT$3fmt17hb9caf99136f460abE $_ZN60_$LT$alloc..string..String$u20$as$u20$core..fmt..Display$GT$3fmt17h40c0b34608758a87E $_ZN44_$LT$$RF$T$u20$as$u20$core..fmt..Display$GT$3fmt17hcabc397230f18c07E $_ZN3std5alloc24default_alloc_error_hook17hc8541f7c1ec32afeE $_ZN4core3ptr100drop_in_place$LT$$RF$mut$u20$std..io..Write..write_fmt..Adapter$LT$alloc..vec..Vec$LT$u8$GT$$GT$$GT$17hbb05f427c3faacacE $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17hbb9d609fa6ca2265E $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h9f0e7629dba1bc1eE $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h4e63be9707973d51E $_ZN4core3ptr70drop_in_place$LT$std..panicking..begin_panic_handler..PanicPayload$GT$17hd9ab65052492b52aE $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h0213f8a547c7e7bbE $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17h023e80216351dde5E $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h8c5dc867f0a69941E $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17hb5cbf70b53a72f1eE $_ZN4core3ptr226drop_in_place$LT$std..error..$LT$impl$u20$core..convert..From$LT$alloc..string..String$GT$$u20$for$u20$alloc..boxed..Box$LT$dyn$u20$std..error..Error$u2b$core..marker..Send$u2b$core..marker..Sync$GT$$GT$..from..StringError$GT$17h4523db22d8196732E $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hef2b492c5a1991f7E $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hbfbca4fb35e9bd6dE $_ZN4core3ops8function6FnOnce9call_once17h66d552c917209568E $_ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17he0fb0ec556a6ab4aE $_ZN44_$LT$$RF$T$u20$as$u20$core..fmt..Display$GT$3fmt17ha820d3379de3c823E $_ZN71_$LT$core..ops..range..Range$LT$Idx$GT$$u20$as$u20$core..fmt..Debug$GT$3fmt17h0acba3bf85e29330E $_ZN41_$LT$char$u20$as$u20$core..fmt..Debug$GT$3fmt17h73734b2156cbce99E $_ZN4core3ptr102drop_in_place$LT$$RF$core..iter..adapters..copied..Copied$LT$core..slice..iter..Iter$LT$u8$GT$$GT$$GT$17haa4e00c186f7b014E $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17h509a82f298b121bcE) + (data $.rodata (i32.const 1048576) "called `Result::unwrap()` on an `Err` value\00\02\00\00\00\00\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00argfunc\00S\00\10\00\00\00\00\00\00\00\00\00 \00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\03\00\00\00src/lib.rs\00\00|\00\10\00\0a\00\00\00\1d\00\00\00(\00\00\00200

Auth Pass!

hash

403

Auth Forbidden!

hash |\00\10\00\0a\00\00\003\00\00\004\00\00\00statusbody\00\00\06\00\00\00\04\00\00\00\04\00\00\00\07\00\00\00\08\00\00\00\09\00\00\00/root/.cargo/registry/src/github.com-1ecc6299db9ec823/block-buffer-0.9.0/src/lib.rs\00$\01\10\00S\00\00\00\84\00\00\00\09\00\00\00$\01\10\00S\00\00\00\87\00\00\00\17\00\00\00$\01\10\00S\00\00\00\8b\00\00\00\1b\00\00\00$\01\10\00S\00\00\00\1b\00\00\00\0d\00\00\00$\01\10\00S\00\00\00\22\00\00\00\0d\00\00\00internal error: entered unreachable code/root/.cargo/registry/src/github.com-1ecc6299db9ec823/serde_json-1.0.72/src/ser.rs\00\00\f0\01\10\00R\00\00\002\06\00\00\12\00\00\00\f0\01\10\00R\00\00\00*\08\00\00;\00\00\00\f0\01\10\00R\00\00\004\08\00\007\00\00\00\5ct\5cr\5cn\5cf\5cb\5c\5c\5c\22\00\00\0a\00\00\00\04\00\00\00\04\00\00\00\0b\00\00\00\0c\00\00\00\0d\00\00\00\10\00\00\00\0c\00\00\00\04\00\00\00\11\00\00\00\12\00\00\00\13\00\00\00a Display implementation returned an error unexpectedly/rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/alloc/src/string.rs\00\00\eb\02\10\00K\00\00\00O\09\00\00\0e\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\03\00\00\00\01\00\00\00\00\00\00\00recursion limit exceededunexpected end of hex escapetrailing characterstrailing commalone leading surrogate in hex escapekey must be a stringcontrol character (\5cu0000-\5cu001F) found while parsing a stringinvalid unicode code pointnumber out of rangeinvalid numberinvalid escapeexpected valueexpected identexpected `,` or `}`expected `,` or `]`expected `:`EOF while parsing a valueEOF while parsing a stringEOF while parsing an objectEOF while parsing a listError(, line: , column: )\00\00\00(\05\10\00\06\00\00\00.\05\10\00\08\00\00\006\05\10\00\0a\00\00\00@\05\10\00\01\00\00\000123456789abcdefuuuuuuuubtnufruuuuuuuuuuuuuuuuuu\00\00\22\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\5c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\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#Eg\89\ab\cd\ef\fe\dc\ba\98vT2\10\19\00\00\00\04\00\00\00\04\00\00\00\1a\00\00\00\1b\00\00\00\1c\00\00\00called `Option::unwrap()` on a `None` value\00\01\00\00\00\00\00\00\00\9c\06\10\00\00\00\00\00uncategorized errorother errorout of memoryunexpected end of fileunsupportedoperation interruptedargument list too longfilename too longtoo many linkscross-device link or renamedeadlockexecutable file busyresource busyfile too largefilesystem quota exceededseek on unseekable fileno storage spacewrite zerotimed outinvalid datainvalid input parameterstale network file handlefilesystem loop or indirection limit (e.g. symlink loop)read-only filesystem or storage mediumdirectory not emptyis a directorynot a directoryoperation would blockentity already existsbroken pipenetwork downaddress not availableaddress in usenot connectedconnection abortednetwork unreachablehost unreachableconnection resetconnection refusedpermission deniedentity not found (os error )\00\00\9c\06\10\00\00\00\00\00\c6\09\10\00\0b\00\00\00\d1\09\10\00\01\00\00\00library/std/src/panicking.rs\ec\09\10\00\1c\00\00\00\03\02\00\00\1f\00\00\00\ec\09\10\00\1c\00\00\00\04\02\00\00\1e\00\00\00\1d\00\00\00\10\00\00\00\04\00\00\00\1e\00\00\00\1f\00\00\00\19\00\00\00\08\00\00\00\04\00\00\00 \00\00\00!\00\00\00\22\00\00\00\0c\00\00\00\04\00\00\00#\00\00\00\19\00\00\00\08\00\00\00\04\00\00\00$\00\00\00operation successfullibrary/alloc/src/raw_vec.rscapacity overflow\00\00\00\84\0a\10\00\1c\00\00\00/\02\00\00\05\00\00\00..\00\00\c4\0a\10\00\02\00\00\00called `Option::unwrap()` on a `None` value\00*\00\00\00\00\00\00\00\01\00\00\00+\00\00\00index out of bounds: the len is but the index is \00\00\0c\0b\10\00 \00\00\00,\0b\10\00\12\00\00\00`: \00\c4\0a\10\00\00\00\00\00Q\0b\10\00\02\00\00\00library/core/src/fmt/num.rs\00d\0b\10\00\1b\00\00\00e\00\00\00\14\00\00\000x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899library/core/src/fmt/mod.rs\00\00\00Z\0c\10\00\1b\00\00\00U\08\00\00\1e\00\00\00Z\0c\10\00\1b\00\00\00\5c\08\00\00\16\00\00\00range start index out of range for slice of length \98\0c\10\00\12\00\00\00\aa\0c\10\00\22\00\00\00range end index \dc\0c\10\00\10\00\00\00\aa\0c\10\00\22\00\00\00slice index starts at but ends at \00\fc\0c\10\00\16\00\00\00\12\0d\10\00\0d\00\00\00library/core/src/str/validations.rs\000\0d\10\00#\00\00\00\11\01\00\00\11\00\00\00[...]byte index is out of bounds of `\00\00i\0d\10\00\0b\00\00\00t\0d\10\00\16\00\00\00P\0b\10\00\01\00\00\00begin <= end ( <= ) when slicing `\00\00\a4\0d\10\00\0e\00\00\00\b2\0d\10\00\04\00\00\00\b6\0d\10\00\10\00\00\00P\0b\10\00\01\00\00\00 is not a char boundary; it is inside (bytes ) of `i\0d\10\00\0b\00\00\00\e8\0d\10\00&\00\00\00\0e\0e\10\00\08\00\00\00\16\0e\10\00\06\00\00\00P\0b\10\00\01\00\00\00library/core/src/unicode/printable.rs\00\00\00D\0e\10\00%\00\00\00\0a\00\00\00\1c\00\00\00D\0e\10\00%\00\00\00\1a\00\00\006\00\00\00\00\01\03\05\05\06\06\03\07\06\08\08\09\11\0a\1c\0b\19\0c\14\0d\10\0e\0d\0f\04\10\03\12\12\13\09\16\01\17\05\18\02\19\03\1a\07\1c\02\1d\01\1f\16 \03+\03,\02-\0b.\010\031\022\01\a7\02\a9\02\aa\04\ab\08\fa\02\fb\05\fd\04\fe\03\ff\09\adxy\8b\8d\a20WX\8b\8c\90\1c\1d\dd\0e\0fKL\fb\fc./?\5c]_\b5\e2\84\8d\8e\91\92\a9\b1\ba\bb\c5\c6\c9\ca\de\e4\e5\ff\00\04\11\12)147:;=IJ]\84\8e\92\a9\b1\b4\ba\bb\c6\ca\ce\cf\e4\e5\00\04\0d\0e\11\12)14:;EFIJ^de\84\91\9b\9d\c9\ce\cf\0d\11)EIWde\8d\91\a9\b4\ba\bb\c5\c9\df\e4\e5\f0\0d\11EIde\80\84\b2\bc\be\bf\d5\d7\f0\f1\83\85\8b\a4\a6\be\bf\c5\c7\ce\cf\da\dbH\98\bd\cd\c6\ce\cfINOWY^_\89\8e\8f\b1\b6\b7\bf\c1\c6\c7\d7\11\16\17[\5c\f6\f7\fe\ff\80\0dmq\de\df\0e\0f\1fno\1c\1d_}~\ae\af\bb\bc\fa\16\17\1e\1fFGNOXZ\5c^~\7f\b5\c5\d4\d5\dc\f0\f1\f5rs\8ftu\96/_&./\a7\af\b7\bf\c7\cf\d7\df\9a@\97\980\8f\1f\c0\c1\ce\ffNOZ[\07\08\0f\10'/\ee\efno7=?BE\90\91\fe\ffSgu\c8\c9\d0\d1\d8\d9\e7\fe\ff\00 _\22\82\df\04\82D\08\1b\04\06\11\81\ac\0e\80\ab5(\0b\80\e0\03\19\08\01\04/\044\04\07\03\01\07\06\07\11\0aP\0f\12\07U\07\03\04\1c\0a\09\03\08\03\07\03\02\03\03\03\0c\04\05\03\0b\06\01\0e\15\05:\03\11\07\06\05\10\07W\07\02\07\15\0dP\04C\03-\03\01\04\11\06\0f\0c:\04\1d%_ m\04j%\80\c8\05\82\b0\03\1a\06\82\fd\03Y\07\15\0b\17\09\14\0c\14\0cj\06\0a\06\1a\06Y\07+\05F\0a,\04\0c\04\01\031\0b,\04\1a\06\0b\03\80\ac\06\0a\06!?L\04-\03t\08<\03\0f\03<\078\08+\05\82\ff\11\18\08/\11-\03 \10!\0f\80\8c\04\82\97\19\0b\15\88\94\05/\05;\07\02\0e\18\09\80\b3-t\0c\80\d6\1a\0c\05\80\ff\05\80\df\0c\ee\0d\03\84\8d\037\09\81\5c\14\80\b8\08\80\cb*8\03\0a\068\08F\08\0c\06t\0b\1e\03Z\04Y\09\80\83\18\1c\0a\16\09L\04\80\8a\06\ab\a4\0c\17\041\a1\04\81\da&\07\0c\05\05\80\a5\11\81m\10x(*\06L\04\80\8d\04\80\be\03\1b\03\0f\0d\00\06\01\01\03\01\04\02\08\08\09\02\0a\05\0b\02\0e\04\10\01\11\02\12\05\13\11\14\01\15\02\17\02\19\0d\1c\05\1d\08$\01j\03k\02\bc\02\d1\02\d4\0c\d5\09\d6\02\d7\02\da\01\e0\05\e1\02\e8\02\ee \f0\04\f8\02\f9\02\fa\02\fb\01\0c';>NO\8f\9e\9e\9f\06\07\096=>V\f3\d0\d1\04\14\1867VW\7f\aa\ae\af\bd5\e0\12\87\89\8e\9e\04\0d\0e\11\12)14:EFIJNOde\5c\b6\b7\1b\1c\07\08\0a\0b\14\1769:\a8\a9\d8\d9\097\90\91\a8\07\0a;>fi\8f\92o_\ee\efZb\9a\9b'(U\9d\a0\a1\a3\a4\a7\a8\ad\ba\bc\c4\06\0b\0c\15\1d:?EQ\a6\a7\cc\cd\a0\07\19\1a\22%>?\c5\c6\04 #%&(38:HJLPSUVXZ\5c^`cefksx}\7f\8a\a4\aa\af\b0\c0\d0\ae\afy\ccno\93^\22{\05\03\04-\03f\03\01/.\80\82\1d\031\0f\1c\04$\09\1e\05+\05D\04\0e*\80\aa\06$\04$\04(\084\0b\01\80\90\817\09\16\0a\08\80\989\03c\08\090\16\05!\03\1b\05\01@8\04K\05/\04\0a\07\09\07@ '\04\0c\096\03:\05\1a\07\04\0c\07PI73\0d3\07.\08\0a\81&RN(\08*V\1c\14\17\09N\04\1e\0fC\0e\19\07\0a\06H\08'\09u\0b?A*\06;\05\0a\06Q\06\01\05\10\03\05\80\8bb\1eH\08\0a\80\a6^\22E\0b\0a\06\0d\139\07\0a6,\04\10\80\c0\00\00\00Error\00\00\00\00\03\00\00\83\04 \00\91\05`\00]\13\a0\00\12\17\a0\1e\0c \e0\1e\ef, +*0\a0+o\a6`,\02\a8\e0,\1e\fb\e0-\00\fe\a05\9e\ff\e05\fd\01a6\01\0a\a16$\0da7\ab\0e\e18/\18!90\1caF\f3\1e\a1J\f0jaNOo\a1N\9d\bc!Oe\d1\e1O\00\da!P\00\e0\e1Q0\e1aS\ec\e2\a1T\d0\e8\e1T \00.U\f0\01\bfU\00p\00\07\00-\01\01\01\02\01\02\01\01H\0b0\15\10\01e\07\02\06\02\02\01\04#\01\1e\1b[\0b:\09\09\01\18\04\01\09\01\03\01\05+\03w\0f\01 7\01\01\01\04\08\04\01\03\07\0a\02\1d\01:\01\01\01\02\04\08\01\09\01\0a\02\1a\01\02\029\01\04\02\04\02\02\03\03\01\1e\02\03\01\0b\029\01\04\05\01\02\04\01\14\02\16\06\01\01:\01\01\02\01\04\08\01\07\03\0a\02\1e\01;\01\01\01\0c\01\09\01(\01\03\019\03\05\03\01\04\07\02\0b\02\1d\01:\01\02\01\02\01\03\01\05\02\07\02\0b\02\1c\029\02\01\01\02\04\08\01\09\01\0a\02\1d\01H\01\04\01\02\03\01\01\08\01Q\01\02\07\0c\08b\01\02\09\0b\06J\02\1b\01\01\01\01\017\0e\01\05\01\02\05\0b\01$\09\01f\04\01\06\01\02\02\02\19\02\04\03\10\04\0d\01\02\02\06\01\0f\01\00\03\00\03\1d\03\1d\02\1e\02@\02\01\07\08\01\02\0b\09\01-\03w\02\22\01v\03\04\02\09\01\06\03\db\02\02\01:\01\01\07\01\01\01\01\02\08\06\0a\02\010\11?\040\07\01\01\05\01(\09\0c\02 \04\02\02\01\038\01\01\02\03\01\01\03:\08\02\02\98\03\01\0d\01\07\04\01\06\01\03\02\c6:\01\05\00\01\c3!\00\03\8d\01` \00\06i\02\00\04\01\0a \02P\02\00\01\03\01\04\01\19\02\05\01\97\02\1a\12\0d\01&\08\19\0b.\030\01\02\04\02\02'\01C\06\02\02\02\02\0c\01\08\01/\013\01\01\03\02\02\05\02\01\01*\02\08\01\ee\01\02\01\04\01\00\01\00\10\10\10\00\02\00\01\e2\01\95\05\00\03\01\02\05\04(\03\04\01\a5\02\00\04\00\02\99\0b\b0\016\0f8\031\04\02\02E\03$\05\01\08>\01\0c\024\09\0a\04\02\01_\03\02\01\01\02\06\01\a0\01\03\08\15\029\02\01\01\01\01\16\01\0e\07\03\05\c3\08\02\03\01\01\17\01Q\01\02\06\01\01\02\01\01\02\01\02\eb\01\02\04\06\02\01\02\1b\02U\08\02\01\01\02j\01\01\01\02\06\01\01e\03\02\04\01\05\00\09\01\02\f5\01\0a\02\01\01\04\01\90\04\02\02\04\01 \0a(\06\02\04\08\01\09\06\02\03.\0d\01\02\00\07\01\06\01\01R\16\02\07\01\02\01\02z\06\03\01\01\02\01\07\01\01H\02\03\01\01\01\00\02\00\05;\07\00\01?\04Q\01\00\02\00\01\01\03\04\05\08\08\02\07\1e\04\94\03\007\042\08\01\0e\01\16\05\01\0f\00\07\01\11\02\07\01\02\01\05\00\07\00\04\00\07m\07\00`\80\f0\00")) diff --git a/benches/benchmark.rs b/benches/benchmark.rs new file mode 100644 index 0000000000000000000000000000000000000000..1a884aac6c733786cdf6859758735867cba969f9 --- /dev/null +++ b/benches/benchmark.rs @@ -0,0 +1,175 @@ +use anyhow::Result; +use criterion::{criterion_group, criterion_main, Criterion}; +use serde::{Deserialize, Serialize}; +use wasmtime::*; +use wasmtime_wasi::{sync::WasiCtxBuilder, WasiCtx}; + +fn gcd(engine: Engine, module: Module) -> Result<()> { + let mut store = Store::new(&engine, ()); + let instance = Instance::new(&mut store, &module, &[])?; + + // Invoke `gcd` export + let gcd = instance.get_typed_func::<(i32, i32), i32, _>(&mut store, "gcd")?; + gcd.call(&mut store, (6, 27))?; + + Ok(()) +} + +fn gcd_wasi(engine: Engine, module: Module, linker: Linker) -> Result<()> { + let wasi = WasiCtxBuilder::new() + .inherit_stdio() + .inherit_args() + .unwrap() + .build(); + let mut store = Store::new(&engine, wasi); + + let instance = linker.instantiate(&mut store, &module)?; + let gcd = instance.get_typed_func::<(i32, i32), i32, _>(&mut store, "gcd")?; + gcd.call(&mut store, (6, 27))?; + + Ok(()) +} + +#[derive(Deserialize, Serialize)] +struct Data { + arg_uri: String, + arg_body: String, + arg_secret: String, +} +fn authentication(engine: Engine, module: Module) -> Result<()> { + let mut store = Store::new(&engine, ()); + let instance = Instance::new(&mut store, &module, &[])?; + + let p: Data = Data { + arg_uri: "uri".to_string(), + arg_body: "body".to_string(), + arg_secret: "fff111fff".to_string(), + }; + let serialized = serde_json::to_string(&p).unwrap(); + run_module(store, instance, "authentication", &serialized)?; + + Ok(()) +} + +fn authentication_wasi(engine: Engine, module: Module, linker: Linker) -> Result<()> { + let wasi = WasiCtxBuilder::new() + .inherit_stdio() + .inherit_args() + .unwrap() + .build(); + let mut store = Store::new(&engine, wasi); + let instance = linker.instantiate(&mut store, &module)?; + + let p: Data = Data { + arg_uri: "uri".to_string(), + arg_body: "body".to_string(), + arg_secret: "fff111fff".to_string(), + }; + let serialized = serde_json::to_string(&p).unwrap(); + run_module(store, instance, "authentication", &serialized)?; + + Ok(()) +} + +fn echo_string_b(engine: Engine, module: Module) -> Result<()> { + let mut store = Store::new(&engine, ()); + let instance = Instance::new(&mut store, &module, &[])?; + + run_module(store, instance, "echo_string", "echo")?; + Ok(()) +} + +fn echo_string_b_wasi(engine: Engine, module: Module, linker: Linker) -> Result<()> { + let wasi = WasiCtxBuilder::new() + .inherit_stdio() + .inherit_args() + .unwrap() + .build(); + let mut store = Store::new(&engine, wasi); + + let instance = linker.instantiate(&mut store, &module)?; + run_module(store, instance, "echo_string", "echo")?; + + Ok(()) +} + +fn run_module( + mut store: Store, + instance: Instance, + function_name: &str, + data: &str, +) -> Result<()> { + let memory = instance + .get_memory(&mut store, "memory") + .ok_or(anyhow::format_err!("failed to find `memory` export"))?; + let heap_base_global = instance + .get_global(&mut store, "__heap_base") + .ok_or(anyhow::format_err!("failed to find `__heap_base` export"))?; + let heap_base = heap_base_global + .get(&mut store) + .i32() + .ok_or(anyhow::format_err!("failed to find `__heap_base` export"))?; + + memory.grow(&mut store, 1)?; + memory.write(&mut store, heap_base as usize, data.as_bytes())?; + + // Invoke `function_name` export + let function = + instance.get_typed_func::<(i32, i32), (i32, i32), _>(&mut store, function_name)?; + let (pointer, length) = function.call(&mut store, (heap_base, data.len() as i32))?; + + let mut total_buffer: [u8; 1024] = [0; 1024]; + let buffer = &mut total_buffer[0..length as usize]; + memory.read(&store, pointer as usize, buffer)?; + let _result = match std::str::from_utf8(&buffer) { + Ok(v) => v, + Err(e) => panic!("Invalid UTF-8 sequence: {}", e), + }; + + Ok(()) +} + +fn criterion_benchmark(c: &mut Criterion) { + c.bench_function("gcd", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/gcd.wat").unwrap(); + b.iter(|| gcd(engine.clone(), module.clone())) + }); + c.bench_function("gcd_wasi", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/gcd.wat").unwrap(); + let mut linker = Linker::new(&engine); + wasmtime_wasi::add_to_linker(&mut linker, |s| s).unwrap(); + + b.iter(|| gcd_wasi(engine.clone(), module.clone(), linker.clone())) + }); + c.bench_function("echo_string_b", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/echo_string.wat").unwrap(); + b.iter(|| echo_string_b(engine.clone(), module.clone())) + }); + c.bench_function("echo_string_b_wasi", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/echo_string.wat").unwrap(); + let mut linker = Linker::new(&engine); + wasmtime_wasi::add_to_linker(&mut linker, |s| s).unwrap(); + + b.iter(|| echo_string_b_wasi(engine.clone(), module.clone(), linker.clone())) + }); + c.bench_function("authentication", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/authentication.wat").unwrap(); + b.iter(|| authentication(engine.clone(), module.clone())) + }); + c.bench_function("authentication_wasi", |b| { + let engine = Engine::default(); + let module = Module::from_file(&engine, "benches/authentication.wat").unwrap(); + let mut linker = Linker::new(&engine); + wasmtime_wasi::add_to_linker(&mut linker, |s| s).unwrap(); + + b.iter(|| authentication_wasi(engine.clone(), module.clone(), linker.clone())) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/benches/echo_string.wat b/benches/echo_string.wat new file mode 100644 index 0000000000000000000000000000000000000000..928cad426dffa1c6bd4345dd7141ec9243028617 --- /dev/null +++ b/benches/echo_string.wat @@ -0,0 +1,5985 @@ +(module + (type (;0;) (func (param i32 i32))) + (type (;1;) (func (param i32 i32 i32) (result i32))) + (type (;2;) (func (param i32 i32) (result i32))) + (type (;3;) (func (param i32 i32 i32 i32))) + (type (;4;) (func (param i32 i32 i32))) + (type (;5;) (func (param i32 i32) (result i32 i32))) + (type (;6;) (func (param i32 i32 i32 i32) (result i32))) + (type (;7;) (func (param i32) (result i64))) + (type (;8;) (func (param i32))) + (type (;9;) (func (param i32) (result i32))) + (type (;10;) (func (result i32))) + (type (;11;) (func (param i32 i32 i32 i32 i32) (result i32))) + (type (;12;) (func)) + (func $_ZN5alloc7raw_vec11finish_grow17hb0d15f3315376671E.llvm.5498297495365631718 (type 3) (param i32 i32 i32 i32) + (local i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + local.get 2 + i32.eqz + br_if 0 (;@9;) + i32.const 1 + local.set 4 + local.get 1 + i32.const 0 + i32.lt_s + br_if 1 (;@8;) + local.get 3 + i32.load + local.tee 5 + i32.eqz + br_if 2 (;@7;) + local.get 3 + i32.load offset=4 + local.tee 3 + br_if 4 (;@5;) + local.get 1 + i32.eqz + br_if 3 (;@6;) + br 5 (;@4;) + end + local.get 0 + local.get 1 + i32.store offset=4 + i32.const 1 + local.set 4 + end + i32.const 0 + local.set 1 + br 6 (;@1;) + end + local.get 1 + br_if 2 (;@4;) + end + local.get 2 + local.set 3 + br 2 (;@3;) + end + local.get 5 + local.get 3 + local.get 2 + local.get 1 + call $__rust_realloc + local.tee 3 + br_if 1 (;@3;) + br 2 (;@2;) + end + local.get 1 + local.get 2 + call $__rust_alloc + local.tee 3 + i32.eqz + br_if 1 (;@2;) + end + local.get 0 + local.get 3 + i32.store offset=4 + i32.const 0 + local.set 4 + br 1 (;@1;) + end + local.get 0 + local.get 1 + i32.store offset=4 + local.get 2 + local.set 1 + end + local.get 0 + local.get 4 + i32.store + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.store) + (func $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h8f755dd0b2b93d41E (type 4) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + block ;; label = @1 + local.get 1 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.const 1 + i32.shl + local.tee 4 + local.get 2 + local.get 4 + local.get 2 + i32.gt_u + select + local.tee 2 + i32.const 8 + local.get 2 + i32.const 8 + i32.gt_u + select + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + i32.const 8 + i32.add + i32.const 1 + i32.store + local.get 3 + local.get 1 + i32.store offset=20 + local.get 3 + local.get 0 + i32.load + i32.store offset=16 + br 1 (;@2;) + end + local.get 3 + i32.const 0 + i32.store offset=16 + end + local.get 3 + local.get 2 + i32.const 1 + local.get 3 + i32.const 16 + i32.add + call $_ZN5alloc7raw_vec11finish_grow17hb0d15f3315376671E.llvm.5498297495365631718 + block ;; label = @2 + local.get 3 + i32.load + i32.const 1 + i32.ne + br_if 0 (;@2;) + local.get 3 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=4 + local.get 0 + call $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE + unreachable + end + local.get 0 + local.get 3 + i64.load offset=4 align=4 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + global.set $__stack_pointer + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h4b49014830cafe63E + unreachable) + (func $echo_string (type 5) (param i32 i32) (result i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 0 + i32.lt_s + br_if 0 (;@2;) + i32.const 1 + local.set 3 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 1 + i32.const 1 + call $__rust_alloc + local.tee 3 + i32.eqz + br_if 2 (;@1;) + end + local.get 2 + local.get 1 + i32.store offset=4 + local.get 2 + local.get 3 + i32.store + local.get 3 + local.get 0 + local.get 1 + call $memcpy + drop + local.get 2 + local.get 1 + i32.store offset=8 + local.get 2 + local.get 1 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h8f755dd0b2b93d41E + local.get 2 + i32.load + local.get 2 + i32.load offset=8 + i32.add + i32.const 98 + i32.store8 + local.get 2 + i32.load + local.set 1 + local.get 2 + i32.load offset=8 + local.set 3 + block ;; label = @3 + local.get 2 + i32.load offset=4 + local.tee 0 + i32.eqz + br_if 0 (;@3;) + local.get 1 + local.get 0 + i32.const 1 + call $__rust_dealloc + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + local.get 1 + local.get 3 + i32.const 1 + i32.add + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h4b49014830cafe63E + unreachable + end + local.get 1 + i32.const 1 + call $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE + unreachable) + (func $__rust_alloc (type 2) (param i32 i32) (result i32) + (local i32) + local.get 0 + local.get 1 + call $__rdl_alloc + local.set 2 + local.get 2 + return) + (func $__rust_dealloc (type 4) (param i32 i32 i32) + local.get 0 + local.get 1 + local.get 2 + call $__rdl_dealloc + return) + (func $__rust_realloc (type 6) (param i32 i32 i32 i32) (result i32) + (local i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call $__rdl_realloc + local.set 4 + local.get 4 + return) + (func $__rust_alloc_error_handler (type 0) (param i32 i32) + local.get 0 + local.get 1 + call $__rg_oom + return) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17h824575441ffde977E (type 7) (param i32) (result i64) + i64.const 9147559743429524724) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hd6ff5e55e3ba8f3eE (type 7) (param i32) (result i64) + i64.const -2306166442677192007) + (func $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17he8a3041642413ca6E (type 4) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + block ;; label = @1 + local.get 1 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.const 1 + i32.shl + local.tee 4 + local.get 2 + local.get 4 + local.get 2 + i32.gt_u + select + local.tee 2 + i32.const 8 + local.get 2 + i32.const 8 + i32.gt_u + select + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.eqz + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + i32.const 8 + i32.add + i32.const 1 + i32.store + local.get 3 + local.get 1 + i32.store offset=20 + local.get 3 + local.get 0 + i32.load + i32.store offset=16 + br 1 (;@2;) + end + local.get 3 + i32.const 0 + i32.store offset=16 + end + local.get 3 + local.get 2 + i32.const 1 + local.get 3 + i32.const 16 + i32.add + call $_ZN5alloc7raw_vec11finish_grow17hb5ee4cf686986250E + block ;; label = @2 + local.get 3 + i32.load + i32.const 1 + i32.ne + br_if 0 (;@2;) + local.get 3 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=4 + local.get 0 + call $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE + unreachable + end + local.get 0 + local.get 3 + i64.load offset=4 align=4 + i64.store align=4 + local.get 3 + i32.const 32 + i32.add + global.set $__stack_pointer + return + end + call $_ZN5alloc7raw_vec17capacity_overflow17h4b49014830cafe63E + unreachable) + (func $_ZN4core3ptr100drop_in_place$LT$$RF$mut$u20$std..io..Write..write_fmt..Adapter$LT$alloc..vec..Vec$LT$u8$GT$$GT$$GT$17ha3e29bb00fd76937E (type 8) (param i32)) + (func $_ZN4core3ptr226drop_in_place$LT$std..error..$LT$impl$u20$core..convert..From$LT$alloc..string..String$GT$$u20$for$u20$alloc..boxed..Box$LT$dyn$u20$std..error..Error$u2b$core..marker..Sync$u2b$core..marker..Send$GT$$GT$..from..StringError$GT$17hfddd0945500a84e5E (type 8) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.const 4 + i32.add + i32.load + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@1;) + local.get 0 + local.get 1 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN4core3ptr70drop_in_place$LT$std..panicking..begin_panic_handler..PanicPayload$GT$17he4eedabc21d9757dE (type 8) (param i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.load offset=4 + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@1;) + local.get 1 + local.get 0 + i32.const 1 + call $__rust_dealloc + end) + (func $_ZN4core6option15Option$LT$T$GT$6unwrap17h5a7df91b5d6090cbE (type 9) (param i32) (result i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + i32.const 1048600 + i32.const 43 + i32.const 1048696 + call $_ZN4core9panicking5panic17hec1fc057bd0baf0bE + unreachable + end + local.get 0) + (func $_ZN4core6option15Option$LT$T$GT$6unwrap17hf45be9e7d87cbf99E (type 2) (param i32 i32) (result i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + i32.const 1048600 + i32.const 43 + local.get 1 + call $_ZN4core9panicking5panic17hec1fc057bd0baf0bE + unreachable + end + local.get 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h2e09602723e0822aE (type 2) (param i32 i32) (result i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 0 + i32.load + local.set 0 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 127 + i32.gt_u + br_if 0 (;@2;) + block ;; label = @3 + local.get 0 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.const 4 + i32.add + i32.load + i32.ne + br_if 0 (;@3;) + local.get 0 + local.get 3 + i32.const 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17he8a3041642413ca6E + local.get 0 + i32.load offset=8 + local.set 3 + end + local.get 0 + local.get 3 + i32.const 1 + i32.add + i32.store offset=8 + local.get 0 + i32.load + local.get 3 + i32.add + local.get 1 + i32.store8 + br 1 (;@1;) + end + local.get 2 + i32.const 0 + i32.store offset=12 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 2048 + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + local.get 1 + i32.const 65536 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=15 + local.get 2 + local.get 1 + i32.const 18 + i32.shr_u + i32.const 240 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 4 + local.set 1 + br 2 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=14 + local.get 2 + local.get 1 + i32.const 12 + i32.shr_u + i32.const 224 + i32.or + i32.store8 offset=12 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + i32.const 3 + local.set 1 + br 1 (;@2;) + end + local.get 2 + local.get 1 + i32.const 63 + i32.and + i32.const 128 + i32.or + i32.store8 offset=13 + local.get 2 + local.get 1 + i32.const 6 + i32.shr_u + i32.const 192 + i32.or + i32.store8 offset=12 + i32.const 2 + local.set 1 + end + block ;; label = @2 + local.get 0 + i32.const 4 + i32.add + i32.load + local.get 0 + i32.const 8 + i32.add + local.tee 4 + i32.load + local.tee 3 + i32.sub + local.get 1 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.get 3 + local.get 1 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17he8a3041642413ca6E + local.get 4 + i32.load + local.set 3 + end + local.get 0 + i32.load + local.get 3 + i32.add + local.get 2 + i32.const 12 + i32.add + local.get 1 + call $memcpy + drop + local.get 4 + local.get 3 + local.get 1 + i32.add + i32.store + end + local.get 2 + i32.const 16 + i32.add + global.set $__stack_pointer + i32.const 0) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h81d0daecbbff04b5E (type 2) (param i32 i32) (result i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 0 + i32.load + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=8 + local.get 2 + i32.const 4 + i32.add + i32.const 1048576 + local.get 2 + i32.const 8 + i32.add + call $_ZN4core3fmt5write17hbbaf39f09bf49efbE + local.set 1 + local.get 2 + i32.const 32 + i32.add + global.set $__stack_pointer + local.get 1) + (func $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17heed6350c990c190fE (type 1) (param i32 i32 i32) (result i32) + (local i32 i32) + block ;; label = @1 + local.get 0 + i32.load + local.tee 3 + i32.const 4 + i32.add + i32.load + local.get 3 + i32.const 8 + i32.add + local.tee 4 + i32.load + local.tee 0 + i32.sub + local.get 2 + i32.ge_u + br_if 0 (;@1;) + local.get 3 + local.get 0 + local.get 2 + call $_ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17he8a3041642413ca6E + local.get 4 + i32.load + local.set 0 + end + local.get 3 + i32.load + local.get 0 + i32.add + local.get 1 + local.get 2 + call $memcpy + drop + local.get 4 + local.get 0 + local.get 2 + i32.add + i32.store + i32.const 0) + (func $_ZN5alloc7raw_vec11finish_grow17hb5ee4cf686986250E (type 3) (param i32 i32 i32 i32) + (local i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 2 + i32.eqz + br_if 0 (;@7;) + i32.const 1 + local.set 4 + local.get 1 + i32.const 0 + i32.lt_s + br_if 1 (;@6;) + local.get 3 + i32.load + local.tee 5 + i32.eqz + br_if 3 (;@4;) + local.get 3 + i32.load offset=4 + local.tee 3 + br_if 2 (;@5;) + local.get 1 + br_if 4 (;@3;) + local.get 2 + local.set 3 + br 5 (;@2;) + end + local.get 0 + local.get 1 + i32.store offset=4 + i32.const 1 + local.set 4 + end + i32.const 0 + local.set 1 + br 4 (;@1;) + end + local.get 5 + local.get 3 + local.get 2 + local.get 1 + call $__rust_realloc + local.set 3 + br 2 (;@2;) + end + local.get 1 + br_if 0 (;@3;) + local.get 2 + local.set 3 + br 1 (;@2;) + end + local.get 1 + local.get 2 + call $__rust_alloc + local.set 3 + end + block ;; label = @2 + local.get 3 + i32.eqz + br_if 0 (;@2;) + local.get 0 + local.get 3 + i32.store offset=4 + i32.const 0 + local.set 4 + br 1 (;@1;) + end + local.get 0 + local.get 1 + i32.store offset=4 + local.get 2 + local.set 1 + end + local.get 0 + local.get 4 + i32.store + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.store) + (func $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h189fbca0373ab828E (type 2) (param i32 i32) (result i32) + (local i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 1 + i32.const 9 + i32.lt_u + br_if 0 (;@5;) + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 1 + i32.gt_u + br_if 1 (;@4;) + br 2 (;@3;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h2a27207ee9af7fe9E + local.set 2 + br 2 (;@2;) + end + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 1 + end + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 3 + local.get 3 + local.get 3 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 3 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 3 + i32.gt_u + select + local.get 1 + i32.sub + local.get 0 + i32.le_u + br_if 0 (;@2;) + local.get 1 + i32.const 16 + local.get 0 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const -5 + i32.add + local.get 0 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.tee 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const -4 + i32.add + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h2a27207ee9af7fe9E + local.tee 3 + i32.eqz + br_if 0 (;@2;) + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hae04a1e6cfd1658cE + local.set 0 + block ;; label = @3 + block ;; label = @4 + local.get 1 + i32.const -1 + i32.add + local.tee 2 + local.get 3 + i32.and + br_if 0 (;@4;) + local.get 0 + local.set 1 + br 1 (;@3;) + end + local.get 2 + local.get 3 + i32.add + i32.const 0 + local.get 1 + i32.sub + i32.and + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hae04a1e6cfd1658cE + local.set 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.get 2 + i32.const 0 + local.get 1 + local.get 2 + local.get 0 + i32.sub + local.get 3 + i32.gt_u + select + i32.add + local.tee 1 + local.get 0 + i32.sub + local.tee 2 + i32.sub + local.set 3 + block ;; label = @4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + br_if 0 (;@4;) + local.get 1 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h2f90bddfab9fdaf9E + br 1 (;@3;) + end + local.get 0 + i32.load + local.set 0 + local.get 1 + local.get 3 + i32.store offset=4 + local.get 1 + local.get 0 + local.get 2 + i32.add + i32.store + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + br_if 1 (;@1;) + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 4 + i32.add + i32.le_u + br_if 1 (;@1;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 2 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 2 + local.get 0 + local.get 4 + i32.sub + local.tee 0 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h2f90bddfab9fdaf9E + br 1 (;@1;) + end + local.get 2 + return + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + drop + local.get 0) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h2a27207ee9af7fe9E (type 9) (param i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i64) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 1 + global.set $__stack_pointer + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.const 245 + i32.lt_u + br_if 0 (;@3;) + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 3 + local.get 3 + local.get 3 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 3 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 3 + i32.gt_u + select + local.get 0 + i32.le_u + br_if 2 (;@1;) + local.get 0 + i32.const 4 + i32.add + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 3 + i32.const 0 + i32.load offset=1048888 + i32.eqz + br_if 1 (;@2;) + i32.const 0 + local.set 5 + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + i32.const 31 + local.set 5 + local.get 3 + i32.const 16777215 + i32.gt_u + br_if 0 (;@4;) + local.get 3 + i32.const 6 + local.get 3 + i32.const 8 + i32.shr_u + i32.clz + local.tee 0 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 0 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 5 + end + i32.const 0 + local.get 3 + i32.sub + local.set 2 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 5 + i32.const 2 + i32.shl + i32.const 1049156 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@6;) + local.get 3 + local.get 5 + call $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h26ab250442f6ee68E + i32.shl + local.set 6 + i32.const 0 + local.set 7 + i32.const 0 + local.set 4 + loop ;; label = @7 + block ;; label = @8 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 8 + local.get 3 + i32.lt_u + br_if 0 (;@8;) + local.get 8 + local.get 3 + i32.sub + local.tee 8 + local.get 2 + i32.ge_u + br_if 0 (;@8;) + local.get 8 + local.set 2 + local.get 0 + local.set 4 + local.get 8 + br_if 0 (;@8;) + i32.const 0 + local.set 2 + local.get 0 + local.set 4 + br 3 (;@5;) + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 8 + local.get 7 + local.get 8 + local.get 0 + local.get 6 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + i32.load + local.tee 0 + i32.ne + select + local.get 7 + local.get 8 + select + local.set 7 + local.get 6 + i32.const 1 + i32.shl + local.set 6 + local.get 0 + br_if 0 (;@7;) + end + block ;; label = @7 + local.get 7 + i32.eqz + br_if 0 (;@7;) + local.get 7 + local.set 0 + br 2 (;@5;) + end + local.get 4 + br_if 2 (;@4;) + end + i32.const 0 + local.set 4 + i32.const 1 + local.get 5 + i32.shl + call $_ZN8dlmalloc8dlmalloc9left_bits17hf3cde9f9b07a0a60E + i32.const 0 + i32.load offset=1048888 + i32.and + local.tee 0 + i32.eqz + br_if 3 (;@2;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc9least_bit17h2f155e22ffd5c3eaE + i32.ctz + i32.const 2 + i32.shl + i32.const 1049156 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 3 (;@2;) + end + loop ;; label = @5 + local.get 0 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 7 + local.get 3 + i32.ge_u + local.get 7 + local.get 3 + i32.sub + local.tee 7 + local.get 2 + i32.lt_u + i32.and + local.tee 6 + select + local.set 4 + local.get 7 + local.get 2 + local.get 6 + select + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17hf42853009da41559E + local.tee 0 + br_if 0 (;@5;) + end + local.get 4 + i32.eqz + br_if 2 (;@2;) + end + block ;; label = @4 + i32.const 0 + i32.load offset=1049284 + local.tee 0 + local.get 3 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + local.get 0 + local.get 3 + i32.sub + i32.ge_u + br_if 2 (;@2;) + end + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 7 + local.get 4 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + block ;; label = @4 + block ;; label = @5 + local.get 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.lt_u + br_if 0 (;@5;) + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + block ;; label = @6 + local.get 2 + i32.const 256 + i32.lt_u + br_if 0 (;@6;) + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + br 2 (;@4;) + end + local.get 2 + i32.const 3 + i32.shr_u + local.tee 4 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 2 + block ;; label = @6 + block ;; label = @7 + i32.const 0 + i32.load offset=1048884 + local.tee 6 + i32.const 1 + local.get 4 + i32.shl + local.tee 4 + i32.and + i32.eqz + br_if 0 (;@7;) + local.get 2 + i32.load offset=8 + local.set 4 + br 1 (;@6;) + end + i32.const 0 + local.get 6 + local.get 4 + i32.or + i32.store offset=1048884 + local.get 2 + local.set 4 + end + local.get 2 + local.get 7 + i32.store offset=8 + local.get 4 + local.get 7 + i32.store offset=12 + local.get 7 + local.get 2 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + br 1 (;@4;) + end + local.get 0 + local.get 2 + local.get 3 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h4d093e278ca1757dE + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + i32.eqz + br_if 1 (;@2;) + br 2 (;@1;) + end + i32.const 16 + local.get 0 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const -5 + i32.add + local.get 0 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 3 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + i32.const 0 + i32.load offset=1048884 + local.tee 7 + local.get 3 + i32.const 3 + i32.shr_u + local.tee 2 + i32.shr_u + local.tee 0 + i32.const 3 + i32.and + br_if 0 (;@9;) + local.get 3 + i32.const 0 + i32.load offset=1049284 + i32.le_u + br_if 7 (;@2;) + local.get 0 + br_if 1 (;@8;) + i32.const 0 + i32.load offset=1048888 + local.tee 0 + i32.eqz + br_if 7 (;@2;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc9least_bit17h2f155e22ffd5c3eaE + i32.ctz + i32.const 2 + i32.shl + i32.const 1049156 + i32.add + i32.load + local.tee 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.get 3 + i32.sub + local.set 2 + block ;; label = @10 + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17hf42853009da41559E + local.tee 0 + i32.eqz + br_if 0 (;@10;) + loop ;; label = @11 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.get 3 + i32.sub + local.tee 7 + local.get 2 + local.get 7 + local.get 2 + i32.lt_u + local.tee 7 + select + local.set 2 + local.get 0 + local.get 4 + local.get 7 + select + local.set 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17hf42853009da41559E + local.tee 0 + br_if 0 (;@11;) + end + end + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 7 + local.get 4 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + local.get 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.lt_u + br_if 5 (;@4;) + local.get 7 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + local.set 7 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 7 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + i32.const 0 + i32.load offset=1049284 + local.tee 4 + i32.eqz + br_if 4 (;@5;) + local.get 4 + i32.const 3 + i32.shr_u + local.tee 8 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 6 + i32.const 0 + i32.load offset=1049292 + local.set 4 + i32.const 0 + i32.load offset=1048884 + local.tee 5 + i32.const 1 + local.get 8 + i32.shl + local.tee 8 + i32.and + i32.eqz + br_if 2 (;@7;) + local.get 6 + i32.load offset=8 + local.set 8 + br 3 (;@6;) + end + block ;; label = @9 + block ;; label = @10 + local.get 0 + i32.const -1 + i32.xor + i32.const 1 + i32.and + local.get 2 + i32.add + local.tee 3 + i32.const 3 + i32.shl + local.tee 4 + i32.const 1048900 + i32.add + i32.load + local.tee 0 + i32.const 8 + i32.add + i32.load + local.tee 2 + local.get 4 + i32.const 1048892 + i32.add + local.tee 4 + i32.eq + br_if 0 (;@10;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@9;) + end + i32.const 0 + local.get 7 + i32.const -2 + local.get 3 + i32.rotl + i32.and + i32.store offset=1048884 + end + local.get 0 + local.get 3 + i32.const 3 + i32.shl + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h4d093e278ca1757dE + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 7 (;@1;) + end + block ;; label = @8 + block ;; label = @9 + i32.const 1 + local.get 2 + i32.const 31 + i32.and + local.tee 2 + i32.shl + call $_ZN8dlmalloc8dlmalloc9left_bits17hf3cde9f9b07a0a60E + local.get 0 + local.get 2 + i32.shl + i32.and + call $_ZN8dlmalloc8dlmalloc9least_bit17h2f155e22ffd5c3eaE + i32.ctz + local.tee 2 + i32.const 3 + i32.shl + local.tee 7 + i32.const 1048900 + i32.add + i32.load + local.tee 0 + i32.const 8 + i32.add + i32.load + local.tee 4 + local.get 7 + i32.const 1048892 + i32.add + local.tee 7 + i32.eq + br_if 0 (;@9;) + local.get 4 + local.get 7 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + br 1 (;@8;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 2 + i32.rotl + i32.and + i32.store offset=1048884 + end + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 4 + local.get 2 + i32.const 3 + i32.shl + local.get 3 + i32.sub + local.tee 7 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + block ;; label = @8 + i32.const 0 + i32.load offset=1049284 + local.tee 3 + i32.eqz + br_if 0 (;@8;) + local.get 3 + i32.const 3 + i32.shr_u + local.tee 6 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 2 + i32.const 0 + i32.load offset=1049292 + local.set 3 + block ;; label = @9 + block ;; label = @10 + i32.const 0 + i32.load offset=1048884 + local.tee 8 + i32.const 1 + local.get 6 + i32.shl + local.tee 6 + i32.and + i32.eqz + br_if 0 (;@10;) + local.get 2 + i32.load offset=8 + local.set 6 + br 1 (;@9;) + end + i32.const 0 + local.get 8 + local.get 6 + i32.or + i32.store offset=1048884 + local.get 2 + local.set 6 + end + local.get 2 + local.get 3 + i32.store offset=8 + local.get 6 + local.get 3 + i32.store offset=12 + local.get 3 + local.get 2 + i32.store offset=12 + local.get 3 + local.get 6 + i32.store offset=8 + end + i32.const 0 + local.get 4 + i32.store offset=1049292 + i32.const 0 + local.get 7 + i32.store offset=1049284 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 6 (;@1;) + end + i32.const 0 + local.get 5 + local.get 8 + i32.or + i32.store offset=1048884 + local.get 6 + local.set 8 + end + local.get 6 + local.get 4 + i32.store offset=8 + local.get 8 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 6 + i32.store offset=12 + local.get 4 + local.get 8 + i32.store offset=8 + end + i32.const 0 + local.get 7 + i32.store offset=1049292 + i32.const 0 + local.get 2 + i32.store offset=1049284 + br 1 (;@3;) + end + local.get 0 + local.get 2 + local.get 3 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h4d093e278ca1757dE + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + br_if 1 (;@1;) + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1049284 + local.tee 2 + local.get 3 + i32.ge_u + br_if 0 (;@12;) + i32.const 0 + i32.load offset=1049288 + local.tee 0 + local.get 3 + i32.gt_u + br_if 4 (;@8;) + i32.const 0 + local.set 2 + local.get 1 + i32.const 1048884 + local.get 3 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 0 + i32.sub + local.get 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 8 + i32.add + i32.const 65536 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5alloc17hb5f41988a2418891E + local.get 1 + i32.load + local.tee 6 + i32.eqz + br_if 11 (;@1;) + local.get 1 + i32.load offset=8 + local.set 9 + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 1 + i32.load offset=4 + local.tee 8 + i32.add + local.tee 0 + i32.store offset=1049300 + i32.const 0 + i32.const 0 + i32.load offset=1049304 + local.tee 2 + local.get 0 + local.get 2 + local.get 0 + i32.gt_u + select + i32.store offset=1049304 + i32.const 0 + i32.load offset=1049296 + i32.eqz + br_if 1 (;@11;) + i32.const 1049308 + local.set 0 + loop ;; label = @13 + local.get 6 + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h2c1447cf60d7e29cE + i32.eq + br_if 3 (;@10;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@13;) + br 4 (;@9;) + end + end + i32.const 0 + i32.load offset=1049292 + local.set 0 + block ;; label = @12 + local.get 2 + local.get 3 + i32.sub + local.tee 2 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.ge_u + br_if 0 (;@12;) + i32.const 0 + i32.const 0 + i32.store offset=1049292 + i32.const 0 + i32.load offset=1049284 + local.set 3 + i32.const 0 + i32.const 0 + i32.store offset=1049284 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h4d093e278ca1757dE + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 11 (;@1;) + end + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 4 + i32.const 0 + local.get 2 + i32.store offset=1049284 + i32.const 0 + local.get 4 + i32.store offset=1049292 + local.get 4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 10 (;@1;) + end + i32.const 0 + i32.load offset=1049328 + local.tee 0 + i32.eqz + br_if 3 (;@7;) + local.get 6 + local.get 0 + i32.lt_u + br_if 3 (;@7;) + br 7 (;@3;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hfd62a0d440afabc2E + br_if 0 (;@9;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hff8b0da7ceab4a44E + local.get 9 + i32.ne + br_if 0 (;@9;) + local.get 0 + i32.const 0 + i32.load offset=1049296 + call $_ZN8dlmalloc8dlmalloc7Segment5holds17he55c928b90d48049E + br_if 3 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1049328 + local.tee 0 + local.get 6 + local.get 6 + local.get 0 + i32.gt_u + select + i32.store offset=1049328 + local.get 6 + local.get 8 + i32.add + local.set 2 + i32.const 1049308 + local.set 0 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + loop ;; label = @12 + local.get 0 + i32.load + local.get 2 + i32.eq + br_if 1 (;@11;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@12;) + br 2 (;@10;) + end + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hfd62a0d440afabc2E + br_if 0 (;@10;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hff8b0da7ceab4a44E + local.get 9 + i32.eq + br_if 1 (;@9;) + end + i32.const 0 + i32.load offset=1049296 + local.set 4 + i32.const 1049308 + local.set 0 + block ;; label = @10 + loop ;; label = @11 + block ;; label = @12 + local.get 0 + i32.load + local.get 4 + i32.gt_u + br_if 0 (;@12;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h2c1447cf60d7e29cE + local.get 4 + i32.gt_u + br_if 2 (;@10;) + end + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@11;) + end + i32.const 0 + local.set 0 + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h2c1447cf60d7e29cE + local.tee 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.tee 10 + i32.sub + i32.const -23 + i32.add + local.set 0 + local.get 4 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 2 + i32.sub + i32.add + local.tee 0 + local.get 0 + local.get 4 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.lt_u + select + local.tee 5 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + local.get 5 + local.get 10 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 0 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 11 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 12 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 13 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 14 + i32.const 0 + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 15 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 15 + i32.sub + local.tee 16 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 15 + i32.store offset=1049296 + i32.const 0 + local.get 8 + local.get 11 + i32.add + local.get 14 + local.get 12 + local.get 13 + i32.add + i32.add + local.get 16 + i32.add + i32.sub + local.tee 11 + i32.store offset=1049288 + local.get 15 + local.get 11 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 12 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 13 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 14 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 16 + local.get 15 + local.get 11 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.get 16 + local.get 14 + local.get 13 + local.get 12 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049324 + local.get 5 + local.get 10 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + i32.const 0 + i64.load offset=1049308 align=4 + local.set 17 + local.get 2 + i32.const 8 + i32.add + i32.const 0 + i64.load offset=1049316 align=4 + i64.store align=4 + local.get 2 + local.get 17 + i64.store align=4 + i32.const 0 + local.get 9 + i32.store offset=1049320 + i32.const 0 + local.get 8 + i32.store offset=1049312 + i32.const 0 + local.get 6 + i32.store offset=1049308 + i32.const 0 + local.get 2 + i32.store offset=1049316 + loop ;; label = @10 + local.get 0 + i32.const 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17hf49c5964398bab00E + i32.store offset=4 + local.get 2 + local.set 0 + local.get 7 + local.get 2 + i32.const 4 + i32.add + i32.gt_u + br_if 0 (;@10;) + end + local.get 5 + local.get 4 + i32.eq + br_if 7 (;@2;) + local.get 5 + local.get 4 + i32.sub + local.set 0 + local.get 4 + local.get 0 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + block ;; label = @10 + local.get 0 + i32.const 256 + i32.lt_u + br_if 0 (;@10;) + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + br 8 (;@2;) + end + local.get 0 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 0 + block ;; label = @10 + block ;; label = @11 + i32.const 0 + i32.load offset=1048884 + local.tee 7 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@11;) + local.get 0 + i32.load offset=8 + local.set 2 + br 1 (;@10;) + end + i32.const 0 + local.get 7 + local.get 2 + i32.or + i32.store offset=1048884 + local.get 0 + local.set 2 + end + local.get 0 + local.get 4 + i32.store offset=8 + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 7 (;@2;) + end + local.get 0 + i32.load + local.set 7 + local.get 0 + local.get 6 + i32.store + local.get 0 + local.get 0 + i32.load offset=4 + local.get 8 + i32.add + i32.store offset=4 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 2 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 8 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 5 + local.get 6 + local.get 2 + local.get 0 + i32.sub + i32.add + local.tee 2 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 4 + local.get 2 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 7 + local.get 5 + local.get 8 + i32.sub + i32.add + local.tee 0 + local.get 3 + local.get 2 + i32.add + i32.sub + local.set 3 + block ;; label = @9 + i32.const 0 + i32.load offset=1049296 + local.get 0 + i32.eq + br_if 0 (;@9;) + i32.const 0 + i32.load offset=1049292 + local.get 0 + i32.eq + br_if 4 (;@5;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h515c7fa3e4c35eaaE + br_if 5 (;@4;) + block ;; label = @10 + block ;; label = @11 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 7 + i32.const 256 + i32.lt_u + br_if 0 (;@11;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@10;) + end + block ;; label = @11 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 6 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 8 + i32.eq + br_if 0 (;@11;) + local.get 8 + local.get 6 + i32.store offset=12 + local.get 6 + local.get 8 + i32.store offset=8 + br 1 (;@10;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 7 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + local.get 7 + local.get 3 + i32.add + local.set 3 + local.get 0 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 0 + br 5 (;@4;) + end + i32.const 0 + local.get 4 + i32.store offset=1049296 + i32.const 0 + i32.const 0 + i32.load offset=1049288 + local.get 3 + i32.add + local.tee 0 + i32.store offset=1049288 + local.get 4 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 7 (;@1;) + end + i32.const 0 + local.get 0 + local.get 3 + i32.sub + local.tee 2 + i32.store offset=1049288 + i32.const 0 + i32.const 0 + i32.load offset=1049296 + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 4 + i32.store offset=1049296 + local.get 4 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 6 (;@1;) + end + i32.const 0 + local.get 6 + i32.store offset=1049328 + br 3 (;@3;) + end + local.get 0 + local.get 0 + i32.load offset=4 + local.get 8 + i32.add + i32.store offset=4 + i32.const 0 + i32.load offset=1049288 + local.set 2 + i32.const 0 + i32.load offset=1049296 + local.set 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 4 + i32.sub + local.tee 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 0 + i32.const 0 + local.get 2 + local.get 8 + i32.add + local.get 4 + i32.sub + local.tee 2 + i32.store offset=1049288 + i32.const 0 + local.get 0 + i32.store offset=1049296 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 8 + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.get 8 + local.get 6 + local.get 7 + local.get 4 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049324 + br 3 (;@2;) + end + i32.const 0 + local.get 4 + i32.store offset=1049292 + i32.const 0 + i32.const 0 + i32.load offset=1049284 + local.get 3 + i32.add + local.tee 0 + i32.store offset=1049284 + local.get 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 3 (;@1;) + end + local.get 4 + local.get 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 4 + local.get 3 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 3 (;@1;) + end + local.get 3 + i32.const 3 + i32.shr_u + local.tee 3 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 0 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1048884 + local.tee 7 + i32.const 1 + local.get 3 + i32.shl + local.tee 3 + i32.and + i32.eqz + br_if 0 (;@5;) + local.get 0 + i32.load offset=8 + local.set 3 + br 1 (;@4;) + end + i32.const 0 + local.get 7 + local.get 3 + i32.or + i32.store offset=1048884 + local.get 0 + local.set 3 + end + local.get 0 + local.get 4 + i32.store offset=8 + local.get 3 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 3 + i32.store offset=8 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + br 2 (;@1;) + end + i32.const 0 + i32.const 4095 + i32.store offset=1049332 + i32.const 0 + local.get 9 + i32.store offset=1049320 + i32.const 0 + local.get 8 + i32.store offset=1049312 + i32.const 0 + local.get 6 + i32.store offset=1049308 + i32.const 0 + i32.const 1048892 + i32.store offset=1048904 + i32.const 0 + i32.const 1048900 + i32.store offset=1048912 + i32.const 0 + i32.const 1048892 + i32.store offset=1048900 + i32.const 0 + i32.const 1048908 + i32.store offset=1048920 + i32.const 0 + i32.const 1048900 + i32.store offset=1048908 + i32.const 0 + i32.const 1048916 + i32.store offset=1048928 + i32.const 0 + i32.const 1048908 + i32.store offset=1048916 + i32.const 0 + i32.const 1048924 + i32.store offset=1048936 + i32.const 0 + i32.const 1048916 + i32.store offset=1048924 + i32.const 0 + i32.const 1048932 + i32.store offset=1048944 + i32.const 0 + i32.const 1048924 + i32.store offset=1048932 + i32.const 0 + i32.const 1048940 + i32.store offset=1048952 + i32.const 0 + i32.const 1048932 + i32.store offset=1048940 + i32.const 0 + i32.const 1048948 + i32.store offset=1048960 + i32.const 0 + i32.const 1048940 + i32.store offset=1048948 + i32.const 0 + i32.const 1048956 + i32.store offset=1048968 + i32.const 0 + i32.const 1048948 + i32.store offset=1048956 + i32.const 0 + i32.const 1048956 + i32.store offset=1048964 + i32.const 0 + i32.const 1048964 + i32.store offset=1048976 + i32.const 0 + i32.const 1048964 + i32.store offset=1048972 + i32.const 0 + i32.const 1048972 + i32.store offset=1048984 + i32.const 0 + i32.const 1048972 + i32.store offset=1048980 + i32.const 0 + i32.const 1048980 + i32.store offset=1048992 + i32.const 0 + i32.const 1048980 + i32.store offset=1048988 + i32.const 0 + i32.const 1048988 + i32.store offset=1049000 + i32.const 0 + i32.const 1048988 + i32.store offset=1048996 + i32.const 0 + i32.const 1048996 + i32.store offset=1049008 + i32.const 0 + i32.const 1048996 + i32.store offset=1049004 + i32.const 0 + i32.const 1049004 + i32.store offset=1049016 + i32.const 0 + i32.const 1049004 + i32.store offset=1049012 + i32.const 0 + i32.const 1049012 + i32.store offset=1049024 + i32.const 0 + i32.const 1049012 + i32.store offset=1049020 + i32.const 0 + i32.const 1049020 + i32.store offset=1049032 + i32.const 0 + i32.const 1049028 + i32.store offset=1049040 + i32.const 0 + i32.const 1049020 + i32.store offset=1049028 + i32.const 0 + i32.const 1049036 + i32.store offset=1049048 + i32.const 0 + i32.const 1049028 + i32.store offset=1049036 + i32.const 0 + i32.const 1049044 + i32.store offset=1049056 + i32.const 0 + i32.const 1049036 + i32.store offset=1049044 + i32.const 0 + i32.const 1049052 + i32.store offset=1049064 + i32.const 0 + i32.const 1049044 + i32.store offset=1049052 + i32.const 0 + i32.const 1049060 + i32.store offset=1049072 + i32.const 0 + i32.const 1049052 + i32.store offset=1049060 + i32.const 0 + i32.const 1049068 + i32.store offset=1049080 + i32.const 0 + i32.const 1049060 + i32.store offset=1049068 + i32.const 0 + i32.const 1049076 + i32.store offset=1049088 + i32.const 0 + i32.const 1049068 + i32.store offset=1049076 + i32.const 0 + i32.const 1049084 + i32.store offset=1049096 + i32.const 0 + i32.const 1049076 + i32.store offset=1049084 + i32.const 0 + i32.const 1049092 + i32.store offset=1049104 + i32.const 0 + i32.const 1049084 + i32.store offset=1049092 + i32.const 0 + i32.const 1049100 + i32.store offset=1049112 + i32.const 0 + i32.const 1049092 + i32.store offset=1049100 + i32.const 0 + i32.const 1049108 + i32.store offset=1049120 + i32.const 0 + i32.const 1049100 + i32.store offset=1049108 + i32.const 0 + i32.const 1049116 + i32.store offset=1049128 + i32.const 0 + i32.const 1049108 + i32.store offset=1049116 + i32.const 0 + i32.const 1049124 + i32.store offset=1049136 + i32.const 0 + i32.const 1049116 + i32.store offset=1049124 + i32.const 0 + i32.const 1049132 + i32.store offset=1049144 + i32.const 0 + i32.const 1049124 + i32.store offset=1049132 + i32.const 0 + i32.const 1049140 + i32.store offset=1049152 + i32.const 0 + i32.const 1049132 + i32.store offset=1049140 + i32.const 0 + i32.const 1049140 + i32.store offset=1049148 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 4 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 7 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 5 + i32.const 0 + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 0 + i32.sub + local.tee 9 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 0 + i32.store offset=1049296 + i32.const 0 + local.get 8 + local.get 2 + i32.add + local.get 5 + local.get 4 + local.get 7 + i32.add + i32.add + local.get 9 + i32.add + i32.sub + local.tee 2 + i32.store offset=1049288 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 4 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 7 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 8 + local.get 0 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.get 8 + local.get 6 + local.get 7 + local.get 4 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049324 + end + i32.const 0 + local.set 2 + i32.const 0 + i32.load offset=1049288 + local.tee 0 + local.get 3 + i32.le_u + br_if 0 (;@1;) + i32.const 0 + local.get 0 + local.get 3 + i32.sub + local.tee 2 + i32.store offset=1049288 + i32.const 0 + i32.const 0 + i32.load offset=1049296 + local.tee 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 4 + i32.store offset=1049296 + local.get 4 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 2 + end + local.get 1 + i32.const 16 + i32.add + global.set $__stack_pointer + local.get 2) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h2f90bddfab9fdaf9E (type 0) (param i32 i32) + (local i32 i32 i32 i32) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 2 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h1890d4e213c4eb0dE + br_if 0 (;@3;) + local.get 0 + i32.load + local.set 3 + block ;; label = @4 + block ;; label = @5 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + br_if 0 (;@5;) + local.get 3 + local.get 1 + i32.add + local.set 1 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h027d542fa6c66e35E + local.tee 0 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@4;) + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1049284 + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + return + end + i32.const 1048884 + local.get 0 + local.get 3 + i32.sub + local.get 3 + local.get 1 + i32.add + i32.const 16 + i32.add + local.tee 0 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17h919a9ad2bfdc6257E + i32.eqz + br_if 2 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 0 + i32.sub + i32.store offset=1049300 + return + end + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@3;) + end + block ;; label = @4 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 5 + i32.eq + br_if 0 (;@4;) + local.get 5 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 5 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + block ;; label = @3 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h36208fe537f27a1bE + i32.eqz + br_if 0 (;@3;) + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + br 2 (;@1;) + end + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const 0 + i32.load offset=1049296 + i32.eq + br_if 0 (;@4;) + local.get 2 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@3;) + i32.const 0 + local.get 0 + i32.store offset=1049292 + i32.const 0 + i32.const 0 + i32.load offset=1049284 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1049284 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + return + end + i32.const 0 + local.get 0 + i32.store offset=1049296 + i32.const 0 + i32.const 0 + i32.load offset=1049288 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1049288 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@2;) + i32.const 0 + i32.const 0 + i32.store offset=1049284 + i32.const 0 + i32.const 0 + i32.store offset=1049292 + return + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@3;) + end + block ;; label = @4 + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 2 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.eq + br_if 0 (;@4;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + local.get 0 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@1;) + i32.const 0 + local.get 1 + i32.store offset=1049284 + end + return + end + block ;; label = @1 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@1;) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + return + end + local.get 1 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 1 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1048884 + local.tee 3 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 1 + i32.load offset=8 + local.set 2 + br 1 (;@1;) + end + i32.const 0 + local.get 3 + local.get 2 + i32.or + i32.store offset=1048884 + local.get 1 + local.set 2 + end + local.get 1 + local.get 0 + i32.store offset=8 + local.get 2 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=8) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E (type 8) (param i32) + (local i32 i32 i32 i32 i32) + local.get 0 + i32.load offset=24 + local.set 1 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h0208d35d5de72e4fE + local.get 0 + i32.ne + br_if 0 (;@3;) + local.get 0 + i32.const 20 + i32.const 16 + local.get 0 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 3 + select + i32.add + i32.load + local.tee 4 + br_if 1 (;@2;) + i32.const 0 + local.set 3 + br 2 (;@1;) + end + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4prev17h70c5d20e354dec2bE + local.tee 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h0208d35d5de72e4fE + local.tee 3 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + i32.store offset=12 + local.get 3 + local.get 4 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + i32.store offset=8 + br 1 (;@1;) + end + local.get 2 + local.get 0 + i32.const 16 + i32.add + local.get 3 + select + local.set 2 + loop ;; label = @2 + local.get 2 + local.set 5 + block ;; label = @3 + local.get 4 + local.tee 3 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@3;) + local.get 3 + i32.const 16 + i32.add + local.set 2 + local.get 3 + i32.load offset=16 + local.set 4 + end + local.get 4 + br_if 0 (;@2;) + end + local.get 5 + i32.const 0 + i32.store + end + block ;; label = @1 + local.get 1 + i32.eqz + br_if 0 (;@1;) + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.load offset=28 + i32.const 2 + i32.shl + i32.const 1049156 + i32.add + local.tee 4 + i32.load + local.get 0 + i32.eq + br_if 0 (;@3;) + local.get 1 + i32.const 16 + i32.const 20 + local.get 1 + i32.load offset=16 + local.get 0 + i32.eq + select + i32.add + local.get 3 + i32.store + local.get 3 + br_if 1 (;@2;) + br 2 (;@1;) + end + local.get 4 + local.get 3 + i32.store + local.get 3 + br_if 0 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1048888 + i32.const -2 + local.get 0 + i32.load offset=28 + i32.rotl + i32.and + i32.store offset=1048888 + return + end + local.get 3 + local.get 1 + i32.store offset=24 + block ;; label = @2 + local.get 0 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 0 (;@2;) + local.get 3 + local.get 4 + i32.store offset=16 + local.get 4 + local.get 3 + i32.store offset=24 + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 4 + i32.eqz + br_if 0 (;@1;) + local.get 3 + i32.const 20 + i32.add + local.get 4 + i32.store + local.get 4 + local.get 3 + i32.store offset=24 + return + end) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E (type 0) (param i32 i32) + (local i32 i32 i32 i32 i32) + i32.const 0 + local.set 2 + block ;; label = @1 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@1;) + i32.const 31 + local.set 2 + local.get 1 + i32.const 16777215 + i32.gt_u + br_if 0 (;@1;) + local.get 1 + i32.const 6 + local.get 1 + i32.const 8 + i32.shr_u + i32.clz + local.tee 2 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 2 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 2 + end + local.get 0 + i64.const 0 + i64.store offset=16 align=4 + local.get 0 + local.get 2 + i32.store offset=28 + local.get 2 + i32.const 2 + i32.shl + i32.const 1049156 + i32.add + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + local.set 4 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1048888 + local.tee 5 + i32.const 1 + local.get 2 + i32.shl + local.tee 6 + i32.and + i32.eqz + br_if 0 (;@5;) + local.get 3 + i32.load + local.set 5 + local.get 2 + call $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h26ab250442f6ee68E + local.set 2 + local.get 5 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.get 1 + i32.ne + br_if 1 (;@4;) + local.get 5 + local.set 2 + br 2 (;@3;) + end + i32.const 0 + local.get 5 + local.get 6 + i32.or + i32.store offset=1048888 + local.get 3 + local.get 0 + i32.store + local.get 0 + local.get 3 + i32.store offset=24 + br 3 (;@1;) + end + local.get 1 + local.get 2 + i32.shl + local.set 3 + loop ;; label = @4 + local.get 5 + local.get 3 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 6 + i32.load + local.tee 2 + i32.eqz + br_if 2 (;@2;) + local.get 3 + i32.const 1 + i32.shl + local.set 3 + local.get 2 + local.set 5 + local.get 2 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.get 1 + i32.ne + br_if 0 (;@4;) + end + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E + local.tee 2 + i32.load offset=8 + local.tee 3 + local.get 4 + i32.store offset=12 + local.get 2 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 2 + i32.store offset=12 + local.get 4 + local.get 3 + i32.store offset=8 + local.get 0 + i32.const 0 + i32.store offset=24 + return + end + local.get 6 + local.get 0 + i32.store + local.get 0 + local.get 5 + i32.store offset=24 + end + local.get 4 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 4 + i32.store offset=12) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h760dc35ff6aecbd4E (type 10) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + i32.const 0 + i32.load offset=1049316 + local.tee 0 + br_if 0 (;@1;) + i32.const 0 + i32.const 4095 + i32.store offset=1049332 + i32.const 0 + return + end + i32.const 1049308 + local.set 1 + i32.const 0 + local.set 2 + i32.const 0 + local.set 3 + loop ;; label = @1 + local.get 0 + local.tee 4 + i32.load offset=8 + local.set 0 + local.get 4 + i32.load offset=4 + local.set 5 + local.get 4 + i32.load + local.set 6 + block ;; label = @2 + block ;; label = @3 + i32.const 1048884 + local.get 4 + i32.const 12 + i32.add + i32.load + i32.const 1 + i32.shr_u + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hc09768e3b534d238E + i32.eqz + br_if 0 (;@3;) + local.get 4 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hfd62a0d440afabc2E + br_if 0 (;@3;) + local.get 6 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 7 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 7 + i32.sub + i32.add + local.tee 7 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.set 8 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 9 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 10 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 11 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 12 + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h515c7fa3e4c35eaaE + br_if 0 (;@3;) + local.get 7 + local.get 8 + i32.add + local.get 6 + local.get 5 + local.get 9 + i32.add + local.get 10 + local.get 11 + i32.add + local.get 12 + i32.add + i32.sub + i32.add + i32.lt_u + br_if 0 (;@3;) + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1049292 + local.get 7 + i32.eq + br_if 0 (;@5;) + local.get 7 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@4;) + end + i32.const 0 + i32.const 0 + i32.store offset=1049284 + i32.const 0 + i32.const 0 + i32.store offset=1049292 + end + block ;; label = @4 + i32.const 1048884 + local.get 6 + local.get 5 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17h919a9ad2bfdc6257E + br_if 0 (;@4;) + local.get 7 + local.get 8 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 5 + i32.sub + i32.store offset=1049300 + local.get 1 + local.get 0 + i32.store offset=8 + local.get 5 + local.get 2 + i32.add + local.set 2 + br 1 (;@2;) + end + local.get 4 + local.set 1 + end + local.get 3 + i32.const 1 + i32.add + local.set 3 + local.get 0 + br_if 0 (;@1;) + end + i32.const 0 + local.get 3 + i32.const 4095 + local.get 3 + i32.const 4095 + i32.gt_u + select + i32.store offset=1049332 + local.get 2) + (func $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hcb7947a9a7e282caE (type 8) (param i32) + (local i32 i32 i32 i32 i32 i32) + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hae04a1e6cfd1658cE + local.set 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 2 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h1890d4e213c4eb0dE + br_if 0 (;@3;) + local.get 0 + i32.load + local.set 3 + block ;; label = @4 + block ;; label = @5 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + br_if 0 (;@5;) + local.get 3 + local.get 1 + i32.add + local.set 1 + local.get 0 + local.get 3 + call $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h027d542fa6c66e35E + local.tee 0 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@4;) + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1049284 + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + return + end + i32.const 1048884 + local.get 0 + local.get 3 + i32.sub + local.get 3 + local.get 1 + i32.add + i32.const 16 + i32.add + local.tee 0 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17h919a9ad2bfdc6257E + i32.eqz + br_if 2 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 0 + i32.sub + i32.store offset=1049300 + return + end + block ;; label = @4 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@3;) + end + block ;; label = @4 + local.get 0 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 0 + i32.const 8 + i32.add + i32.load + local.tee 5 + i32.eq + br_if 0 (;@4;) + local.get 5 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 5 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + block ;; label = @3 + block ;; label = @4 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h36208fe537f27a1bE + i32.eqz + br_if 0 (;@4;) + local.get 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE + br 1 (;@3;) + end + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 2 + i32.const 0 + i32.load offset=1049296 + i32.eq + br_if 0 (;@7;) + local.get 2 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 1 (;@6;) + i32.const 0 + local.get 0 + i32.store offset=1049292 + i32.const 0 + i32.const 0 + i32.load offset=1049284 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1049284 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + return + end + i32.const 0 + local.get 0 + i32.store offset=1049296 + i32.const 0 + i32.const 0 + i32.load offset=1049288 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1049288 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1049292 + i32.eq + br_if 1 (;@5;) + br 2 (;@4;) + end + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @6 + block ;; label = @7 + local.get 3 + i32.const 256 + i32.lt_u + br_if 0 (;@7;) + local.get 2 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 1 (;@6;) + end + block ;; label = @7 + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 4 + local.get 2 + i32.const 8 + i32.add + i32.load + local.tee 2 + i32.eq + br_if 0 (;@7;) + local.get 2 + local.get 4 + i32.store offset=12 + local.get 4 + local.get 2 + i32.store offset=8 + br 1 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 3 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + local.get 0 + i32.const 0 + i32.load offset=1049292 + i32.ne + br_if 2 (;@3;) + i32.const 0 + local.get 1 + i32.store offset=1049284 + br 3 (;@2;) + end + i32.const 0 + i32.const 0 + i32.store offset=1049284 + i32.const 0 + i32.const 0 + i32.store offset=1049292 + end + i32.const 0 + i32.load offset=1049324 + local.get 1 + i32.ge_u + br_if 1 (;@2;) + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 0 + local.get 0 + local.get 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 0 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 2 + i32.shl + i32.sub + local.tee 1 + local.get 1 + local.get 0 + i32.gt_u + select + i32.eqz + br_if 1 (;@2;) + i32.const 0 + i32.load offset=1049296 + i32.eqz + br_if 1 (;@2;) + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 0 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 1 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 3 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 4 + i32.const 0 + local.set 2 + block ;; label = @4 + i32.const 0 + i32.load offset=1049288 + local.tee 5 + local.get 4 + local.get 3 + local.get 1 + local.get 0 + i32.sub + i32.add + i32.add + local.tee 0 + i32.le_u + br_if 0 (;@4;) + local.get 5 + local.get 0 + i32.const -1 + i32.xor + i32.add + i32.const -65536 + i32.and + local.set 3 + i32.const 0 + i32.load offset=1049296 + local.set 1 + i32.const 1049308 + local.set 0 + block ;; label = @5 + loop ;; label = @6 + block ;; label = @7 + local.get 0 + i32.load + local.get 1 + i32.gt_u + br_if 0 (;@7;) + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment3top17h2c1447cf60d7e29cE + local.get 1 + i32.gt_u + br_if 2 (;@5;) + end + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@6;) + end + i32.const 0 + local.set 0 + end + i32.const 0 + local.set 2 + local.get 0 + call $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hfd62a0d440afabc2E + br_if 0 (;@4;) + i32.const 1048884 + local.get 0 + i32.const 12 + i32.add + i32.load + i32.const 1 + i32.shr_u + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hc09768e3b534d238E + i32.eqz + br_if 0 (;@4;) + local.get 0 + i32.load offset=4 + local.get 3 + i32.lt_u + br_if 0 (;@4;) + i32.const 1049308 + local.set 1 + loop ;; label = @5 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc7Segment5holds17he55c928b90d48049E + br_if 1 (;@4;) + local.get 1 + i32.load offset=8 + local.tee 1 + br_if 0 (;@5;) + end + i32.const 1048884 + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + local.tee 1 + local.get 1 + local.get 3 + i32.sub + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9free_part17h07996d3c531e1116E + i32.eqz + br_if 0 (;@4;) + local.get 3 + i32.eqz + br_if 0 (;@4;) + local.get 0 + local.get 0 + i32.load offset=4 + local.get 3 + i32.sub + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 3 + i32.sub + i32.store offset=1049300 + i32.const 0 + i32.load offset=1049288 + local.set 1 + i32.const 0 + i32.load offset=1049296 + local.set 0 + i32.const 0 + local.get 0 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.get 2 + i32.sub + local.tee 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 0 + i32.store offset=1049296 + i32.const 0 + local.get 1 + local.get 3 + local.get 2 + i32.add + i32.sub + local.tee 1 + i32.store offset=1049288 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.tee 2 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 4 + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 5 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 6 + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.get 6 + local.get 5 + local.get 4 + local.get 2 + i32.sub + i32.add + i32.add + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049324 + local.get 3 + local.set 2 + end + local.get 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h760dc35ff6aecbd4E + i32.sub + i32.ne + br_if 1 (;@2;) + i32.const 0 + i32.load offset=1049288 + i32.const 0 + i32.load offset=1049324 + i32.le_u + br_if 1 (;@2;) + i32.const 0 + i32.const -1 + i32.store offset=1049324 + return + end + local.get 1 + i32.const 256 + i32.lt_u + br_if 1 (;@1;) + local.get 0 + local.get 1 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18insert_large_chunk17h2c989caf8bf0f4b3E + i32.const 0 + i32.const 0 + i32.load offset=1049332 + i32.const -1 + i32.add + local.tee 0 + i32.store offset=1049332 + local.get 0 + br_if 0 (;@2;) + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$23release_unused_segments17h760dc35ff6aecbd4E + drop + return + end + return + end + local.get 1 + i32.const 3 + i32.shr_u + local.tee 2 + i32.const 3 + i32.shl + i32.const 1048892 + i32.add + local.set 1 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1048884 + local.tee 3 + i32.const 1 + local.get 2 + i32.shl + local.tee 2 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 1 + i32.load offset=8 + local.set 2 + br 1 (;@1;) + end + i32.const 0 + local.get 3 + local.get 2 + i32.or + i32.store offset=1048884 + local.get 1 + local.set 2 + end + local.get 1 + local.get 0 + i32.store offset=8 + local.get 2 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=8) + (func $_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17ha03abef02a8b70fdE (type 8) (param i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + local.get 0 + i32.load offset=8 + call $_ZN3std9panicking19begin_panic_handler28_$u7b$$u7b$closure$u7d$$u7d$17h9b985a293aac4ce1E + unreachable) + (func $_ZN3std9panicking19begin_panic_handler28_$u7b$$u7b$closure$u7d$$u7d$17h9b985a293aac4ce1E (type 4) (param i32 i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 0 + i32.const 20 + i32.add + i32.load + local.set 4 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 0 + i32.const 4 + i32.add + i32.load + br_table 0 (;@4;) 1 (;@3;) 3 (;@1;) + end + local.get 4 + br_if 2 (;@1;) + i32.const 1048600 + local.set 0 + i32.const 0 + local.set 4 + br 1 (;@2;) + end + local.get 4 + br_if 1 (;@1;) + local.get 0 + i32.load + local.tee 0 + i32.load offset=4 + local.set 4 + local.get 0 + i32.load + local.set 0 + end + local.get 3 + local.get 4 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 1048732 + local.get 1 + call $_ZN4core5panic10panic_info9PanicInfo7message17h37e27763a6a776eeE + local.get 2 + call $_ZN3std9panicking20rust_panic_with_hook17h606d7c7f7a423b98E + unreachable + end + local.get 3 + i32.const 0 + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + local.get 3 + i32.const 1048712 + local.get 1 + call $_ZN4core5panic10panic_info9PanicInfo7message17h37e27763a6a776eeE + local.get 2 + call $_ZN3std9panicking20rust_panic_with_hook17h606d7c7f7a423b98E + unreachable) + (func $_ZN3std5alloc24default_alloc_error_hook17hf9c393ba3cd287e1E (type 0) (param i32 i32)) + (func $rust_oom (type 0) (param i32 i32) + (local i32) + local.get 0 + local.get 1 + i32.const 0 + i32.load offset=1048864 + local.tee 2 + i32.const 1 + local.get 2 + select + call_indirect (type 0) + unreachable + unreachable) + (func $__rdl_alloc (type 2) (param i32 i32) (result i32) + local.get 0 + local.get 1 + call $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h189fbca0373ab828E) + (func $__rdl_dealloc (type 4) (param i32 i32 i32) + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hcb7947a9a7e282caE) + (func $__rdl_realloc (type 6) (param i32 i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const 9 + i32.lt_u + br_if 0 (;@4;) + local.get 3 + local.get 2 + call $_ZN8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h189fbca0373ab828E + local.tee 2 + br_if 1 (;@3;) + i32.const 0 + return + end + i32.const 0 + local.set 2 + i32.const 0 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E + local.set 1 + local.get 1 + local.get 1 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 20 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.add + i32.sub + i32.const -65544 + i32.add + i32.const -9 + i32.and + i32.const -3 + i32.add + local.tee 1 + i32.const 0 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const 2 + i32.shl + i32.sub + local.tee 4 + local.get 4 + local.get 1 + i32.gt_u + select + local.get 3 + i32.le_u + br_if 1 (;@2;) + i32.const 16 + local.get 3 + i32.const 4 + i32.add + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.const -5 + i32.add + local.get 3 + i32.gt_u + select + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.set 4 + local.get 0 + call $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hae04a1e6cfd1658cE + local.set 1 + local.get 1 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 5 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 6 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + br_if 0 (;@11;) + local.get 5 + local.get 4 + i32.ge_u + br_if 1 (;@10;) + local.get 6 + i32.const 0 + i32.load offset=1049296 + i32.eq + br_if 2 (;@9;) + local.get 6 + i32.const 0 + i32.load offset=1049292 + i32.eq + br_if 3 (;@8;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h36208fe537f27a1bE + br_if 7 (;@4;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.tee 7 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.lt_u + br_if 7 (;@4;) + local.get 5 + local.get 4 + i32.sub + local.set 8 + local.get 7 + i32.const 256 + i32.lt_u + br_if 4 (;@7;) + local.get 6 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$18unlink_large_chunk17h598db8b2a7eb3514E + br 5 (;@6;) + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + local.set 5 + local.get 4 + i32.const 256 + i32.lt_u + br_if 6 (;@4;) + block ;; label = @11 + local.get 5 + local.get 4 + i32.const 4 + i32.add + i32.lt_u + br_if 0 (;@11;) + local.get 5 + local.get 4 + i32.sub + i32.const 131073 + i32.lt_u + br_if 6 (;@5;) + end + i32.const 1048884 + local.get 1 + local.get 1 + i32.load + local.tee 6 + i32.sub + local.get 5 + local.get 6 + i32.add + i32.const 16 + i32.add + local.tee 7 + local.get 4 + i32.const 31 + i32.add + i32.const 1048884 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9page_size17h692c7b05722b7c81E + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + local.tee 5 + i32.const 1 + call $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5remap17hc0c6d5caa20a50edE + local.tee 4 + i32.eqz + br_if 6 (;@4;) + local.get 4 + local.get 6 + i32.add + local.tee 1 + local.get 5 + local.get 6 + i32.sub + local.tee 3 + i32.const -16 + i32.add + local.tee 2 + i32.store offset=4 + call $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17hf49c5964398bab00E + local.set 0 + local.get 1 + local.get 2 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.get 0 + i32.store offset=4 + local.get 1 + local.get 3 + i32.const -12 + i32.add + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + i32.const 0 + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049300 + local.get 5 + local.get 7 + i32.sub + i32.add + local.tee 3 + i32.store offset=1049300 + i32.const 0 + i32.const 0 + i32.load offset=1049328 + local.tee 2 + local.get 4 + local.get 4 + local.get 2 + i32.gt_u + select + i32.store offset=1049328 + i32.const 0 + i32.const 0 + i32.load offset=1049304 + local.tee 2 + local.get 3 + local.get 2 + local.get 3 + i32.gt_u + select + i32.store offset=1049304 + br 9 (;@1;) + end + local.get 5 + local.get 4 + i32.sub + local.tee 5 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.lt_u + br_if 4 (;@5;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 6 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 6 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 6 + local.get 5 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h2f90bddfab9fdaf9E + br 4 (;@5;) + end + i32.const 0 + i32.load offset=1049288 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.le_u + br_if 4 (;@4;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 6 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 6 + local.get 5 + local.get 4 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.get 4 + i32.store offset=1049288 + i32.const 0 + local.get 6 + i32.store offset=1049296 + br 3 (;@5;) + end + i32.const 0 + i32.load offset=1049284 + local.get 5 + i32.add + local.tee 5 + local.get 4 + i32.lt_u + br_if 3 (;@4;) + block ;; label = @8 + block ;; label = @9 + local.get 5 + local.get 4 + i32.sub + local.tee 6 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.ge_u + br_if 0 (;@9;) + local.get 1 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + i32.const 0 + local.set 6 + i32.const 0 + local.set 5 + br 1 (;@8;) + end + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.tee 5 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 7 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 5 + local.get 6 + call $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E + local.get 7 + call $_ZN8dlmalloc8dlmalloc5Chunk12clear_pinuse17ha26ab6f3c8ce2657E + end + i32.const 0 + local.get 5 + i32.store offset=1049292 + i32.const 0 + local.get 6 + i32.store offset=1049284 + br 2 (;@5;) + end + block ;; label = @7 + local.get 6 + i32.const 12 + i32.add + i32.load + local.tee 9 + local.get 6 + i32.const 8 + i32.add + i32.load + local.tee 6 + i32.eq + br_if 0 (;@7;) + local.get 6 + local.get 9 + i32.store offset=12 + local.get 9 + local.get 6 + i32.store offset=8 + br 1 (;@6;) + end + i32.const 0 + i32.const 0 + i32.load offset=1048884 + i32.const -2 + local.get 7 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048884 + end + block ;; label = @6 + local.get 8 + i32.const 16 + i32.const 8 + call $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE + i32.lt_u + br_if 0 (;@6;) + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE + local.set 5 + local.get 1 + local.get 4 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 5 + local.get 8 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + local.get 5 + local.get 8 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$13dispose_chunk17h2f90bddfab9fdaf9E + br 1 (;@5;) + end + local.get 1 + local.get 5 + call $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE + end + local.get 1 + br_if 3 (;@1;) + end + local.get 3 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$6malloc17h2a27207ee9af7fe9E + local.tee 4 + i32.eqz + br_if 1 (;@2;) + local.get 4 + local.get 0 + local.get 3 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E + i32.const -8 + i32.const -4 + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + select + i32.add + local.tee 2 + local.get 2 + local.get 3 + i32.gt_u + select + call $memcpy + local.set 3 + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hcb7947a9a7e282caE + local.get 3 + return + end + local.get 2 + local.get 0 + local.get 3 + local.get 1 + local.get 1 + local.get 3 + i32.gt_u + select + call $memcpy + drop + local.get 0 + call $_ZN8dlmalloc8dlmalloc17Dlmalloc$LT$A$GT$4free17hcb7947a9a7e282caE + end + local.get 2 + return + end + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E + drop + local.get 1 + call $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E) + (func $rust_begin_unwind (type 8) (param i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 1 + global.set $__stack_pointer + local.get 0 + call $_ZN4core5panic10panic_info9PanicInfo8location17h2df1916f9d5713fbE + i32.const 1048680 + call $_ZN4core6option15Option$LT$T$GT$6unwrap17hf45be9e7d87cbf99E + local.set 2 + local.get 0 + call $_ZN4core5panic10panic_info9PanicInfo7message17h37e27763a6a776eeE + call $_ZN4core6option15Option$LT$T$GT$6unwrap17h5a7df91b5d6090cbE + local.set 3 + local.get 1 + local.get 2 + i32.store offset=8 + local.get 1 + local.get 0 + i32.store offset=4 + local.get 1 + local.get 3 + i32.store + local.get 1 + call $_ZN3std10sys_common9backtrace26__rust_end_short_backtrace17ha03abef02a8b70fdE + unreachable) + (func $_ZN3std9panicking20rust_panic_with_hook17h606d7c7f7a423b98E (type 3) (param i32 i32 i32 i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 4 + global.set $__stack_pointer + i32.const 1 + local.set 5 + i32.const 0 + i32.const 0 + i32.load offset=1048880 + local.tee 6 + i32.const 1 + i32.add + i32.store offset=1048880 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1049336 + i32.const 1 + i32.ne + br_if 0 (;@2;) + i32.const 0 + i32.load offset=1049340 + i32.const 1 + i32.add + local.set 5 + br 1 (;@1;) + end + i32.const 0 + i32.const 1 + i32.store offset=1049336 + end + i32.const 0 + local.get 5 + i32.store offset=1049340 + block ;; label = @1 + block ;; label = @2 + local.get 6 + i32.const 0 + i32.lt_s + br_if 0 (;@2;) + local.get 5 + i32.const 2 + i32.gt_u + br_if 0 (;@2;) + local.get 4 + local.get 3 + i32.store offset=28 + local.get 4 + local.get 2 + i32.store offset=24 + i32.const 0 + i32.load offset=1048868 + local.tee 6 + i32.const -1 + i32.le_s + br_if 0 (;@2;) + i32.const 0 + local.get 6 + i32.const 1 + i32.add + local.tee 6 + i32.store offset=1048868 + block ;; label = @3 + i32.const 0 + i32.load offset=1048876 + local.tee 2 + i32.eqz + br_if 0 (;@3;) + i32.const 0 + i32.load offset=1048872 + local.set 6 + local.get 4 + i32.const 8 + i32.add + local.get 0 + local.get 1 + i32.load offset=16 + call_indirect (type 0) + local.get 4 + local.get 4 + i64.load offset=8 + i64.store offset=16 + local.get 6 + local.get 4 + i32.const 16 + i32.add + local.get 2 + i32.load offset=20 + call_indirect (type 0) + i32.const 0 + i32.load offset=1048868 + local.set 6 + end + i32.const 0 + local.get 6 + i32.const -1 + i32.add + i32.store offset=1048868 + local.get 5 + i32.const 1 + i32.le_u + br_if 1 (;@1;) + end + unreachable + unreachable + end + local.get 0 + local.get 1 + call $rust_panic + unreachable) + (func $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h007022b770a3719cE (type 0) (param i32 i32) + (local i32 i32 i32 i32 i64) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 1 + i32.const 4 + i32.add + local.set 3 + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.load offset=4 + i32.eqz + br_if 0 (;@2;) + i32.const 0 + i32.load offset=1048644 + local.set 4 + br 1 (;@1;) + end + local.get 1 + i32.load + local.set 5 + local.get 2 + i64.const 0 + i64.store offset=12 align=4 + local.get 2 + i32.const 0 + i32.load offset=1048644 + local.tee 4 + i32.store offset=8 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=20 + local.get 2 + i32.const 24 + i32.add + i32.const 16 + i32.add + local.get 5 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.get 5 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 5 + i64.load align=4 + i64.store offset=24 + local.get 2 + i32.const 20 + i32.add + i32.const 1048576 + local.get 2 + i32.const 24 + i32.add + call $_ZN4core3fmt5write17hbbaf39f09bf49efbE + drop + local.get 3 + i32.const 8 + i32.add + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + i32.load + i32.store + local.get 3 + local.get 2 + i64.load offset=8 + i64.store align=4 + end + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.tee 5 + local.get 3 + i32.const 8 + i32.add + i32.load + i32.store + local.get 1 + i32.const 12 + i32.add + i32.const 0 + i32.store + local.get 3 + i64.load align=4 + local.set 6 + local.get 1 + i32.const 8 + i32.add + i32.const 0 + i32.store + local.get 1 + local.get 4 + i32.store offset=4 + local.get 2 + local.get 6 + i64.store offset=24 + block ;; label = @1 + i32.const 12 + i32.const 4 + call $__rust_alloc + local.tee 1 + br_if 0 (;@1;) + i32.const 12 + i32.const 4 + call $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE + unreachable + end + local.get 1 + local.get 2 + i64.load offset=24 + i64.store align=4 + local.get 1 + i32.const 8 + i32.add + local.get 5 + i32.load + i32.store + local.get 0 + i32.const 1048752 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store + local.get 2 + i32.const 48 + i32.add + global.set $__stack_pointer) + (func $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17h71b2b32a8109b3eeE (type 0) (param i32 i32) + (local i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 1 + i32.const 4 + i32.add + local.set 3 + block ;; label = @1 + local.get 1 + i32.load offset=4 + br_if 0 (;@1;) + local.get 1 + i32.load + local.set 1 + local.get 2 + i64.const 0 + i64.store offset=12 align=4 + local.get 2 + i32.const 0 + i32.load offset=1048644 + i32.store offset=8 + local.get 2 + local.get 2 + i32.const 8 + i32.add + i32.store offset=20 + local.get 2 + i32.const 24 + i32.add + i32.const 16 + i32.add + local.get 1 + i32.const 16 + i32.add + i64.load align=4 + i64.store + local.get 2 + i32.const 24 + i32.add + i32.const 8 + i32.add + local.get 1 + i32.const 8 + i32.add + i64.load align=4 + i64.store + local.get 2 + local.get 1 + i64.load align=4 + i64.store offset=24 + local.get 2 + i32.const 20 + i32.add + i32.const 1048576 + local.get 2 + i32.const 24 + i32.add + call $_ZN4core3fmt5write17hbbaf39f09bf49efbE + drop + local.get 3 + i32.const 8 + i32.add + local.get 2 + i32.const 8 + i32.add + i32.const 8 + i32.add + i32.load + i32.store + local.get 3 + local.get 2 + i64.load offset=8 + i64.store align=4 + end + local.get 0 + i32.const 1048752 + i32.store offset=4 + local.get 0 + local.get 3 + i32.store + local.get 2 + i32.const 48 + i32.add + global.set $__stack_pointer) + (func $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h0beda54cb8f4162fE (type 0) (param i32 i32) + (local i32 i32) + local.get 1 + i32.load offset=4 + local.set 2 + local.get 1 + i32.load + local.set 3 + block ;; label = @1 + i32.const 8 + i32.const 4 + call $__rust_alloc + local.tee 1 + br_if 0 (;@1;) + i32.const 8 + i32.const 4 + call $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE + unreachable + end + local.get 1 + local.get 2 + i32.store offset=4 + local.get 1 + local.get 3 + i32.store + local.get 0 + i32.const 1048768 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store) + (func $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17hed0ce47ef56369a2E (type 0) (param i32 i32) + local.get 0 + i32.const 1048768 + i32.store offset=4 + local.get 0 + local.get 1 + i32.store) + (func $rust_panic (type 0) (param i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 1 + i32.store offset=12 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 2 + i32.const 8 + i32.add + call $__rust_start_panic + drop + unreachable + unreachable) + (func $__rust_start_panic (type 9) (param i32) (result i32) + unreachable + unreachable) + (func $_ZN8dlmalloc8dlmalloc8align_up17h0d2f151cc20f2bacE (type 2) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.add + i32.const -1 + i32.add + i32.const 0 + local.get 1 + i32.sub + i32.and) + (func $_ZN8dlmalloc8dlmalloc9left_bits17hf3cde9f9b07a0a60E (type 9) (param i32) (result i32) + local.get 0 + i32.const 1 + i32.shl + local.tee 0 + i32.const 0 + local.get 0 + i32.sub + i32.or) + (func $_ZN8dlmalloc8dlmalloc9least_bit17h2f155e22ffd5c3eaE (type 9) (param i32) (result i32) + i32.const 0 + local.get 0 + i32.sub + local.get 0 + i32.and) + (func $_ZN8dlmalloc8dlmalloc24leftshift_for_tree_index17h26ab250442f6ee68E (type 9) (param i32) (result i32) + i32.const 0 + i32.const 25 + local.get 0 + i32.const 1 + i32.shr_u + i32.sub + local.get 0 + i32.const 31 + i32.eq + select) + (func $_ZN8dlmalloc8dlmalloc5Chunk14fencepost_head17hf49c5964398bab00E (type 10) (result i32) + i32.const 7) + (func $_ZN8dlmalloc8dlmalloc5Chunk4size17h67d28f0cacbd4702E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const -8 + i32.and) + (func $_ZN8dlmalloc8dlmalloc5Chunk6cinuse17h36208fe537f27a1bE (type 9) (param i32) (result i32) + local.get 0 + i32.load8_u offset=4 + i32.const 2 + i32.and + i32.const 1 + i32.shr_u) + (func $_ZN8dlmalloc8dlmalloc5Chunk6pinuse17h1890d4e213c4eb0dE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and) + (func $_ZN8dlmalloc8dlmalloc5Chunk12clear_pinuse17ha26ab6f3c8ce2657E (type 8) (param i32) + local.get 0 + local.get 0 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4) + (func $_ZN8dlmalloc8dlmalloc5Chunk5inuse17h515c7fa3e4c35eaaE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 1 + i32.ne) + (func $_ZN8dlmalloc8dlmalloc5Chunk7mmapped17ha951b962517f2e83E (type 9) (param i32) (result i32) + local.get 0 + i32.load8_u offset=4 + i32.const 3 + i32.and + i32.eqz) + (func $_ZN8dlmalloc8dlmalloc5Chunk9set_inuse17h10fde7a43e98969dE (type 0) (param i32 i32) + local.get 0 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and + local.get 1 + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + i32.const 4 + i32.add + local.tee 0 + local.get 0 + i32.load + i32.const 1 + i32.or + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk20set_inuse_and_pinuse17h4d093e278ca1757dE (type 0) (param i32 i32) + local.get 0 + local.get 1 + i32.const 3 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + i32.const 4 + i32.add + local.tee 0 + local.get 0 + i32.load + i32.const 1 + i32.or + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk34set_size_and_pinuse_of_inuse_chunk17h811ec73b71d5eb3fE (type 0) (param i32 i32) + local.get 0 + local.get 1 + i32.const 3 + i32.or + i32.store offset=4) + (func $_ZN8dlmalloc8dlmalloc5Chunk33set_size_and_pinuse_of_free_chunk17h33048132fc870589E (type 0) (param i32 i32) + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk20set_free_with_pinuse17h9712f939c31db7edE (type 4) (param i32 i32 i32) + local.get 2 + local.get 2 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store) + (func $_ZN8dlmalloc8dlmalloc5Chunk11plus_offset17h3a05b77f8c6be72eE (type 2) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.add) + (func $_ZN8dlmalloc8dlmalloc5Chunk12minus_offset17h027d542fa6c66e35E (type 2) (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.sub) + (func $_ZN8dlmalloc8dlmalloc5Chunk6to_mem17hb3f6263c77f33890E (type 9) (param i32) (result i32) + local.get 0 + i32.const 8 + i32.add) + (func $_ZN8dlmalloc8dlmalloc5Chunk8from_mem17hae04a1e6cfd1658cE (type 9) (param i32) (result i32) + local.get 0 + i32.const -8 + i32.add) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk14leftmost_child17hf42853009da41559E (type 9) (param i32) (result i32) + (local i32) + block ;; label = @1 + local.get 0 + i32.load offset=16 + local.tee 1 + br_if 0 (;@1;) + local.get 0 + i32.const 20 + i32.add + i32.load + local.set 1 + end + local.get 1) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk5chunk17h4f016ed62ab72f28E (type 9) (param i32) (result i32) + local.get 0) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk4next17h0208d35d5de72e4fE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12) + (func $_ZN8dlmalloc8dlmalloc9TreeChunk4prev17h70c5d20e354dec2bE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=8) + (func $_ZN8dlmalloc8dlmalloc7Segment9is_extern17hfd62a0d440afabc2E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12 + i32.const 1 + i32.and) + (func $_ZN8dlmalloc8dlmalloc7Segment9sys_flags17hff8b0da7ceab4a44E (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12 + i32.const 1 + i32.shr_u) + (func $_ZN8dlmalloc8dlmalloc7Segment5holds17he55c928b90d48049E (type 2) (param i32 i32) (result i32) + (local i32 i32) + i32.const 0 + local.set 2 + block ;; label = @1 + local.get 0 + i32.load + local.tee 3 + local.get 1 + i32.gt_u + br_if 0 (;@1;) + local.get 3 + local.get 0 + i32.load offset=4 + i32.add + local.get 1 + i32.gt_u + local.set 2 + end + local.get 2) + (func $_ZN8dlmalloc8dlmalloc7Segment3top17h2c1447cf60d7e29cE (type 9) (param i32) (result i32) + local.get 0 + i32.load + local.get 0 + i32.load offset=4 + i32.add) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5alloc17hb5f41988a2418891E (type 4) (param i32 i32 i32) + (local i32) + local.get 2 + i32.const 16 + i32.shr_u + memory.grow + local.set 3 + local.get 0 + i32.const 0 + i32.store offset=8 + local.get 0 + i32.const 0 + local.get 2 + i32.const -65536 + i32.and + local.get 3 + i32.const -1 + i32.eq + local.tee 2 + select + i32.store offset=4 + local.get 0 + i32.const 0 + local.get 3 + i32.const 16 + i32.shl + local.get 2 + select + i32.store) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$5remap17hc0c6d5caa20a50edE (type 11) (param i32 i32 i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9free_part17h07996d3c531e1116E (type 6) (param i32 i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$4free17h919a9ad2bfdc6257E (type 1) (param i32 i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$16can_release_part17hc09768e3b534d238E (type 2) (param i32 i32) (result i32) + i32.const 0) + (func $_ZN61_$LT$dlmalloc..sys..System$u20$as$u20$dlmalloc..Allocator$GT$9page_size17h692c7b05722b7c81E (type 9) (param i32) (result i32) + i32.const 65536) + (func $_ZN5alloc5alloc18handle_alloc_error17h30c0e85c9964825dE (type 0) (param i32 i32) + local.get 0 + local.get 1 + call $__rust_alloc_error_handler + unreachable) + (func $__rg_oom (type 0) (param i32 i32) + local.get 0 + local.get 1 + call $rust_oom + unreachable) + (func $_ZN5alloc7raw_vec17capacity_overflow17h4b49014830cafe63E (type 12) + i32.const 1048812 + i32.const 17 + i32.const 1048832 + call $_ZN4core9panicking5panic17hec1fc057bd0baf0bE + unreachable) + (func $_ZN4core3ops8function6FnOnce9call_once17h2ab86767ec17c50dE (type 2) (param i32 i32) (result i32) + local.get 0 + i32.load + drop + loop (result i32) ;; label = @1 + br 0 (;@1;) + end) + (func $_ZN4core3ptr102drop_in_place$LT$$RF$core..iter..adapters..copied..Copied$LT$core..slice..iter..Iter$LT$u8$GT$$GT$$GT$17h63c2e1497b52f3d7E (type 8) (param i32)) + (func $_ZN4core9panicking5panic17hec1fc057bd0baf0bE (type 4) (param i32 i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 32 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + i32.const 20 + i32.add + i32.const 0 + i32.store + local.get 3 + i32.const 1048848 + i32.store offset=16 + local.get 3 + i64.const 1 + i64.store offset=4 align=4 + local.get 3 + local.get 1 + i32.store offset=28 + local.get 3 + local.get 0 + i32.store offset=24 + local.get 3 + local.get 3 + i32.const 24 + i32.add + i32.store + local.get 3 + local.get 2 + call $_ZN4core9panicking9panic_fmt17h6314b5c91abe7349E + unreachable) + (func $_ZN4core9panicking9panic_fmt17h6314b5c91abe7349E (type 0) (param i32 i32) + (local i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 2 + global.set $__stack_pointer + local.get 2 + local.get 1 + i32.store offset=12 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 2 + i32.const 1048848 + i32.store offset=4 + local.get 2 + i32.const 1048848 + i32.store + local.get 2 + call $rust_begin_unwind + unreachable) + (func $_ZN4core3fmt5write17hbbaf39f09bf49efbE (type 1) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + global.get $__stack_pointer + i32.const 48 + i32.sub + local.tee 3 + global.set $__stack_pointer + local.get 3 + i32.const 36 + i32.add + local.get 1 + i32.store + local.get 3 + i32.const 3 + i32.store8 offset=40 + local.get 3 + i64.const 137438953472 + i64.store offset=8 + local.get 3 + local.get 0 + i32.store offset=32 + i32.const 0 + local.set 4 + local.get 3 + i32.const 0 + i32.store offset=24 + local.get 3 + i32.const 0 + i32.store offset=16 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.load offset=8 + local.tee 5 + br_if 0 (;@4;) + local.get 2 + i32.const 20 + i32.add + i32.load + local.tee 6 + i32.eqz + br_if 1 (;@3;) + local.get 2 + i32.load + local.set 1 + local.get 2 + i32.load offset=16 + local.set 0 + local.get 6 + i32.const 3 + i32.shl + i32.const -8 + i32.add + i32.const 3 + i32.shr_u + i32.const 1 + i32.add + local.tee 4 + local.set 6 + loop ;; label = @5 + block ;; label = @6 + local.get 1 + i32.const 4 + i32.add + i32.load + local.tee 7 + i32.eqz + br_if 0 (;@6;) + local.get 3 + i32.load offset=32 + local.get 1 + i32.load + local.get 7 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 1) + br_if 4 (;@2;) + end + local.get 0 + i32.load + local.get 3 + i32.const 8 + i32.add + local.get 0 + i32.const 4 + i32.add + i32.load + call_indirect (type 2) + br_if 3 (;@2;) + local.get 0 + i32.const 8 + i32.add + local.set 0 + local.get 1 + i32.const 8 + i32.add + local.set 1 + local.get 6 + i32.const -1 + i32.add + local.tee 6 + br_if 0 (;@5;) + br 2 (;@3;) + end + end + local.get 2 + i32.const 12 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@3;) + local.get 0 + i32.const 5 + i32.shl + local.tee 8 + i32.const -32 + i32.add + i32.const 5 + i32.shr_u + i32.const 1 + i32.add + local.set 4 + local.get 2 + i32.load + local.set 1 + i32.const 0 + local.set 6 + loop ;; label = @4 + block ;; label = @5 + local.get 1 + i32.const 4 + i32.add + i32.load + local.tee 0 + i32.eqz + br_if 0 (;@5;) + local.get 3 + i32.load offset=32 + local.get 1 + i32.load + local.get 0 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 1) + br_if 3 (;@2;) + end + local.get 3 + local.get 5 + local.get 6 + i32.add + local.tee 0 + i32.const 28 + i32.add + i32.load8_u + i32.store8 offset=40 + local.get 3 + local.get 0 + i32.const 4 + i32.add + i64.load align=4 + i64.const 32 + i64.rotl + i64.store offset=8 + local.get 0 + i32.const 24 + i32.add + i32.load + local.set 9 + local.get 2 + i32.load offset=16 + local.set 10 + i32.const 0 + local.set 11 + i32.const 0 + local.set 7 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 0 + i32.const 20 + i32.add + i32.load + br_table 1 (;@6;) 0 (;@7;) 2 (;@5;) 1 (;@6;) + end + local.get 9 + i32.const 3 + i32.shl + local.set 12 + i32.const 0 + local.set 7 + local.get 10 + local.get 12 + i32.add + local.tee 12 + i32.load offset=4 + i32.const 14 + i32.ne + br_if 1 (;@5;) + local.get 12 + i32.load + i32.load + local.set 9 + end + i32.const 1 + local.set 7 + end + local.get 3 + local.get 9 + i32.store offset=20 + local.get 3 + local.get 7 + i32.store offset=16 + local.get 0 + i32.const 16 + i32.add + i32.load + local.set 7 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 0 + i32.const 12 + i32.add + i32.load + br_table 1 (;@6;) 0 (;@7;) 2 (;@5;) 1 (;@6;) + end + local.get 7 + i32.const 3 + i32.shl + local.set 9 + local.get 10 + local.get 9 + i32.add + local.tee 9 + i32.load offset=4 + i32.const 14 + i32.ne + br_if 1 (;@5;) + local.get 9 + i32.load + i32.load + local.set 7 + end + i32.const 1 + local.set 11 + end + local.get 3 + local.get 7 + i32.store offset=28 + local.get 3 + local.get 11 + i32.store offset=24 + local.get 10 + local.get 0 + i32.load + i32.const 3 + i32.shl + i32.add + local.tee 0 + i32.load + local.get 3 + i32.const 8 + i32.add + local.get 0 + i32.load offset=4 + call_indirect (type 2) + br_if 2 (;@2;) + local.get 1 + i32.const 8 + i32.add + local.set 1 + local.get 8 + local.get 6 + i32.const 32 + i32.add + local.tee 6 + i32.ne + br_if 0 (;@4;) + end + end + i32.const 0 + local.set 0 + local.get 4 + local.get 2 + i32.load offset=4 + i32.lt_u + local.tee 1 + i32.eqz + br_if 1 (;@1;) + local.get 3 + i32.load offset=32 + local.get 2 + i32.load + local.get 4 + i32.const 3 + i32.shl + i32.add + i32.const 0 + local.get 1 + select + local.tee 1 + i32.load + local.get 1 + i32.load offset=4 + local.get 3 + i32.load offset=36 + i32.load offset=12 + call_indirect (type 1) + i32.eqz + br_if 1 (;@1;) + end + i32.const 1 + local.set 0 + end + local.get 3 + i32.const 48 + i32.add + global.set $__stack_pointer + local.get 0) + (func $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17ha0c4492216d4d2e7E (type 7) (param i32) (result i64) + i64.const -3005123615467915227) + (func $_ZN4core5panic10panic_info9PanicInfo7message17h37e27763a6a776eeE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=8) + (func $_ZN4core5panic10panic_info9PanicInfo8location17h2df1916f9d5713fbE (type 9) (param i32) (result i32) + local.get 0 + i32.load offset=12) + (func $memcpy (type 1) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32) + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + local.get 2 + i32.const 3 + i32.and + local.set 3 + i32.const 0 + local.set 4 + block ;; label = @2 + local.get 2 + i32.const -1 + i32.add + i32.const 3 + i32.lt_u + br_if 0 (;@2;) + local.get 2 + i32.const -4 + i32.and + local.set 5 + i32.const 0 + local.set 4 + loop ;; label = @3 + local.get 0 + local.get 4 + i32.add + local.tee 2 + local.get 1 + local.get 4 + i32.add + local.tee 6 + i32.load8_u + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.get 6 + i32.const 1 + i32.add + i32.load8_u + i32.store8 + local.get 2 + i32.const 2 + i32.add + local.get 6 + i32.const 2 + i32.add + i32.load8_u + i32.store8 + local.get 2 + i32.const 3 + i32.add + local.get 6 + i32.const 3 + i32.add + i32.load8_u + i32.store8 + local.get 5 + local.get 4 + i32.const 4 + i32.add + local.tee 4 + i32.ne + br_if 0 (;@3;) + end + end + local.get 3 + i32.eqz + br_if 0 (;@1;) + local.get 1 + local.get 4 + i32.add + local.set 2 + local.get 0 + local.get 4 + i32.add + local.set 4 + loop ;; label = @2 + local.get 4 + local.get 2 + i32.load8_u + i32.store8 + local.get 2 + i32.const 1 + i32.add + local.set 2 + local.get 4 + i32.const 1 + i32.add + local.set 4 + local.get 3 + i32.const -1 + i32.add + local.tee 3 + br_if 0 (;@2;) + end + end + local.get 0) + (table (;0;) 17 17 funcref) + (memory (;0;) 17) + (global $__stack_pointer (mut i32) (i32.const 1048576)) + (global (;1;) i32 (i32.const 1049344)) + (global (;2;) i32 (i32.const 1049344)) + (export "memory" (memory 0)) + (export "echo_string" (func $echo_string)) + (export "__data_end" (global 1)) + (export "__heap_base" (global 2)) + (elem (;0;) (i32.const 1) func $_ZN3std5alloc24default_alloc_error_hook17hf9c393ba3cd287e1E $_ZN4core3ptr100drop_in_place$LT$$RF$mut$u20$std..io..Write..write_fmt..Adapter$LT$alloc..vec..Vec$LT$u8$GT$$GT$$GT$17ha3e29bb00fd76937E $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_str17heed6350c990c190fE $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$10write_char17h2e09602723e0822aE $_ZN50_$LT$$RF$mut$u20$W$u20$as$u20$core..fmt..Write$GT$9write_fmt17h81d0daecbbff04b5E $_ZN4core3ptr70drop_in_place$LT$std..panicking..begin_panic_handler..PanicPayload$GT$17he4eedabc21d9757dE $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h007022b770a3719cE $_ZN90_$LT$std..panicking..begin_panic_handler..PanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17h71b2b32a8109b3eeE $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$8take_box17h0beda54cb8f4162fE $_ZN93_$LT$std..panicking..begin_panic_handler..StrPanicPayload$u20$as$u20$core..panic..BoxMeUp$GT$3get17hed0ce47ef56369a2E $_ZN4core3ptr226drop_in_place$LT$std..error..$LT$impl$u20$core..convert..From$LT$alloc..string..String$GT$$u20$for$u20$alloc..boxed..Box$LT$dyn$u20$std..error..Error$u2b$core..marker..Sync$u2b$core..marker..Send$GT$$GT$..from..StringError$GT$17hfddd0945500a84e5E $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17hd6ff5e55e3ba8f3eE $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17h824575441ffde977E $_ZN4core3ops8function6FnOnce9call_once17h2ab86767ec17c50dE $_ZN4core3ptr102drop_in_place$LT$$RF$core..iter..adapters..copied..Copied$LT$core..slice..iter..Iter$LT$u8$GT$$GT$$GT$17h63c2e1497b52f3d7E $_ZN36_$LT$T$u20$as$u20$core..any..Any$GT$7type_id17ha0c4492216d4d2e7E) + (data $.rodata (i32.const 1048576) "\02\00\00\00\04\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00called `Option::unwrap()` on a `None` value\00\01\00\00\00\00\00\00\00library/std/src/panicking.rsL\00\10\00\1c\00\00\00\03\02\00\00\1f\00\00\00L\00\10\00\1c\00\00\00\04\02\00\00\1e\00\00\00\06\00\00\00\10\00\00\00\04\00\00\00\07\00\00\00\08\00\00\00\02\00\00\00\08\00\00\00\04\00\00\00\09\00\00\00\0a\00\00\00\0b\00\00\00\0c\00\00\00\04\00\00\00\0c\00\00\00\02\00\00\00\08\00\00\00\04\00\00\00\0d\00\00\00library/alloc/src/raw_vec.rscapacity overflow\00\00\00\d0\00\10\00\1c\00\00\002\02\00\00\05\00\00\00\0f\00\00\00\00\00\00\00\01\00\00\00\10\00\00\00")) diff --git a/benches/gcd.wat b/benches/gcd.wat new file mode 100644 index 0000000000000000000000000000000000000000..64e9c982ae61b424693a8614cffe52fc147a2d14 --- /dev/null +++ b/benches/gcd.wat @@ -0,0 +1,27 @@ +(module + (func $gcd (param i32 i32) (result i32) + (local i32) + block ;; label = @1 + block ;; label = @2 + local.get 0 + br_if 0 (;@2;) + local.get 1 + local.set 2 + br 1 (;@1;) + end + loop ;; label = @2 + local.get 1 + local.get 0 + local.tee 2 + i32.rem_u + local.set 0 + local.get 2 + local.set 1 + local.get 0 + br_if 0 (;@2;) + end + end + local.get 2 + ) + (export "gcd" (func $gcd)) +) \ No newline at end of file diff --git a/build.rs b/build.rs new file mode 100644 index 0000000000000000000000000000000000000000..5f136911fc336cba694615625f6363b842ba4f67 --- /dev/null +++ b/build.rs @@ -0,0 +1,87 @@ +#!/usr/bin/env rust-script +//! Dependencies can be specified in the script file itself as follows: +//! +//! ```cargo +//! [dependencies] +//! anyhow="1.0.44" +//! ``` + +use anyhow::Result; +use std::{path::Path, process::Command}; + +fn main() -> Result<()> { + let git_output = Command::new("git") + .args(&["rev-parse", "--show-toplevel"]) + .output()?; + let project_dir = String::from_utf8(git_output.stdout)?.replace("\n", ""); + + // app_name: &str, use_wasi: bool + let apps = vec![ + ("fibonacci", true), + ("hello", true), + ("authentication", false), + ("authentication-wasi", true), + ]; + println!("cargo:rerun-if-changed=build.rs"); + // Tell Cargo that if the given file changes, to rerun this build script. + apps.iter().for_each(|app| { + if app.1 { + println!( + "cargo:rerun-if-changed={}", + format!( + "{}/experiments/application/{}/src/main.rs", + project_dir, app.0 + ) + ); + return; + } + println!( + "cargo:rerun-if-changed={}", + format!( + "{}/experiments/application/{}/src/lib.rs", + project_dir, app.0 + ) + ) + }); + + // Run cargo build + apps.iter() + .try_for_each(|app: &(&str, bool)| -> Result<()> { + println!("Building: {}", app.0); + //io::stdout().flush().expect("Couldn't flush stdout"); + if app.1 { + let result = Command::new("cargo") + .args(&["build", "--target=wasm32-wasi", "--release"]) + .current_dir(&Path::new( + format!("{}/experiments/application/{}", project_dir, app.0).as_str(), + )) + .output()?; + let stdout = String::from_utf8(result.stderr)?.replace("\n", ""); + println!("\x1b[0;32m{}\x1b[0m", stdout); + return Ok(()); + } + let result = Command::new("cargo") + .args(&[ + "rustc", + "--target=wasm32-unknown-unknown", + "--release", + "--", + "-C", + "target-feature=+multivalue", + ]) + .current_dir(&Path::new( + format!("{}/experiments/application/{}", project_dir, app.0).as_str(), + )) + .output()?; + let stdout = String::from_utf8(result.stderr)?.replace("\n", ""); + println!("\x1b[0;32m{}\x1b[0m", stdout); + Ok(()) + })?; + println!("cargo:warning=finishing build.rs"); + + // write project_dir to env var + println!("cargo:rustc-env=WASM_ENGINE_PROJECT_DIR={}", project_dir); + + Ok(()) +} +//add change diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5c2ffbcd103c50e8b4eaac383e7d9fd308c19afc --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +## wasm-engine docs \ No newline at end of file diff --git a/docs/WasmEngine-arch.png b/docs/WasmEngine-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..e29f5a6efe84c2254f3679c300e07ad3cfdda0db Binary files /dev/null and b/docs/WasmEngine-arch.png differ diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0caa17b3cb8dd12502d6ecb80fd0d4ebaad39d91 --- /dev/null +++ b/examples/README.md @@ -0,0 +1 @@ +## wasm-engine examples \ No newline at end of file diff --git a/experiments/application/add_one/Cargo.lock b/experiments/application/add_one/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..f33516b5d5269923c624884dc20add25bba78897 --- /dev/null +++ b/experiments/application/add_one/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "authentication" +version = "0.1.0" diff --git a/experiments/application/add_one/Cargo.toml b/experiments/application/add_one/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..e218947fd52ee0149c6ebdf04e1e8f8a3be4c846 --- /dev/null +++ b/experiments/application/add_one/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "authentication" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +[lib] +crate-type = ["cdylib"] diff --git a/experiments/application/add_one/src/lib.rs b/experiments/application/add_one/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..da5a569247843d79d1b36a3f7d1b8f1f672c9c65 --- /dev/null +++ b/experiments/application/add_one/src/lib.rs @@ -0,0 +1,4 @@ +#[no_mangle] +pub extern "C" fn add_one(x: i32) -> i32 { + x + 1 +} \ No newline at end of file diff --git a/experiments/application/authentication-wasi/Cargo.lock b/experiments/application/authentication-wasi/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..7aa6e8f48aa04cb732e2130e933e9db7f971eebd --- /dev/null +++ b/experiments/application/authentication-wasi/Cargo.lock @@ -0,0 +1,74 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "another_json_minimal" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ba8341e1396c8a379f62de1b47f31256f2fe0846f5f95e9c60014d2102d9bd" + +[[package]] +name = "authentication-wasi" +version = "0.1.0" +dependencies = [ + "another_json_minimal", + "md-5", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "md-5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +dependencies = [ + "block-buffer", + "digest", + "opaque-debug", +] + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" diff --git a/experiments/application/authentication-wasi/Cargo.toml b/experiments/application/authentication-wasi/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..b862de8262971ee5417072b574c2f31195ba8cc6 --- /dev/null +++ b/experiments/application/authentication-wasi/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "authentication-wasi" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +md-5 = { version="0.9", default-features = false } +another_json_minimal = "0.0.2" diff --git a/experiments/application/authentication-wasi/src/main.rs b/experiments/application/authentication-wasi/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..df00eae3f609423de2de7173fb923ce3c1d76471 --- /dev/null +++ b/experiments/application/authentication-wasi/src/main.rs @@ -0,0 +1,68 @@ +use another_json_minimal::Json; +use md5::{Digest, Md5}; +use std::{env, fmt::Write}; + +#[derive(Default)] +struct Response { + status: String, + body: String, +} + +fn main() { + let args: Vec = env::args().collect(); + if args.len() != 3 { + eprintln!("usage: authentication "); + return; + } + + let arg_uri = &args[0]; + let arg_body = &args[1]; + let arg_secret = &args[2]; + + let arg_func = "argfunc"; + let content = format!("{}#{}#{}", arg_uri, arg_body, arg_func); + + // create a Md5 hasher instance + let mut hasher = Md5::new(); + // process input message + hasher.update(content.as_bytes()); + let result = hasher.finalize(); + + let slice = result.as_slice(); + let mut hash = String::with_capacity(slice.len() * 2); + for &b in slice { + write!(&mut hash, "{:02x}", b).unwrap(); + } + + let mut r: Response = Response::default(); + let html: String; + if &hash == arg_secret { + r.status = "200".to_string(); + html = "

Auth Pass!

hash ".to_owned() + &hash + "

"; + r.body = html; + } else { + r.status = "403".to_string(); + html = "

Auth Forbidden!

hash ".to_owned() + + &hash + + " secret " + + &arg_secret + + "

"; + r.body = html; + } + + //we use complicated another_json_minimal temporary + let mut json = Json::new(); + let status = Json::OBJECT { + name: String::from("status"), + value: Box::new(Json::STRING(String::from(&r.status))), + }; + json.add(status); + let body = Json::OBJECT { + name: String::from("body"), + value: Box::new(Json::STRING(String::from(&r.body))), + }; + json.add(body); + let serialized = json.print(); + + println!("{}", serialized); +} diff --git a/experiments/application/authentication/Cargo.lock b/experiments/application/authentication/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..9d96c7b1ee8bae5fec6ccd1c460a670b34a71d53 --- /dev/null +++ b/experiments/application/authentication/Cargo.lock @@ -0,0 +1,154 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "another_json_minimal" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ba8341e1396c8a379f62de1b47f31256f2fe0846f5f95e9c60014d2102d9bd" + +[[package]] +name = "authentication" +version = "0.1.0" +dependencies = [ + "another_json_minimal", + "md-5", + "serde", + "serde_json", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "md-5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +dependencies = [ + "block-buffer", + "digest", + "opaque-debug", +] + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "proc-macro2" +version = "1.0.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.132" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcbd0344bc6533bc7ec56df11d42fb70f1b912351c0825ccb7211b59d8af7cf5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" diff --git a/experiments/application/authentication/Cargo.toml b/experiments/application/authentication/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..477297924e109998369380138e4358e3f37917f4 --- /dev/null +++ b/experiments/application/authentication/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "authentication" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +md-5 = { version="0.9", default-features = false } +another_json_minimal = "0.0.2" + +[lib] +crate-type = ["cdylib"] + +[dev-dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + diff --git a/experiments/application/authentication/src/lib.rs b/experiments/application/authentication/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..0aa5d98072e37c358c6c7461f8f145af981f84f6 --- /dev/null +++ b/experiments/application/authentication/src/lib.rs @@ -0,0 +1,91 @@ +use std::fmt::Write; + +use another_json_minimal::Json; +use md5::{Digest, Md5}; + +#[derive(Default)] +struct Response { + status: String, + body: String, +} + +#[no_mangle] +pub fn authentication(data: &str) -> (*mut u8, usize) { + // fulfill data p + let arg_func = "argfunc"; + let json = match Json::parse(data.as_bytes()) { + Ok(json) => json, + Err((position, message)) => { + panic!("`{}` at position `{}`!!!", position, message); + } + }; + let arg_uri = json.get("arg_uri").unwrap().print(); + let arg_body = json.get("arg_body").unwrap().print(); + let arg_secret = json.get("arg_secret").unwrap().print(); + + let content = format!("{}#{}#{}", arg_uri, arg_body, arg_func); + + // create a Md5 hasher instance + let mut hasher = Md5::new(); + // process input message + hasher.update(content.as_bytes()); + let result = hasher.finalize(); + + let slice = result.as_slice(); + let mut hash = String::with_capacity(slice.len() * 2); + for &b in slice { + write!(&mut hash, "{:02x}", b).unwrap(); + } + + let mut r: Response = Response::default(); + let html: String; + if hash == arg_secret { + r.status = "200".to_string(); + html = "

Auth Pass!

hash ".to_owned() + &hash + "

"; + r.body = html; + } else { + r.status = "403".to_string(); + html = "

Auth Forbidden!

hash ".to_owned() + + &hash + + " secret " + + &arg_secret + + "

"; + r.body = html; + } + + //we use complicated another_json_minimal temporary + let mut json = Json::new(); + let status = Json::OBJECT { + name: String::from("status"), + value: Box::new(Json::STRING(String::from(&r.status))), + }; + + json.add(status); + let body = Json::OBJECT { + name: String::from("body"), + value: Box::new(Json::STRING(String::from(&r.body))), + }; + json.add(body); + + let mut serialized = json.print(); + (serialized.as_mut_ptr(), serialized.len()) +} + +#[test] +fn test_authentication() { + use serde::{Deserialize, Serialize}; + #[derive(Deserialize, Serialize, Default)] + struct Data { + arg_uri: String, + arg_body: String, + arg_secret: String, + } + let p: Data = Data { + arg_uri: "uri".to_string(), + arg_body: "body".to_string(), + arg_secret: "secrect".to_string(), + }; + + let serialized = serde_json::to_string(&p).unwrap(); + let (_p, _l) = authentication(&serialized); +} diff --git a/experiments/application/echo-string/Cargo.lock b/experiments/application/echo-string/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..18266ede0f8191b0300d03c2f6081c4137547aec --- /dev/null +++ b/experiments/application/echo-string/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "echo-string" +version = "0.1.0" diff --git a/experiments/application/echo-string/Cargo.toml b/experiments/application/echo-string/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..51c4cfa7e2488ae374896237e1a000361191eb29 --- /dev/null +++ b/experiments/application/echo-string/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "echo-string" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +[lib] +crate-type = ["cdylib"] diff --git a/experiments/application/echo-string/src/lib.rs b/experiments/application/echo-string/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..56f38f7e7d8349b093f1382828ed1bcf1348666d --- /dev/null +++ b/experiments/application/echo-string/src/lib.rs @@ -0,0 +1,5 @@ +#[no_mangle] +pub fn echo_string(input: &str) -> (*const u8, usize) { + let r = input.to_owned() + "b"; + (r.as_ptr(), r.len()) +} diff --git a/experiments/application/fibonacci/Cargo.lock b/experiments/application/fibonacci/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..06a56e6368ea075d8a75a44a574ad4a412eb716b --- /dev/null +++ b/experiments/application/fibonacci/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "fibonacci" +version = "0.1.0" diff --git a/experiments/application/fibonacci/Cargo.toml b/experiments/application/fibonacci/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..9cd048effa7705724ee7ebf5f6a19f212df9e024 --- /dev/null +++ b/experiments/application/fibonacci/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "fibonacci" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/experiments/application/fibonacci/src/main.rs b/experiments/application/fibonacci/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..4c6c79fbd9ae3ae09af7192e2caf6709e9c2826b --- /dev/null +++ b/experiments/application/fibonacci/src/main.rs @@ -0,0 +1,18 @@ +use std::env; + +fn fib(n: u64) -> u64 { + if n <= 1 { + return n; + } + fib(n - 1) + fib(n - 2) +} + +fn main() { + let args: Vec = env::args().collect(); + + if args.len() != 1 { + eprintln!("only single parameter is needed"); + return; + } + println!("{}", fib(args[0].parse::().unwrap())) +} diff --git a/experiments/application/hello/Cargo.lock b/experiments/application/hello/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..c3aedd7700aaf0552334ae612637da4275efa62d --- /dev/null +++ b/experiments/application/hello/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "hello" +version = "0.1.0" diff --git a/experiments/application/hello/Cargo.toml b/experiments/application/hello/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..fb1ec2c95292de3ca0a7c5bb805241973cdab631 --- /dev/null +++ b/experiments/application/hello/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "hello" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/experiments/application/hello/src/main.rs b/experiments/application/hello/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..b3dbf1ae6af495da726f4a6dc698e6bf55afad05 --- /dev/null +++ b/experiments/application/hello/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, Budda!"); +} diff --git a/experiments/bash_libraries/csv_to_dat.sh b/experiments/bash_libraries/csv_to_dat.sh new file mode 100644 index 0000000000000000000000000000000000000000..d6951a33a426990517f93b7beefe9dcb02ed31d0 --- /dev/null +++ b/experiments/bash_libraries/csv_to_dat.sh @@ -0,0 +1,29 @@ +# shellcheck shell=bash +if [ -n "$__csv_to_dat_sh__" ]; then return; fi +__csv_to_dat_sh__=$(date) + +source "panic.sh" || exit 1 + +# Takes a variadic number of paths to *.csv files and converts to *.dat files in the same directory +csv_to_dat() { + if (($# == 0)); then + panic "insufficient parameters" + return 1 + fi + + for arg in "$@"; do + if ! [[ "$arg" =~ ".csv"$ ]]; then + panic "$arg is not a *.csv file" + return 1 + fi + if [[ ! -f "$arg" ]]; then + panic "$arg does not exit" + return 1 + fi + done + + for file in "$@"; do + echo -n "#" > "${file/.csv/.dat}" + tr ',' ' ' < "$file" | column -t >> "${file/.csv/.dat}" + done +} diff --git a/experiments/bash_libraries/error_msg.sh b/experiments/bash_libraries/error_msg.sh new file mode 100644 index 0000000000000000000000000000000000000000..c30585a1584788761dfaae33763502d3c9b534e5 --- /dev/null +++ b/experiments/bash_libraries/error_msg.sh @@ -0,0 +1,7 @@ +# shellcheck shell=bash +if [ -n "$__error_msg_sh__" ]; then return; fi +__error_msg_sh__=$(date) + +error_msg() { + printf "%.23s %s() at %s:%s - %s\n" "$(date +%F.%T.%N)" "${FUNCNAME[0]}" "$(realpath "${BASH_SOURCE[0]##*/}")" "${BASH_LINENO[0]}" "${@}" +} diff --git a/experiments/bash_libraries/generate_gnuplots.sh b/experiments/bash_libraries/generate_gnuplots.sh new file mode 100644 index 0000000000000000000000000000000000000000..45826ce0b1ffac564882fdc4b0f13e86186922f6 --- /dev/null +++ b/experiments/bash_libraries/generate_gnuplots.sh @@ -0,0 +1,36 @@ +# shellcheck shell=bash +if [ -n "$__generate_gnuplots_sh__" ]; then return; fi +__generate_gnuplots_sh__=$(date) + +source "panic.sh" || exit 1 + +# Runs all *.gnuplot files found gnuplot_directory from results_directory +# Outputting resulting diagrams in results_directory +# $1 - results_directory containing the data file referenced in the gnuplot file +# $2 - gnuplot_directory containing the *.gnuplot specification files +generate_gnuplots() { + local -r results_directory="$1" + local -r experiment_directory="$2" + + if ! command -v gnuplot &> /dev/null; then + panic "gnuplot could not be found in path" + return 1 + fi + # shellcheck disable=SC2154 + if [ -z "$results_directory" ]; then + panic "results_directory was unset or empty" + return 1 + fi + # shellcheck disable=SC2154 + if [ -z "$experiment_directory" ]; then + panic "error: EXPERIMENT_DIRECTORY was unset or empty" + return 1 + fi + cd "$results_directory" || exit + + shopt -s nullglob + for gnuplot_file in "$experiment_directory"/*.gnuplot; do + gnuplot "$gnuplot_file" + done + cd "$experiment_directory" || exit +} diff --git a/experiments/bash_libraries/get_result_count.sh b/experiments/bash_libraries/get_result_count.sh new file mode 100644 index 0000000000000000000000000000000000000000..d7bd5011dce4df4d3488af49d0854a628732a090 --- /dev/null +++ b/experiments/bash_libraries/get_result_count.sh @@ -0,0 +1,38 @@ +# shellcheck shell=bash +if [ -n "$__get_result_count_sh__" ]; then return; fi +__get_result_count_sh__=$(date) + +source "panic.sh" || exit 1 + +# Given a file, returns the number of results +# This assumes a *.csv file with a header +# $1 the file we want to check for results +# $2 an optional return nameref +get_result_count() { + if (($# != 1)); then + panic "insufficient parameters. $#/1" + return 1 + elif [[ ! -f $1 ]]; then + panic "the file $1 does not exist" + return 1 + elif [[ ! -s $1 ]]; then + panic "the file $1 is size 0" + return 1 + fi + + local -r file=$1 + + # Subtract one line for the header + local -i count=$(($(wc -l < "$file") - 1)) + + if (($# == 2)); then + # shellcheck disable=2034 + local -n __result=$2 + fi + + if ((count > 0)); then + return 0 + else + return 1 + fi +} diff --git a/experiments/bash_libraries/panic.sh b/experiments/bash_libraries/panic.sh new file mode 100644 index 0000000000000000000000000000000000000000..0f6d1f39af502730a68b180151d962329df53bc5 --- /dev/null +++ b/experiments/bash_libraries/panic.sh @@ -0,0 +1,23 @@ +# shellcheck shell=bash +if [ -n "$__panic_sh__" ]; then return; fi +__panic_sh__=$(date) + +source "error_msg.sh" || exit 1 + +declare __common_did_dump_callstack=false + +__common_dump_callstack() { + echo "Call Stack:" + for ((i = 1; i < ${#FUNCNAME[@]}; i++)); do + printf "\t%d - %s\n" "$((i - 1))" "${FUNCNAME[i]} (${BASH_SOURCE[i + 1]}:${BASH_LINENO[i]})" + done +} + +# Public API +panic() { + error_msg "${@}" + [[ "$__common_did_dump_callstack" == false ]] && { + __common_dump_callstack + __common_did_dump_callstack=true + } +} diff --git a/experiments/bash_libraries/percentiles_table.sh b/experiments/bash_libraries/percentiles_table.sh new file mode 100644 index 0000000000000000000000000000000000000000..a56c672b38083ed60ca731679990cc718413b8fb --- /dev/null +++ b/experiments/bash_libraries/percentiles_table.sh @@ -0,0 +1,77 @@ +# shellcheck shell=bash + +source "type_checks.sh" || exit 1 + +# These utility functions are used to generate percentile tables that summarize distributions of data. +# Each row represents an independent variable, such as a scheduling policy +# The data for each column is provided as a single column of sorted data +# If the data is too course, a percentile might be statistically insignificant. If this is the case, +# The script writes an * to the appropriate cell +# +# Example: +# +# percentiles_table_header "./table.csv" +# for $variant in (fifo_nopreemption fifo_preemption edf_nopreemption edf_preemption); do +# percentiles_table_row "./${variant}.csv" "./table.csv" "$variant" +# done +# +# See Also: +# - csv_to_dat - Can transform a table into a *.dat file suitable for gnuplot +# +# References +# - The AWK Programming Language - https://ia802309.us.archive.org/25/items/pdfy-MgN0H1joIoDVoIC7/The_AWK_Programming_Language.pdf +# - GAWK: Effective AWK Programming - https://www.gnu.org/software/gawk/manual/gawk.pdf + +percentiles_table_header() { + local table_file="${1:?table_file not set}" + # Can optionally override "app" in header + local label_header="${2:-app}" + echo "${label_header},cnt,min,mean,p50,p90,p99,max" >>"$table_file" +} + +# columnar_data_file is assumed to be a file containing a single column or sorted data +percentiles_table_row() { + local -r columnar_data_file="${1:?columnar_data_file not set}" + check_file columnar_data_file + local -r table_file="${2:?table_file not set}" + check_file table_file + local -r row_label="${3:?row_label not set}" + local -r format_string="${4:-%1.4f}" + + # Count the number of results + local -i sample_size + sample_size=$(wc -l <"$columnar_data_file") + + if ((sample_size == 0)); then + # We might not have actually run every variant depending on iterations and workload mix + # Insert a degenerate row if this is the case + echo "$row_label,0,*,*,*,*,*,*" >>"$table_file" + else + awk ' + BEGIN { + sample_size='"$sample_size"' + row_label="'"$row_label"'" + format_string="'"$format_string"'" + invalid_number_symbol="*" + sum = 0 + p50_idx = int(sample_size * 0.5) + p90_idx = int(sample_size * 0.9) + p99_idx = int(sample_size * 0.99) + p100_idx = sample_size + } + + # Empty pattern matches all rows + { sum += $0 } + NR==1 { min = sample_size > 0 ? sprintf(format_string, $0) : invalid_number_symbol } + NR==p50_idx { p50 = sample_size >= 3 ? sprintf(format_string, $0) : invalid_number_symbol } + NR==p90_idx { p90 = sample_size >= 10 ? sprintf(format_string, $0) : invalid_number_symbol } + NR==p99_idx { p99 = sample_size >= 100 ? sprintf(format_string, $0) : invalid_number_symbol } + NR==p100_idx { p100 = sample_size > 0 ? sprintf(format_string, $0) : invalid_number_symbol } + + END { + mean = sample_size > 0 ? sprintf(format_string, sum / NR) : invalid_number_symbol + printf "%s,%d,%s,%s,%s,%s,%s,%s\n", row_label, sample_size, min, mean, p50, p90, p99, p100 + } + ' <"$columnar_data_file" >>"$table_file" + fi +} diff --git a/experiments/bash_libraries/type_checks.sh b/experiments/bash_libraries/type_checks.sh new file mode 100644 index 0000000000000000000000000000000000000000..a24d2d59671806db502f11b3dc68536c375c2a1a --- /dev/null +++ b/experiments/bash_libraries/type_checks.sh @@ -0,0 +1,42 @@ +# shellcheck shell=bash + +# Example: Be sure to not set the -i attribute until after validating the content +# local -r second=${2:?second not set} +# check_number second || return 1 +# local -i second +check_number() { + local arg=${1:?arg not set} + # echo "${arg_raw}: ${!arg_raw}" + # A non-numeric string seems to coerce to 0 + ((arg == 0)) && [[ ${!arg} != "0" ]] && echo "$arg contains ${!arg}, which is not a valid number" && return 1 + + return 0 +} + +check_file() { + local arg_raw=${1:?arg not set} + local -n arg="$arg_raw" + [[ ! -f "$arg" ]] && echo "${arg_raw} contains $arg, which is not a valid file" && return 1 + + return 0 +} + +check_nameref() { + # Namerefs automatically transitively resolve, so we have to use indirect expansion to get the name of the intermediate variable name + local nameref_name=${1:?arg not set} + local -n nameref="$nameref_name" + local nameref_value=${!nameref} + + [[ ! -v nameref ]] && echo "nameref $nameref_name contains $nameref_value, which does not resolve to variable" && return 1 + + return 0 +} + +check_argc() { + local -i expected_argc="$1" + local argv="$2" + local -i actual_argc="${#argv}" + ((expected_argc != actual_argc)) && echo "expected ${expected_argc} received ${actual_argc}" && return 1 + + return 0 +} diff --git a/experiments/concurrency/dockerfile b/experiments/concurrency/dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..558512cb085a5ed4b17a63071ae05df59e8bc5b5 --- /dev/null +++ b/experiments/concurrency/dockerfile @@ -0,0 +1,5 @@ +FROM hub.oepkgs.net/openeuler/openeuler:21.03 +COPY wasm-engine /root/ +COPY authentication-wasi.wasm /root/modules/ +WORKDIR /root +CMD ["./wasm-engine", "-p", "modules"] diff --git a/experiments/concurrency/run-wasm-engine.sh b/experiments/concurrency/run-wasm-engine.sh new file mode 100644 index 0000000000000000000000000000000000000000..8dab1e48b31e273786464a3733761e8788f9a462 --- /dev/null +++ b/experiments/concurrency/run-wasm-engine.sh @@ -0,0 +1,27 @@ +#!/bin/bash +PROJECT_DIR=$(git rev-parse --show-toplevel) +cpus="$1" +memory="$2" + +copy_file_to_context() { + cp "$PROJECT_DIR"/target/release/wasm-engine . + cp "$PROJECT_DIR"/experiments/application/authentication-wasi/target/wasm32-wasi/release/authentication-wasi.wasm . +} + +docker_build_run() { + docker build -f dockerfile -t wasm-engine:authentication-wasi . + docker run -itd --cpus "$cpus" --memory "$memory" -p 10000:10000 wasm-engine:authentication-wasi +} + +isula_build_run() { + isula-build ctr-img build -f dockerfile -o docker-daemon:wasm-engine:authentication-wasi . + docker run -itd --cpus "$cpus" --memory "$memory" -p 10000:10000 wasm-engine:authentication-wasi +} + +clean() { + rm -f wasm-engine authentication-wasi.wasm +} + +copy_file_to_context +isula_build_run +clean diff --git a/experiments/concurrency/run.sh b/experiments/concurrency/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..eccb7960a9164b36579686313b958f5f7a34c986 --- /dev/null +++ b/experiments/concurrency/run.sh @@ -0,0 +1,195 @@ +#!/bin/bash + +# This experiment is intended to document how the level of concurrent requests influence the latency, throughput, and success/failure rate + +# Add bash_libraries directory to path +__run_sh__base_path="$(dirname "$(realpath --logical "${BASH_SOURCE[0]}")")" +__run_sh__bash_libraries_relative_path="../bash_libraries" +__run_sh__bash_libraries_absolute_path=$(cd "$__run_sh__base_path" && cd "$__run_sh__bash_libraries_relative_path" && pwd) +export PATH="$__run_sh__bash_libraries_absolute_path:$PATH" + +source csv_to_dat.sh || exit 1 +source generate_gnuplots.sh || exit 1 +source get_result_count.sh || exit 1 +source panic.sh || exit 1 +source percentiles_table.sh || exit 1 + +if ! command -v hey >/dev/null; then + echo "hey is not present." + exit 1 +fi + +declare -gi iterations=10000 +declare -ga concurrency=(1 20 40 60 80 100) +declare -g hey_command="" + +run_samples() { + if (($# != 2)); then + panic "invalid number of arguments \"$1\"" + return 1 + elif [[ -z "$1" ]]; then + panic "hostname \"$1\" was empty" + return 1 + fi + + local hostname="$1" + local test_type="$2" + + printf "Running Samples: " + hey_iterations=16 + conn=1 + get_command_from_type "$test_type" + eval "$hey_command" || { + printf "[ERR]\n" + panic "samples failed" + return 1 + } + + printf "[OK]\n" + return 0 +} + +# Execute the experiments +# $1 (hostname) +# $2 (results_directory) - a directory where we will store our results +# $3 (test_type) +run_experiments() { + if (($# != 3)); then + panic "invalid number of arguments \"$1\"" + return 1 + elif [[ -z "$1" ]]; then + panic "hostname \"$1\" was empty" + return 1 + elif [[ ! -d "$2" ]]; then + panic "directory \"$2\" does not exist" + return 1 + fi + + local hostname="$1" + local results_directory="$2" + + # Execute the experiments + printf "Running Experiments:\n" + for conn in ${concurrency[*]}; do + printf "\t%d Concurrency: " "$conn" + conn=$conn + hey_iterations=$iterations + get_command_from_type "$test_type" + eval $hey_command >"$results_directory/con$conn.csv" 2>/dev/null || { + printf "[ERR]\n" + panic "experiment failed" + return 1 + } + get_result_count "$results_directory/con$conn.csv" || { + printf "[ERR]\n" + panic "con$conn.csv unexpectedly has zero requests" + return 1 + } + printf "[OK]\n" + done + + return 0 +} + +process_results() { + if (($# != 1)); then + panic "invalid number of arguments ($#, expected 1)" + return 1 + elif ! [[ -d "$1" ]]; then + panic "directory $1 does not exist" + return 1 + fi + + local -r results_directory="$1" + + printf "Processing Results: " + # Write headers to CSVs + if ! grep -q "Concurrency,Success_Rate" "$results_directory/success.csv" 2>/dev/null; then + printf "Concurrency,Success_Rate\n" >>"$results_directory/success.csv" + fi + if ! grep -q "Concurrency,Throughput" "$results_directory/throughput.csv" 2>/dev/null; then + printf "Concurrency,Throughput\n" >>"$results_directory/throughput.csv" + fi + if ! grep -q "cnt,min,mean" "$results_directory/latency.csv" 2>/dev/null; then + percentiles_table_header "$results_directory/latency.csv" "Con" + fi + + for conn in ${concurrency[*]}; do + + if [[ ! -f "$results_directory/con$conn.csv" ]]; then + printf "[ERR]\n" + panic "Missing $results_directory/con$conn.csv" + return 1 + fi + + # Calculate Success Rate for csv (percent of requests resulting in 200) + awk -F, ' + $7 == 200 {ok++} + END{printf "'"$conn"',%3.5f\n", (ok / '"$iterations"' * 100)} + ' <"$results_directory/con$conn.csv" >>"$results_directory/success.csv" + + # Filter on 200s, convert from s to ms, and sort + awk -F, '$7 == 200 {print ($1 * 1000)}' <"$results_directory/con$conn.csv" | + sort -g >"$results_directory/con$conn-response.csv" + + # Get Number of 200s + oks=$(wc -l <"$results_directory/con$conn-response.csv") + ((oks == 0)) && continue # If all errors, skip line + + # We determine duration by looking at the timestamp of the last complete request + # TODO: Should this instead just use the client-side synthetic duration_sec value? + duration=$(tail -n1 "$results_directory/con$conn.csv" | cut -d, -f8) + + # Throughput is calculated as the mean number of successful requests per second + throughput=$(echo "$oks/$duration" | bc) + printf "%d,%f\n" "$conn" "$throughput" >>"$results_directory/throughput.csv" + + # Generate Latency Data for csv + percentiles_table_row "$results_directory/con$conn-response.csv" "$results_directory/latency.csv" "$conn" + + # Delete scratch file used for sorting/counting + rm -rf "$results_directory/con$conn-response.csv" + done + + # Transform csvs to dat files for gnuplot + csv_to_dat "$results_directory/success.csv" "$results_directory/throughput.csv" "$results_directory/latency.csv" + + # Generate gnuplots + generate_gnuplots "$results_directory" "$__run_sh__base_path" || { + printf "[ERR]\n" + panic "failed to generate gnuplots" + } + + printf "[OK]\n" + return 0 +} + +get_command_from_type() { + local test_type="$1" + + common_part="hey -n \$hey_iterations -c \$conn -cpus 1 -o csv -m POST -H \"Content-Type: application/json\" -d '{\"arg_uri\":\"yes\", \"arg_body\":\"yes\", \"arg_secret\":\"12345\"}' " + case "$test_type" in + "wasi") hey_command="$common_part""http://${target_hostname}:10000/function/run/authentication-wasi/1.0.0/start" ;; + "wasm") hey_command="$common_part""http://${target_hostname}:10000/function/run/authentication/1.0.0/authentication" ;; + "js") hey_command="$common_part""http://${target_hostname}:8001/authentication" ;; + *) + echo "you need to choose only one test type" + exit 1 + ;; + esac +} + +# Expected Symbol used by the framework +experiment_client() { + local -r target_hostname="$1" + local -r results_directory="$2" + local -r test_type="$3" + + run_samples "$target_hostname" "$test_type" || return 1 + run_experiments "$target_hostname" "$results_directory" "$test_type" || return 1 + process_results "$results_directory" || return 1 + + return 0 +} + +experiment_client 127.0.0.1 /root/gitee/wasm-engine/experiments/result wasi diff --git a/experiments/concurrency/success.gnuplot b/experiments/concurrency/success.gnuplot new file mode 100644 index 0000000000000000000000000000000000000000..02be39e2216cfc1648d6055fc08fa30927445526 --- /dev/null +++ b/experiments/concurrency/success.gnuplot @@ -0,0 +1,12 @@ +reset + +set term jpeg +set output "success.jpg" + +set xlabel "Concurrency" +set ylabel "% 2XX" + +set xrange [-5:105] +set yrange [0:110] + +plot 'success.dat' using 1:2 title '2XX' diff --git a/experiments/concurrency/throughput.gnuplot b/experiments/concurrency/throughput.gnuplot new file mode 100644 index 0000000000000000000000000000000000000000..967baa9100e75e253d5dab9a83289d084122ccb1 --- /dev/null +++ b/experiments/concurrency/throughput.gnuplot @@ -0,0 +1,15 @@ +reset + +set term jpeg +set output "throughput.jpg" + +stats 'throughput.dat' nooutput +N = STATS_records + +set xlabel "Concurrency" +set ylabel "Requests/sec" + +set xrange [-5:105] +set yrange [0:] + +plot for [i=0:N/6-1]'throughput.dat' every ::(0+i*6)::(5+i*6) using 1:2 title 'Reqs/sec '.i with linespoint pointtype (i+1) \ No newline at end of file diff --git a/experiments/pyplot/latency.py b/experiments/pyplot/latency.py new file mode 100644 index 0000000000000000000000000000000000000000..17ec59298087d1cdc9406e3b05b6db68a16e057a --- /dev/null +++ b/experiments/pyplot/latency.py @@ -0,0 +1,24 @@ +from line_chart import LineChart + + +class Latency(LineChart): + def process_raw_data(self): + for csv in self.csv_file: + data = {} + with open(csv) as f: + lines = f.readlines() + total_round = len(lines[1:])/6 + for line in lines[1:]: + raw = line.strip().split(',') + if raw[0] not in data: + data[raw[0]] = float(raw[3]) + continue + data[raw[0]] = data[raw[0]] + float(raw[3]) + for k, v in data.items(): + data[k] = v / total_round + self.data.append(data) + + +m = Latency("latency") +m.process_raw_data() +m.plot("concurrency", "latency", ["latency-wasi(ms)", "latency-js(ms)"]) diff --git a/experiments/pyplot/line_chart.py b/experiments/pyplot/line_chart.py new file mode 100644 index 0000000000000000000000000000000000000000..f9d3cb3eb5a1859358454cecdd3a85962d6c0481 --- /dev/null +++ b/experiments/pyplot/line_chart.py @@ -0,0 +1,56 @@ +from abc import ABC, abstractmethod +import sys +import matplotlib.pyplot as plt + + +class LineChart(ABC): + """ + Line chart program + """ + + def __init__(self, output): + self.csv_file = [] + self.init_args() + self.data = [] + self.output = output + + def init_args(self): + import argparse + import platform + + class MyParser(argparse.ArgumentParser): + def error(self, message): + sys.stderr.write('error: %s\n' % message) + self.print_help() + sys.exit(2) + + parser = MyParser(description="plot line chart") + parser.add_argument('csv', nargs='+', help='result csv file') + args = parser.parse_args() + + for csv in args.csv: + self.csv_file.append(csv) + + @abstractmethod + def process_raw_data(self): + pass + + def plot(self, xlabel, ylabel, plot_label): + max_y = 0 + for i, data_entry in enumerate(self.data): + x_ticks = [k for k in data_entry.keys()] + y_ticks = [v for v in data_entry.values()] + print(y_ticks) + cur_max = max(y_ticks) + if cur_max > max_y: + max_y = cur_max + + plt.scatter(x_ticks, y_ticks, color="C" + str(i)) + plt.plot(x_ticks, y_ticks, + color="C" + str(i), label=plot_label[i]) + plt.ylim(top=max_y * 1.2) + plt.xlabel(xlabel) + plt.ylabel(ylabel) + plt.legend(loc="best") + plt.show() + plt.savefig(self.output, bbox_inches='tight') diff --git a/experiments/pyplot/throughput.py b/experiments/pyplot/throughput.py new file mode 100644 index 0000000000000000000000000000000000000000..45e5bd6e3a0ff1f1516bcf2b3bde7c8086b48732 --- /dev/null +++ b/experiments/pyplot/throughput.py @@ -0,0 +1,25 @@ +from line_chart import LineChart + + +class Throughput(LineChart): + def process_raw_data(self): + for csv in self.csv_file: + data = {} + with open(csv) as f: + lines = f.readlines() + total_round = len(lines[1:])/6 + for line in lines[1:]: + raw = line.strip().split(',') + if raw[0] not in data: + data[raw[0]] = float(raw[1]) + continue + data[raw[0] + ] = data[raw[0]] + float(raw[1]) + for k, v in data.items(): + data[k] = v / total_round + self.data.append(data) + + +m = Throughput("throughput") +m.process_raw_data() +m.plot("concurrency", "Requests/sec", ["throughput-wasi", "throughput-js"]) diff --git a/src/function_store/local_store.rs b/src/function_store/local_store.rs new file mode 100644 index 0000000000000000000000000000000000000000..d68c45151c8ee7958cbaca26a2f89a7c35fd51ca --- /dev/null +++ b/src/function_store/local_store.rs @@ -0,0 +1,237 @@ +use super::pull; +use anyhow::{anyhow, Ok, Result}; +use oci_distribution::{secrets::RegistryAuth, Client, Reference}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::fmt::{self, Display}; +use std::fs::read_dir; +use std::path::Path; +use std::sync::Arc; +use tokio::fs::OpenOptions; +use tokio::io::AsyncWriteExt; +use tokio::sync::RwLock; +use tracing::{self, debug, info}; + +#[derive(Clone, Default, Debug, Serialize, Deserialize)] +pub struct FunctionEntry { + pub func_name: String, + pub func_image_name: String, + pub func_local_path: String, + pub wasi_cap: bool, +} + +impl FunctionEntry { + fn new(name: &str, image_name: &str, path: &str, cap: bool) -> Self { + FunctionEntry { + func_name: name.to_string(), + func_image_name: image_name.to_string(), + func_local_path: path.to_string(), + wasi_cap: cap, + } + } +} + +pub struct FunctionEntries(pub Vec); + +impl Display for FunctionEntries { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "[")?; + for entry in self.0.iter() { + write!(f, "{{")?; + write!( + f, + "func_name: {}, func_image_name: {}, wasi_cap: {}", + entry.func_name, entry.func_image_name, entry.wasi_cap + )?; + write!(f, "}}, ")?; + } + write!(f, "]") + } +} + +#[derive(Clone, Default)] +pub struct FunctionStore { + function_list: Arc>>, + function_store_path: String, + function_persist_path: String, +} + +impl FunctionStore { + /// Create new FunctionStore + pub fn new(path: &str) -> Self { + let persist_path = Path::new(path) + .join("persist.json") + .into_os_string() + .into_string() + .unwrap(); + + FunctionStore { + function_list: Arc::new(RwLock::new(HashMap::new())), + function_store_path: path.to_string(), + function_persist_path: persist_path, + } + } + + pub async fn exist(&self, func_name: &str) -> bool { + let func_list = self.function_list.read().await; + + if func_list.contains_key(func_name) { + return true; + } + + return false; + } + + /// Add module into the function store under a specific function name, and wasi capabilites. + pub async fn add(&self, function_name: &str, image_name: &str, wasi_cap: bool) -> Result<()> { + let mut writer = self.function_list.write().await; + + let func_store_dir = Path::new(&self.function_store_path) + .join(function_name) + .into_os_string() + .into_string() + .unwrap(); + + if writer.contains_key(function_name) { + tracing::error!("function image already exist"); + return Err(anyhow!( + "function {} already exist in the local function store", + function_name + )); + } + + let mut client = Client::new(pull::build_client_config(true)); + let reference: Reference = image_name.parse().expect("Not a valid image reference"); + + // pull the wasm image into the local func_store_path + pull::pull_wasm( + &mut client, + &RegistryAuth::Anonymous, + &reference, + func_store_dir.as_str(), + ) + .await; + + // only one wasm module file should be in the func_store_dir + if read_dir(func_store_dir.clone()).unwrap().count() != 1 { + return Err(anyhow!( + "only one wasm module file under the {} function stor dir", + func_store_dir.as_str() + )); + } + + let store_path = read_dir(func_store_dir.clone()).unwrap().next().unwrap()?; + let func_wasm_file_path = store_path + .path() + .canonicalize()? + .into_os_string() + .into_string() + .unwrap(); + + writer.insert( + function_name.to_string(), + FunctionEntry::new( + function_name, + image_name, + func_wasm_file_path.as_str(), + wasi_cap, + ), + ); + + Ok(()) + } + + pub async fn delete(&self, func_name: &str) -> Result<()> { + let mut writer = self.function_list.write().await; + + if !writer.contains_key(func_name) { + return Err(anyhow!( + "request delete func {} not exist in the local store", + func_name + )); + } + + writer.remove(func_name).unwrap(); + + Ok(()) + } + + pub async fn list(&self) -> Result> { + let reader = self.function_list.read().await; + let mut funcs_vec: Vec = Vec::new(); + + for v in reader.values() { + funcs_vec.push(v.clone()); + } + + Ok(funcs_vec) + } + + pub async fn query(&self, func_name: &str) -> Result { + let reader = self.function_list.read().await; + + if !reader.contains_key(func_name) { + return Err(anyhow!( + "request query func {} not exist in the local store", + func_name + )); + } + + let v = reader.get(func_name).unwrap(); + + Ok(v.clone()) + } + + // save the function hashmap info into persist.json + pub async fn save(&self) -> Result<()> { + let hashmap = self.function_list.read().await; + + let j = serde_json::to_string(&(*hashmap))?; + + info!("function list hashmap json: {}", j); + + let mut file = OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(self.function_persist_path.clone()) + .await?; + + file.write_all(j.as_bytes()).await?; + + Ok(()) + } + + // restore the function info map from the local persist.json file + pub async fn restore(&self) -> Result<()> { + let persist_file_path = Path::new(self.function_persist_path.as_str()); + if !persist_file_path.exists() { + info!("no persist json file exist, restore end"); + return Ok(()); + } + + let file = std::fs::OpenOptions::new() + .read(true) + .open(self.function_persist_path.clone())?; + + let metadata = file.metadata()?; + if metadata.len() == 0 { + info!("persist json file: {} is empty", self.function_persist_path); + return Ok(()); + } + + let func_info: HashMap = serde_json::from_reader(file)?; + debug!( + "read functions info from {} file, func info: {:?}", + self.function_persist_path, func_info + ); + + let mut hashmap = self.function_list.write().await; + hashmap.clear(); + hashmap.extend(func_info.into_iter()); + + debug!("print function_list hashmap info: {:?}", hashmap); + + Ok(()) + } +} diff --git a/src/function_store/mod.rs b/src/function_store/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..f822b69b0a63e8fcab86c3189eb87ae670ca95e5 --- /dev/null +++ b/src/function_store/mod.rs @@ -0,0 +1,3 @@ +pub mod local_store; +pub mod module_store; +pub mod pull; diff --git a/src/function_store/module_store.rs b/src/function_store/module_store.rs new file mode 100644 index 0000000000000000000000000000000000000000..cac3027fa85913acc0c91f62b2b1b0d5d51e678c --- /dev/null +++ b/src/function_store/module_store.rs @@ -0,0 +1,120 @@ +/*! +Registries allow you to define "well-known" modules in the &environment that can be looked up by +name and version. +*/ + +use anyhow::{anyhow, Result}; +use std::{collections::HashMap, sync::Arc, sync::RwLock}; +use tracing::info; +use wasmtime::Module; + +/// A memory store for storing `Wasm Modules`. +/// +/// Modules are registered by `name` +#[derive(Clone, Default)] +pub struct ModuleStore { + module_store: Arc>>, +} + +impl ModuleStore { + /// Create new ModuleStore + pub fn new() -> Self { + ModuleStore { + module_store: Arc::new(RwLock::new(HashMap::new())), + } + } + + /// Insert module into the registry under a specific name, version and wasi capabilites. + /// + /// The version needs to be a correct semver string (e.g "1.2.3-alpha3") or the insertion will + /// fail. If the exact same version and name exists it will be overwritten. + pub fn insert(&self, name: &str, module: Module, wasi_cap: bool) -> Result<()> { + let mut writer = self.module_store.write().unwrap(); + + if writer.contains_key(name) { + info!("wasm module already exist in the map"); + return Ok(()); + } + + writer.insert( + name.to_string(), + ModuleEntry::new(name.to_string(), module, wasi_cap), + ); + + Ok(()) + } + + /// Remove module under name & version from registry + /// + /// Exact version matching is used for lookup. + pub fn remove(&self, name: &str) -> Result<()> { + let mut writer = self.module_store.write().unwrap(); + + if !writer.contains_key(name) { + return Err(anyhow!( + "remove wasm module {} doesn't exist in the module store", + name + )); + } + + writer.remove(name).unwrap(); + + Ok(()) + } + + /// Returns module with specified name + pub fn get(&self, name: &str) -> Result { + let reader = self.module_store.read().unwrap(); + + if !reader.contains_key(name) { + return Err(anyhow::format_err!("failed to find module in module store")); + } + + let v = reader.get(name).unwrap(); + + Ok(v.clone()) + } + + pub fn exist(&self, name: &str) -> bool { + let reader = self.module_store.read().unwrap(); + + if reader.contains_key(name) { + return true; + } + + return false; + } +} + +#[derive(Clone)] +pub struct ModuleEntry { + name: String, + module: Module, + wasi_cap: bool, +} + +impl ModuleEntry { + fn new(name: String, module: Module, wasi_cap: bool) -> Self { + Self { + name, + module, + wasi_cap, + } + } + + pub fn module(&self) -> Module { + self.module.clone() + } + + pub fn name(&self) -> &str { + &self.name + } + + pub fn capability(&self) -> bool { + self.wasi_cap + } + + fn all(&self) -> ModuleEntry { + self.clone() + } +} diff --git a/src/function_store/pull.rs b/src/function_store/pull.rs new file mode 100644 index 0000000000000000000000000000000000000000..40bbc1558193eb9702ad166f083f7154f150a6e5 --- /dev/null +++ b/src/function_store/pull.rs @@ -0,0 +1,49 @@ +use flate2::read; +use oci_distribution::{manifest, secrets::RegistryAuth, Client, Reference}; +use tar::Archive; +use tracing::info; + +pub fn build_client_config(insecure: bool) -> oci_distribution::client::ClientConfig { + let protocol = if insecure { + oci_distribution::client::ClientProtocol::Http + } else { + oci_distribution::client::ClientProtocol::Https + }; + + oci_distribution::client::ClientConfig { + protocol, + ..Default::default() + } +} + +pub async fn pull_wasm( + client: &mut Client, + auth: &RegistryAuth, + reference: &Reference, + output: &str, +) { + info!(?reference, ?output, "pulling wasm module"); + + let image_content = client + .pull( + reference, + auth, + vec![manifest::IMAGE_DOCKER_LAYER_GZIP_MEDIA_TYPE], + ) + .await + .expect("Cannot pull Wasm module") + .layers + .into_iter() + .next() + .map(|layer| layer.data) + .expect("No data found"); + + // webassembly oci spec definition: https://github.com/solo-io/wasm/spec + // for IMAGE_DOCKER_LAYER_GZIP_MEDIA_TYPE, we need to unzip iamge_content + // into raw wasm file + let gz = read::GzDecoder::new(&image_content[..]); + let mut archive = Archive::new(gz); + archive.unpack(output).expect("Cannot write to file"); + + info!("Wasm module successfully written to {}", output); +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..9c5ce99554508c8ce79afdbb68e737c5ba2dbdc3 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,2 @@ +pub mod function_store; +pub mod wrapper; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..e9d6771b6bc3e7a83b9b7dde1188caf5cf5a3837 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,336 @@ +use anyhow::Context; +use clap::Parser; +use serde::Deserialize; +use std::{collections::HashMap, error::Error, fs}; +use tracing::{info, instrument, Level}; +use tracing_subscriber::{self, EnvFilter}; +use wasm_engine::wrapper::{config::EnvConfig, environment::Environment}; +use wasmtime::Module; +mod function_store; +use function_store::local_store::{FunctionEntry, FunctionStore}; +use function_store::module_store::ModuleStore; + +lazy_static::lazy_static! { + pub static ref WASMTIME_RUNTIME :Environment = Environment::new(EnvConfig::default()).unwrap(); + pub static ref MODULE_STORE :ModuleStore = ModuleStore::new(); + pub static ref FUNCTION_STORE: FunctionStore = FunctionStore::new("/var/lib/wasmengine/functions/"); + pub static ref LOG_LEVEL:HashMap = HashMap::from([ + (0, tracing::Level::TRACE), + (1, tracing::Level::DEBUG), + (2, tracing::Level::INFO), + (3, tracing::Level::WARN), + (4, tracing::Level::ERROR), + ]); +} + +#[derive(Parser, Debug)] +#[clap(about, version, author)] +struct Args { + /// Log level used in wasm-engine, TRACE: 0, DEBUG: 1, INFO: 2(Default), WARN: 3, ERROR: 4 + #[clap(short, long, default_value = "2")] + log_level: u8, + + /// dir that contains preload apps + #[clap(short, long)] + preload_apps: Option, +} + +const PROJECT_DIR: &'static str = env!("WASM_ENGINE_PROJECT_DIR"); + +#[instrument] +#[tokio::main] +async fn main() -> Result<(), Box> { + let args = Args::parse(); + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::from_default_env()) + .try_init()?; + + // try restore the function from local fucntion store + FUNCTION_STORE.restore().await?; + + let routes = filters::function_management(); + + info!("WasmEngine listening on http://0.0.0.0:10000, waiting for request..."); + warp::serve(routes).run(([0, 0, 0, 0], 10000)).await; + + Ok(()) +} + +/// Load the wasm module file from local file system into ModuleStore +pub async fn load(name: &str) -> anyhow::Result<()> { + let func = FUNCTION_STORE + .query(name) + .await + .with_context(|| format!("failed to find the function"))?; + + if MODULE_STORE.exist(name) { + info!("function module {} alread loaded in the module store", name); + return Ok(()); + } + + let module = Module::from_file( + WASMTIME_RUNTIME.runtime().get_engine(), + func.func_local_path, + ) + .with_context(|| format!("failed to open module file"))?; + + MODULE_STORE.insert(&func.func_name, module, func.wasi_cap)?; + + Ok(()) +} + +#[derive(Deserialize, Debug)] +pub struct FunctionInfo { + function_name: String, + function_image: Option, + wasi_cap: Option, +} + +#[derive(Deserialize, Debug)] +pub struct FuncInvokeReq { + function_name: String, + args: Option>, +} + +mod filters { + use crate::handlers; + use warp::Filter; + + pub fn function_management( + ) -> impl Filter + Clone { + warp::path("function").and( + function_deploy() + .or(function_delete()) + .or(function_list()) + .or(function_query()) + .or(function_invoke()) + .recover(handle_not_found), + ) + } + + pub fn function_deploy( + ) -> impl Filter + Clone { + warp::path("deploy") + .and(warp::post()) + .and(warp::body::content_length_limit(1024 * 16)) + .and(warp::body::json()) + .and_then(handlers::deploy_function) + } + + pub fn function_delete( + ) -> impl Filter + Clone { + warp::path("delete") + .and(warp::post()) + .and(warp::body::content_length_limit(1024 * 16)) + .and(warp::body::json()) + .and_then(handlers::delete_function) + } + + pub fn function_list( + ) -> impl Filter + Clone { + warp::path("list") + .and(warp::get()) + .and_then(handlers::list_function) + } + + pub fn function_query( + ) -> impl Filter + Clone { + warp::path("query") + .and(warp::post()) + .and(warp::body::content_length_limit(1024 * 16)) + .and(warp::body::json()) + .and_then(handlers::query_function) + } + + pub fn function_invoke( + ) -> impl Filter + Clone { + warp::path("invoke") + .and(warp::post()) + .and(warp::body::content_length_limit(1024 * 16)) + .and(warp::body::json()) + .and_then(handlers::invoke_function) + } + + pub async fn handle_not_found( + reject: warp::Rejection, + ) -> Result { + if reject.is_not_found() { + Ok(format!("404 Not Found\n")) + } else { + Err(reject) + } + } +} + +mod handlers { + use super::{FuncInvokeReq, FunctionInfo, FUNCTION_STORE, MODULE_STORE, WASMTIME_RUNTIME}; + use crate::{function_store::local_store::FunctionEntries, load}; + use anyhow::{anyhow, Context}; + use serde::{Deserialize, Serialize}; + use std::{collections::HashMap, fmt::Debug}; + use tracing::{debug, instrument}; + + #[derive(Serialize, Deserialize, Debug, Default)] + pub struct Response { + pub status: u16, + pub body: String, + } + + impl warp::Reply for Response { + fn into_response(self) -> warp::reply::Response { + http::Response::new( + format!("status code: {}, message: {}", self.status, self.body).into(), + ) + } + } + + #[derive(Debug)] + struct CustomReject(anyhow::Error); + impl warp::reject::Reject for CustomReject {} + + pub(crate) fn custom_reject(error: anyhow::Error) -> warp::Rejection { + warp::reject::custom(CustomReject(error)) + } + + #[instrument] + pub async fn deploy_function(func: FunctionInfo) -> Result { + debug!("deploy function info: {:?}", func); + + let func_exist = FUNCTION_STORE.exist(func.function_name.as_str()).await; + + if func_exist { + return Err(custom_reject(anyhow!( + "function already exist in the local function store" + ))); + } + + // add the function into local function store + FUNCTION_STORE + .add( + func.function_name.as_str(), + func.function_image.unwrap().as_str(), + func.wasi_cap.unwrap(), + ) + .await + .with_context(|| format!("failed to add function into local store")) + .map_err(|r| custom_reject(r))?; + + // save function store into persist.json file + FUNCTION_STORE + .save() + .await + .with_context(|| format!("failed to save function list info")) + .map_err(|r| custom_reject(r))?; + + Ok(Response { + status: http::StatusCode::OK.as_u16(), + body: format!("deploy function {} successfully!\n", func.function_name), + }) + } + + #[instrument] + pub async fn delete_function(func: FunctionInfo) -> Result { + debug!("delete function info: {:?}", func.function_name); + + FUNCTION_STORE + .delete(func.function_name.as_str()) + .await + .with_context(|| format!("failed to delete function into local store")) + .map_err(|r| custom_reject(r))?; + + FUNCTION_STORE + .save() + .await + .with_context(|| format!("failed to save function list info")) + .map_err(|r| custom_reject(r))?; + + // remove the function cached in the MODULE_STORE + if MODULE_STORE.exist(&func.function_name) { + MODULE_STORE + .remove(&&func.function_name) + .with_context(|| format!("failed to delete function in the module store")) + .map_err(|r| custom_reject(r))?; + } + + debug!("delete function {} successfull!", func.function_name); + + Ok(Response { + status: http::StatusCode::OK.as_u16(), + body: format!("delete function {} successfull!\n", func.function_name), + }) + } + + #[instrument] + pub async fn list_function() -> Result { + debug!("list all functions info in the local store"); + + let funcs: FunctionEntries = FunctionEntries(FUNCTION_STORE.list().await.unwrap()); + + debug!("list all function successfully!"); + + Ok(Response { + status: http::StatusCode::OK.as_u16(), + body: format!("all deployed function info: {}\n", funcs), + }) + } + + #[instrument] + pub async fn query_function(func: FunctionInfo) -> Result { + debug!("query function info: {:?}", func.function_name); + + let func_entry = FUNCTION_STORE + .query(func.function_name.as_str()) + .await + .with_context(|| format!("failed to find the function")) + .map_err(|r| custom_reject(r))?; + + debug!("query function {} successfully", func.function_name); + + Ok(Response { + status: http::StatusCode::OK.as_u16(), + body: format!("queried function info: {:?}\n", func_entry), + }) + } + + #[instrument] + pub async fn invoke_function( + invoke_req: FuncInvokeReq, + ) -> Result { + debug!("invoke function info: {:?}", invoke_req.function_name); + + load(&invoke_req.function_name.as_str()) + .await + .with_context(|| format!("failed to load the function from local store")) + .map_err(|r| custom_reject(r))?; + + let module = MODULE_STORE + .get(&invoke_req.function_name) + .map_err(|r| custom_reject(r))?; + + let args: HashMap = match invoke_req.args { + Some(v) => v, + None => HashMap::new(), + }; + + let runtime = WASMTIME_RUNTIME.runtime(); + let result; + if module.capability() { + result = runtime + .spawn_wasi(module.module(), args) + .await + .map_err(|r| custom_reject(r))?; + } else { + result = runtime + .spawn(module.module(), &invoke_req.function_name, args) + .await + .map_err(|r| custom_reject(r))?; + } + + debug!("run module {} successfully!", invoke_req.function_name); + + Ok(Response { + status: http::StatusCode::OK.as_u16(), + body: result, + }) + } +} diff --git a/src/wrapper/config.rs b/src/wrapper/config.rs new file mode 100644 index 0000000000000000000000000000000000000000..c6ed6118794a04d956ad7dfed510b215e236f9c1 --- /dev/null +++ b/src/wrapper/config.rs @@ -0,0 +1,70 @@ +/// Configuration structure for environments. +#[derive(Clone)] +pub struct EnvConfig { + // Maximum amount of memory that can be used by instances in bytes + max_memory: usize, + // Maximum amount of compute expressed in units of 100k instructions. + max_fuel: Option, + allowed_namespaces: Vec, + preopened_dirs: Vec, + wasi_envs: Option>, +} + +impl EnvConfig { + /// Create a new environment configuration. + pub fn new(max_memory: usize, max_fuel: Option) -> Self { + Self { + max_memory, + max_fuel, + allowed_namespaces: Vec::new(), + preopened_dirs: Vec::new(), + wasi_envs: None, + } + } + + pub fn max_memory(&self) -> usize { + self.max_memory + } + + pub fn max_fuel(&self) -> Option { + self.max_fuel + } + + pub fn allowed_namespace(&self) -> &[String] { + &self.allowed_namespaces + } + + /// Allow a WebAssembly host function namespace to be used with this config. + pub fn allow_namespace>(&mut self, namespace: S) { + self.allowed_namespaces.push(namespace.into()) + } + + pub fn preopened_dirs(&self) -> &[String] { + &self.preopened_dirs + } + + /// Grant access to the given directory with this config. + pub fn preopen_dir>(&mut self, dir: S) { + self.preopened_dirs.push(dir.into()) + } + + pub fn set_wasi_envs(&mut self, envs: Vec<(String, String)>) { + self.wasi_envs = Some(envs); + } + + pub fn wasi_envs(&self) -> &Option> { + &self.wasi_envs + } +} + +impl Default for EnvConfig { + fn default() -> Self { + Self { + max_memory: 0xA00000000, // = 4 GB in bytes + max_fuel: None, + allowed_namespaces: vec![String::from("wasi_snapshot_preview1::")], + preopened_dirs: vec![], + wasi_envs: None, + } + } +} diff --git a/src/wrapper/environment.rs b/src/wrapper/environment.rs new file mode 100644 index 0000000000000000000000000000000000000000..b7ea873250403fb51120ec51afc6beffec876c88 --- /dev/null +++ b/src/wrapper/environment.rs @@ -0,0 +1,42 @@ +use anyhow::Result; + +use crate::function_store::module_store::ModuleStore; + +use super::{config::EnvConfig, wasmtime_runtime::WasmtimeRuntime}; + +// One unit of fuel represents around 100k instructions. +pub const UNIT_OF_COMPUTE_IN_INSTRUCTIONS: u64 = 100_000; + +/// The environment represents a set of characteristics that instances spawned from it will have. +/// +/// Environments let us set limits on instances: +/// * Memory limits +/// * Compute limits +/// * Access to host functions +/// +/// They also define the set of plugins. Plugins can be used to modify loaded Wasm modules. +/// Plugins are WIP and not well documented. +#[derive(Clone)] +pub struct Environment { + runtime: WasmtimeRuntime, + store: ModuleStore, +} + +impl Environment { + /// Create a new environment from a configuration. + pub fn new(config: EnvConfig) -> Result { + let wasmtime_runtime = WasmtimeRuntime::new(&config)?; + Ok(Self { + runtime: wasmtime_runtime, + store: ModuleStore::new(), + }) + } + + pub fn runtime(&self) -> &WasmtimeRuntime { + &self.runtime + } + + pub fn registry(&self) -> &ModuleStore { + &self.store + } +} diff --git a/src/wrapper/mod.rs b/src/wrapper/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..0ec9b529fa02d175911944deea8ffdec7f3a4028 --- /dev/null +++ b/src/wrapper/mod.rs @@ -0,0 +1,3 @@ +pub mod config; +pub mod environment; +mod wasmtime_runtime; diff --git a/src/wrapper/wasmtime_runtime.rs b/src/wrapper/wasmtime_runtime.rs new file mode 100644 index 0000000000000000000000000000000000000000..415dd57b81e77223ee72906b17d1e8709ccaf5e5 --- /dev/null +++ b/src/wrapper/wasmtime_runtime.rs @@ -0,0 +1,173 @@ +use anyhow::{anyhow, Result}; +use std::collections::HashMap; +use tracing::info; +use wasi_common::pipe::WritePipe; +use wasmtime::*; +use wasmtime_wasi::{ambient_authority, tokio::WasiCtxBuilder, Dir, WasiCtx}; + +use super::{config::EnvConfig, environment::UNIT_OF_COMPUTE_IN_INSTRUCTIONS}; + +const WASM_PAGE_SIZE: u32 = 0x10000; + +#[derive(Clone)] +pub struct WasmtimeRuntime { + pub(crate) engine: Engine, + pub(crate) linker: Linker, + pub(crate) config: EnvConfig, +} + +impl WasmtimeRuntime { + pub fn new(config: &EnvConfig) -> anyhow::Result { + let mut wasmtime_config = Config::new(); + wasmtime_config + .async_support(true) + .debug_info(false) + // The behaviour of fuel running out is defined on the Store + .consume_fuel(true) + .wasm_reference_types(true) + .wasm_bulk_memory(true) + .wasm_multi_value(true) + .wasm_multi_memory(true) + .wasm_module_linking(false) + // Disable profiler + .profiler(ProfilingStrategy::None)? + .cranelift_opt_level(OptLevel::SpeedAndSize) + // Allocate resources on demand because we can't predict how many instances will exist + .allocation_strategy(InstanceAllocationStrategy::OnDemand) + // Memories are always static (can't be bigger than max_memory) + .static_memory_maximum_size(config.max_memory() as u64) + // Set memory guards to 4 Mb + .static_memory_guard_size(0x400000) + .dynamic_memory_guard_size(0x400000); + let engine = Engine::new(&wasmtime_config)?; + let mut linker = Linker::new(&engine); + // Allow plugins to shadow host functions + linker.allow_shadowing(true); + + wasmtime_wasi::tokio::add_to_linker(&mut linker, |ctx| ctx)?; + + Ok(Self { + engine, + linker, + config: config.to_owned(), + }) + } + + pub async fn spawn_wasi( + &self, + module: Module, + data: HashMap, + ) -> Result { + let mut wasi = WasiCtxBuilder::new().inherit_stdio(); + if let Some(envs) = self.config.wasi_envs() { + wasi = wasi.envs(envs)?; + } + let stdout = WritePipe::new_in_memory(); + wasi = wasi.stdout(Box::new(stdout.clone())); + let mut args: Vec = Vec::new(); + for (_, v) in data { + args.push(v); + } + wasi = wasi.args(&args)?; + for preopen_dir_path in self.config.preopened_dirs() { + let preopen_dir = Dir::open_ambient_dir(preopen_dir_path, ambient_authority())?; + wasi = wasi.preopened_dir(preopen_dir, preopen_dir_path)?; + } + let wasi = wasi.build(); + + let mut store = Store::new(&self.engine, wasi); + // Trap if out of fuel + store.out_of_fuel_trap(); + // Define maximum fuel + match self.config.max_fuel() { + Some(max_fuel) => { + store.out_of_fuel_async_yield(max_fuel, UNIT_OF_COMPUTE_IN_INSTRUCTIONS) + } + // If no limit is specified use maximum + None => store.out_of_fuel_async_yield(u64::MAX, UNIT_OF_COMPUTE_IN_INSTRUCTIONS), + }; + + let instance = self.linker.instantiate_async(&mut store, &module).await?; + instance + .get_typed_func::<(), (), _>(&mut store, "_start")? + .call_async(&mut store, ()) + .await?; + + drop(store); + + let contents = stdout + .try_into_inner() + .map_err(|_| anyhow::format_err!("failed to get stdout content"))?; + let contents: Vec = contents.into_inner(); + let result = std::str::from_utf8(&contents)?; + let result = result.strip_suffix("\n").unwrap_or(result); + + Ok(result.to_string()) + } + + pub async fn spawn( + &self, + module: Module, + function: &str, + args: HashMap, + ) -> Result { + let serialized = serde_json::to_string(&args)?; + let mut store = Store::new(&self.engine, ()); + // Trap if out of fuel + store.out_of_fuel_trap(); + // Define maximum fuel + match self.config.max_fuel() { + Some(max_fuel) => { + store.out_of_fuel_async_yield(max_fuel, UNIT_OF_COMPUTE_IN_INSTRUCTIONS) + } + // If no limit is specified use maximum + None => store.out_of_fuel_async_yield(u64::MAX, UNIT_OF_COMPUTE_IN_INSTRUCTIONS), + }; + + let instance = Instance::new_async(&mut store, &module, &[]).await?; + //let wasm_function = instance.get_func(&mut store, function).unwrap(); + let wasm_function = + instance.get_typed_func::<(i32, i32), (i32, i32), _>(&mut store, function)?; + if serialized.len() > WASM_PAGE_SIZE as usize { + return Err(anyhow!("input args size larger than {}", WASM_PAGE_SIZE)); + } + + let memory = instance + .get_memory(&mut store, "memory") + .ok_or(anyhow::format_err!("failed to find `memory` export"))?; + let heap_base_global = instance + .get_global(&mut store, "__heap_base") + .ok_or(anyhow::format_err!("failed to find `__heap_base` export"))?; + let heap_base = heap_base_global + .get(&mut store) + .i32() + .ok_or(anyhow::format_err!("failed to find `__heap_base` export"))?; + info!("heap_base is {}", heap_base as usize); + + memory.grow(&mut store, 1)?; + memory.write(&mut store, heap_base as usize, serialized.as_bytes())?; + + let (pointer, length) = wasm_function + .call_async(&mut store, (heap_base, serialized.len() as i32)) + .await?; + + let mut total_buffer: [u8; WASM_PAGE_SIZE as usize] = [0; WASM_PAGE_SIZE as usize]; + let buffer = &mut total_buffer[0..length as usize]; + memory.read(&store, pointer as usize, buffer)?; + let s = std::str::from_utf8(&buffer)?; + + Ok(String::from(s)) + } + + pub fn get_engine(&self) -> &Engine { + &self.engine + } + + pub fn get_liker(&self) -> &Linker { + &self.linker + } + + pub fn get_config(&self) -> &EnvConfig { + &self.config + } +} diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000000000000000000000000000000000000..80d0d3226e5400af724a5ec759e91098251b3e3e --- /dev/null +++ b/tests/README.md @@ -0,0 +1 @@ +## wasm-engine tests \ No newline at end of file