diff --git a/Cargo.lock b/Cargo.lock index 398bdb3..918a4cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,13 +47,13 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8c9b4467d77cacfbc93cee9aa8e7822f6d527c774efdca5f8b3a5280c34847" +checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" dependencies = [ "accesskit", "accesskit_consumer", - "async-channel 1.9.0", + "async-channel", "async-once-cell", "atspi", "futures-lite 1.13.0", @@ -95,6 +95,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "ahash" version = "0.8.6" @@ -181,6 +192,12 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + [[package]] name = "arrayref" version = "0.3.7" @@ -197,6 +214,8 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" name = "asr-debugger" version = "0.1.0" dependencies = [ + "anyhow", + "arc-swap", "atomic", "byte-unit", "clap", @@ -219,17 +238,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - [[package]] name = "async-channel" version = "2.1.1" @@ -249,11 +257,11 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock 3.1.2", + "async-lock 3.2.0", "async-task", "concurrent-queue", "fastrand 2.0.1", - "futures-lite 2.0.1", + "futures-lite 2.1.0", "slab", ] @@ -291,18 +299,18 @@ dependencies = [ [[package]] name = "async-io" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6d3b15875ba253d1110c740755e246537483f152fa334f91abd7fe84c88b3ff" +checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" dependencies = [ - "async-lock 3.1.2", + "async-lock 3.2.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.0.1", + "futures-lite 2.1.0", "parking", "polling 3.3.1", - "rustix 0.38.26", + "rustix 0.38.28", "slab", "tracing", "windows-sys 0.52.0", @@ -319,9 +327,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.1.2" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea8b3453dd7cc96711834b75400d671b73e3656975fa68d9f277163b7f7e316" +checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" dependencies = [ "event-listener 4.0.0", "event-listener-strategy", @@ -347,7 +355,7 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.48.0", ] @@ -359,7 +367,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -368,13 +376,13 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io 2.2.1", + "async-io 2.2.2", "async-lock 2.8.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.26", + "rustix 0.38.28", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -382,9 +390,9 @@ dependencies = [ [[package]] name = "async-task" -version = "4.5.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" +checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46" [[package]] name = "async-trait" @@ -394,7 +402,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -492,7 +500,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -507,6 +515,18 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block" version = "0.1.6" @@ -547,16 +567,40 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ - "async-channel 2.1.1", - "async-lock 3.1.2", + "async-channel", + "async-lock 3.2.0", "async-task", "fastrand 2.0.1", "futures-io", - "futures-lite 2.0.1", + "futures-lite 2.1.0", "piper", "tracing", ] +[[package]] +name = "borsh" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9897ef0f1bd2362169de6d7e436ea2237dc1085d7d1e4db75f4be34d86f309d1" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478b41ff04256c5c8330f3dfdaaae2a5cc976a8e75088bafa4625b0d0208de8c" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.0", + "proc-macro2", + "quote", + "syn 2.0.41", + "syn_derive", +] + [[package]] name = "bumpalo" version = "3.14.0" @@ -565,15 +609,37 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-unit" -version = "5.0.3" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc40af92e0f7f964b7ab1ebc81315cce78fc484802d534143321c956f58d7be3" +checksum = "d405b41420a161b4e1dd5a52e3349f41b4dae9a39be02aff1d67fe53256430ac" dependencies = [ "rust_decimal", "serde", "utf8-width", ] +[[package]] +name = "bytecheck" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bytemuck" version = "1.14.0" @@ -591,7 +657,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -644,7 +710,7 @@ dependencies = [ "io-lifetimes 2.0.3", "ipnet", "maybe-owned", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.48.0", "winx", ] @@ -668,7 +734,7 @@ dependencies = [ "cap-primitives", "io-extras", "io-lifetimes 2.0.3", - "rustix 0.38.26", + "rustix 0.38.28", ] [[package]] @@ -679,7 +745,7 @@ checksum = "f8f52b3c8f4abfe3252fd0a071f3004aaa3b18936ec97bdbd8763ce03aff6247" dependencies = [ "cap-primitives", "once_cell", - "rustix 0.38.26", + "rustix 0.38.28", "winx", ] @@ -742,9 +808,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.10" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", @@ -752,9 +818,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.9" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstyle", "clap_lex", @@ -769,7 +835,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -837,9 +903,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] @@ -895,18 +961,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eb38f2af690b5a4411d9a8782b6d77dabff3ca939e0518453ab9f9a4392d41" +checksum = "8e7e56668d2263f92b691cb9e4a2fcb186ca0384941fe420484322fa559c3329" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39526c036b92912417e8931f52c1e235796688068d3efdbbd8b164f299d19156" +checksum = "2a9ff61938bf11615f55b80361288c68865318025632ea73c65c0b44fa16283c" dependencies = [ "bumpalo", "cranelift-bforest", @@ -925,33 +991,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb0deedc9fccf2db53a5a3c9c9d0163e44143b0d004dca9bf6ab6a0024cd79a" +checksum = "50656bf19e3d4a153b404ff835b8b59e924cfa3682ebe0d3df408994f37983f6" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea2d1b274e45aa8e61e9103efa1ba82d4b5a19d12bd1fd10744c3b7380ba3ff" +checksum = "388041deeb26109f1ea73c1812ea26bfd406c94cbce0bb5230aa44277e43b209" [[package]] name = "cranelift-control" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea5977559a71e63db79a263f0e81a89b996e8a38212c4281e37dd1dbaa8b65c" +checksum = "b39b7c512ffac527e5b5df9beae3d67ab85d07dca6d88942c16195439fedd1d3" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f871ada808b58158d84dfc43a6a2e2d2756baaf4ed1c51fd969ca8330e6ca5c" +checksum = "fdb25f573701284fe2bcf88209d405342125df00764b396c923e11eafc94d892" dependencies = [ "serde", "serde_derive", @@ -959,9 +1025,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e6890f587ef59824b3debe577e68fdf9b307b3808c54b8d93a18fd0b70941b" +checksum = "e57374fd11d72cf9ffb85ff64506ed831440818318f58d09f45b4185e5e9c376" dependencies = [ "cranelift-codegen", "log", @@ -971,15 +1037,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d5fc6d5d3b52d1917002b17a8ecce448c2621b5bf394bb4e77e2f676893537" +checksum = "ae769b235f6ea2f86623a3ff157cc04a4ff131dc9fe782c2ebd35f272043581e" [[package]] name = "cranelift-native" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e10c2e7faa65d4ae7de9a83b44f2c31aca7dc638e17d0a79572fdf8103d720b" +checksum = "3dc7bfb8f13a0526fe20db338711d9354729b861c336978380bb10f7f17dd207" dependencies = [ "cranelift-codegen", "libc", @@ -988,9 +1054,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.102.0" +version = "0.102.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2755807efc7ec80d1cc0b6815e70f10cedf968889f0469091dbff9c5c0741c48" +checksum = "2c5f41a4af931b756be05af0dd374ce200aae2d52cea16b0beb07e8b52732c35" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1013,9 +1079,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1024,22 +1090,21 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" dependencies = [ "cfg-if", ] @@ -1056,9 +1121,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" dependencies = [ "powerfmt", ] @@ -1187,7 +1252,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c55bcb864b764eb889515a38b8924757657a250738ad15126637ee2df291ee6b" dependencies = [ "accesskit", - "ahash", + "ahash 0.8.6", "epaint", "log", "nohash-hasher", @@ -1212,9 +1277,9 @@ dependencies = [ [[package]] name = "egui_dock" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabf77568b8da81f419596357583fbc14fd761c72c3433856d30c7669e5b5679" +checksum = "246a6cbf38560cdcf75f955b1f2f39be6339a3f2958d06997ce70b7b4aa3f57d" dependencies = [ "duplicate", "egui", @@ -1223,9 +1288,9 @@ dependencies = [ [[package]] name = "egui_file" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcb8d44b3d888c356576577d7c4fe2d0d7183e0d1f0df46f32a99b70231de80" +checksum = "04989cc1638c8c1c9e7347180a90bc58a5ae9c2236668a6bd927df0e185ff47b" dependencies = [ "egui", ] @@ -1287,7 +1352,7 @@ checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -1297,7 +1362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d1b9e000d21bab9b535ce78f9f7745be28b3f777f6c7223936561c5c7fefab8" dependencies = [ "ab_glyph", - "ahash", + "ahash 0.8.6", "bytemuck", "ecolor", "emath", @@ -1398,7 +1463,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93f7a0db71c99f68398f80653ed05afb0b00e062e1a20c7ff849c4edfabbbcc" dependencies = [ "cfg-if", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.52.0", ] @@ -1452,10 +1517,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "033b337d725b97690d86893f9de22b67b80dcc4e9ad815f348254c38119db8fb" dependencies = [ "io-lifetimes 2.0.3", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.52.0", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures-core" version = "0.3.29" @@ -1485,14 +1556,13 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" dependencies = [ "fastrand 2.0.1", "futures-core", "futures-io", - "memchr", "parking", "pin-project-lite", ] @@ -1660,13 +1730,22 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.7", +] + [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.8.6", ] [[package]] @@ -1675,7 +1754,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash", + "ahash 0.8.6", ] [[package]] @@ -1708,11 +1787,11 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1806,9 +1885,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jni" @@ -1876,9 +1955,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.150" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libloading" @@ -1948,9 +2027,10 @@ checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "livesplit-auto-splitting" version = "0.1.0" -source = "git+https://github.com/LiveSplit/livesplit-core#14cc8053be725b0becf83625902d38a3a7dd4071" +source = "git+https://github.com/LiveSplit/livesplit-core#754799c06b2a34f26f48a33be55b1e2a17e8f2e6" dependencies = [ "anyhow", + "arc-swap", "async-trait", "bytemuck", "indexmap", @@ -2027,7 +2107,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "rustix 0.38.26", + "rustix 0.38.28", ] [[package]] @@ -2084,9 +2164,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", @@ -2239,7 +2319,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2251,10 +2331,10 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2326,9 +2406,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "orbclient" @@ -2472,7 +2552,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix 0.38.26", + "rustix 0.38.28", "tracing", "windows-sys 0.52.0", ] @@ -2496,7 +2576,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", ] [[package]] @@ -2554,6 +2643,26 @@ dependencies = [ "cc", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quote" version = "1.0.33" @@ -2563,6 +2672,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.8.5" @@ -2622,12 +2737,13 @@ dependencies = [ [[package]] name = "read-process-memory" version = "0.1.6" -source = "git+https://github.com/CryZe/read-process-memory?branch=asr-debugger#cfb4d043dadbccee53f231bb1ac7d8ef6e4ed38d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8497683b2f0b6887786f1928c118f26ecc6bb3d78bbb6ed23e8e7ba110af3bb0" dependencies = [ "libc", "log", "mach", - "windows-sys 0.48.0", + "winapi", ] [[package]] @@ -2701,6 +2817,44 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "rend" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.7.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "rust_decimal" version = "1.33.1" @@ -2708,7 +2862,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" dependencies = [ "arrayvec", + "borsh", + "bytes", "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", ] [[package]] @@ -2733,9 +2893,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.26" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ "bitflags 2.4.1", "errno", @@ -2748,9 +2908,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -2786,6 +2946,12 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "semver" version = "1.0.20" @@ -2809,7 +2975,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2831,7 +2997,7 @@ checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2875,6 +3041,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "slab" version = "0.4.9" @@ -3009,15 +3181,27 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.41", +] + [[package]] name = "sysinfo" version = "0.29.11" @@ -3044,11 +3228,17 @@ dependencies = [ "cap-std", "fd-lock", "io-lifetimes 2.0.3", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.48.0", "winx", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "target-lexicon" version = "0.12.12" @@ -3064,28 +3254,28 @@ dependencies = [ "cfg-if", "fastrand 2.0.1", "redox_syscall 0.4.1", - "rustix 0.38.26", + "rustix 0.38.28", "windows-sys 0.48.0", ] [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -3162,6 +3352,17 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" version = "0.1.40" @@ -3182,7 +3383,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -3208,19 +3409,20 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "uds_windows" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ + "memoffset 0.9.0", "tempfile", "winapi", ] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -3254,6 +3456,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "uuid" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" + [[package]] name = "vec_map" version = "0.8.2" @@ -3290,9 +3498,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi-cap-std-sync" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3542b8d238a3de6c9986218af842f1e8f950ca7c4707aee9d0dd83002577a759" +checksum = "a4328de5cf2a0debfc48216fe9c2747badc64957837641f5836cd8b3d48d73f0" dependencies = [ "anyhow", "async-trait", @@ -3304,7 +3512,7 @@ dependencies = [ "io-extras", "io-lifetimes 2.0.3", "once_cell", - "rustix 0.38.26", + "rustix 0.38.28", "system-interface", "tracing", "wasi-common", @@ -3313,9 +3521,9 @@ dependencies = [ [[package]] name = "wasi-common" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a362c9dbdc5eb0809ce9db09e7b76805fea3ddaf2b8ff41a0e5c805935736205" +checksum = "84f6774ec9e464b7373f683bc57ff87fcca5fd26a7d6bdb7438fb2f56a545aa6" dependencies = [ "anyhow", "bitflags 2.4.1", @@ -3323,7 +3531,7 @@ dependencies = [ "cap-std", "io-extras", "log", - "rustix 0.38.26", + "rustix 0.38.28", "thiserror", "tracing", "wasmtime", @@ -3352,7 +3560,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", "wasm-bindgen-shared", ] @@ -3386,7 +3594,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3418,9 +3626,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae4b1702ef55144d6f594085f4989dc71fb71a791be1c8354ecc8e489b81199b" +checksum = "642e12d108e800215263e3b95972977f473957923103029d7d617db701d67ba4" dependencies = [ "anyhow", "bincode", @@ -3448,18 +3656,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c981d0e87bb3e98e08e76644e7ae5dfdef7f1d4105145853f3d677bb4535d65f" +checksum = "beada8bb15df52503de0a4c58de4357bfd2f96d9a44a6e547bad11efdd988b47" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cranelift" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1453665878e16245b9a25405e550c4a36c6731c6e34ea804edc002a38c3e6741" +checksum = "fe2e7532f1d6adbcc57e69bb6a7c503f0859076d07a9b4b6aabe8021ff8a05fd" dependencies = [ "anyhow", "cfg-if", @@ -3482,9 +3690,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift-shared" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dface3d9b72b4670781ff72675eabb291e2836b5dded6bb312b577d2bb561f" +checksum = "8c98d5378a856cbf058d36278627dfabf0ed68a888142958c7ae8e6af507dafa" dependencies = [ "anyhow", "cranelift-codegen", @@ -3498,9 +3706,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0116108e7d231cce15fe7dd642c66c3abb14dbcf169b0130e11f223ce8d1ad7" +checksum = "a6d33a9f421da810a070cd56add9bc51f852bd66afbb8b920489d6242f15b70e" dependencies = [ "anyhow", "cranelift-entity", @@ -3518,9 +3726,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32b210767452f6b20157bb7c7d98295b92cc47aaad2a8aa31652f4469813a5d" +checksum = "8d0994a86d6dca5f7d9740d7f2bd0568be06d2014a550361dc1c397d289d81ef" dependencies = [ "anyhow", "bincode", @@ -3528,7 +3736,7 @@ dependencies = [ "gimli", "log", "object", - "rustix 0.38.26", + "rustix 0.38.28", "serde", "serde_derive", "target-lexicon", @@ -3540,9 +3748,9 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffd2785a16c55ac77565613ebda625f5850d4014af0499df750e8de97c04547" +checksum = "4e0c4b74e606d1462d648631d5bc328e3d5b14e7f9d3ff93bc6db062fb8c5cd8" dependencies = [ "once_cell", "wasmtime-versioned-export-macros", @@ -3550,9 +3758,9 @@ dependencies = [ [[package]] name = "wasmtime-jit-icache-coherence" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73ad1395eda136baec5ece7e079e0536a82ef73488e345456cc9b89858ad0ec" +checksum = "3090a69ba1476979e090aa7ed4bc759178bafdb65b22f98b9ba24fc6e7e578d5" dependencies = [ "cfg-if", "libc", @@ -3561,9 +3769,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b50f7f3c1a8dabb2607f32a81242917bd77cee75f3dec66e04b02ccbb8ba07" +checksum = "b993ac8380385ed67bf71b51b9553edcf1ab0801b78a805a067de581b9a3e88a" dependencies = [ "anyhow", "cc", @@ -3576,7 +3784,7 @@ dependencies = [ "memoffset 0.9.0", "paste", "rand", - "rustix 0.38.26", + "rustix 0.38.28", "sptr", "wasm-encoder", "wasmtime-asm-macros", @@ -3589,9 +3797,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447973db3dc5c24db14130ab0922795c58790aec296d198ad9d253b82ec67471" +checksum = "8b5778112fcab2dc3d4371f4203ab8facf0c453dd94312b0a88dd662955e64e0" dependencies = [ "cranelift-entity", "serde", @@ -3602,20 +3810,20 @@ dependencies = [ [[package]] name = "wasmtime-versioned-export-macros" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a347bb8ecf12275fb180afb1b1c85c9e186553c43109737bffed4f54c2aa365" +checksum = "f50f51f8d79bfd2aa8e9d9a0ae7c2d02b45fe412e62ff1b87c0c81b07c738231" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] name = "wasmtime-wasi" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f94342fc932695027cdfa0500a62a680879bdad495b36490887b1564124e53" +checksum = "eff3f4ad191a5e6d002bb5bffa3e2931a58984da9b30e57b48f353848748cf80" dependencies = [ "anyhow", "bytes", @@ -3633,9 +3841,9 @@ dependencies = [ [[package]] name = "wasmtime-wmemcheck" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47907bdd67500c66fa308acbce7387c7bfb63b5505ef81be7fc897709afcca60" +checksum = "9b6060bc082cc32d9a45587c7640e29e3c7b89ada82677ac25d87850aaccb368" [[package]] name = "wast" @@ -3770,9 +3978,9 @@ dependencies = [ [[package]] name = "wiggle" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b5a36af7e0a7d68fd6c080e78803b34c3105caa3f743dff2fc8db2fac4ab71" +checksum = "f91028b241e692fdf30627ac10ba9d5ac378353ea4119b4f904ac95177057a44" dependencies = [ "anyhow", "async-trait", @@ -3785,28 +3993,28 @@ dependencies = [ [[package]] name = "wiggle-generate" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f5a763e4801e83c438e7fa6abdd5c38d735194c2a94e2f2ccdcc66456cefee" +checksum = "5e8b3d76531994513671b2ec3b29fd342bf041e2282945bb6c52eebe6aa9e7da" dependencies = [ "anyhow", "heck", "proc-macro2", "quote", "shellexpand", - "syn 2.0.39", + "syn 2.0.41", "witx", ] [[package]] name = "wiggle-macro" -version = "15.0.0" +version = "15.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58262f5ac3a8ea686d4b940aa9f976f26c7e4e980aa8ac378f29274cb8638e33" +checksum = "c189fe00c67f61bb330827f2abab1af9b5925c7929535cd13a68d265ec20b02d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", "wiggle-generate", ] @@ -4118,9 +4326,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.19" +version = "0.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" dependencies = [ "memchr", ] @@ -4147,6 +4355,15 @@ dependencies = [ "wast", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -4182,12 +4399,9 @@ dependencies = [ [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" [[package]] name = "xdg-home" @@ -4252,7 +4466,7 @@ version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "regex", @@ -4273,22 +4487,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.28" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.28" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -4311,7 +4525,7 @@ version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", diff --git a/Cargo.toml b/Cargo.toml index caa1d2e..4f0ddbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,19 +7,18 @@ edition = "2021" [dependencies] atomic = "0.6.0" +anyhow = "1.0.75" +arc-swap = "1.6.0" byte-unit = "5.0.3" clap = { version = "4.4.6", default-features = false, features = ["derive", "std"] } eframe = "0.24.1" egui_dock = "0.9.0" -egui_file = "0.12.0" +egui_file = "0.13.0" egui_plot = "0.24.1" hdrhistogram = { version = "7.5.2", default-features = false } indexmap = "2.0.0" livesplit-auto-splitting = { git = "https://github.com/LiveSplit/livesplit-core" } -[patch.crates-io] -read-process-memory = { git = "https://github.com/CryZe/read-process-memory", branch = "asr-debugger" } - [profile.max-opt] inherits = "release" lto = true diff --git a/src/main.rs b/src/main.rs index cbfa86f..928cced 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,17 +2,20 @@ use std::{ collections::BTreeMap, + fmt, fs::{self, File}, io::Write, path::PathBuf, sync::{ atomic::{AtomicU64, AtomicUsize}, - Arc, Mutex, RwLock, RwLockWriteGuard, + Arc, Mutex, RwLock, }, thread, time::{Duration, Instant, SystemTime}, }; +use anyhow::Context; +use arc_swap::ArcSwapOption; use atomic::Atomic; use clap::Parser; use clear_vec::{Clear, ClearVec}; @@ -27,7 +30,10 @@ use egui_file::FileDialog; use egui_plot::{Bar, BarChart, Legend, Plot, VLine}; use hdrhistogram::Histogram; use indexmap::IndexMap; -use livesplit_auto_splitting::{settings, time, Config, Runtime, Timer, TimerState}; +use livesplit_auto_splitting::{ + settings, time, AutoSplitter, CompiledAutoSplitter, Config, ExecutionGuard, Runtime, Timer, + TimerState, +}; mod clear_vec; @@ -53,7 +59,7 @@ fn main() { let args = Args::parse(); let shared_state = Arc::new(SharedState { - runtime: RwLock::new(None), + auto_splitter: ArcSwapOption::new(None), memory_usage: AtomicUsize::new(0), handles: AtomicU64::new(0), tick_rate: Mutex::new(std::time::Duration::ZERO), @@ -111,6 +117,8 @@ fn main() { tree.split_below(right, 0.5, vec![Tab::Variables, Tab::SettingsMap]); tree.split_below(left, 0.5, vec![Tab::Logs, Tab::Statistics, Tab::Processes]); + let optimize = !args.debug; + let mut app = Box::new(Debugger { dock_state, state: AppState { @@ -118,16 +126,17 @@ fn main() { script_path: None, module_modified_time: None, script_modified_time: None, - optimize: !args.debug, + optimize, open_file_dialog: None, - module: Vec::new(), + module: None, shared_state, timer, + runtime: build_runtime(optimize), }, }); if let Some(path) = args.wasm_path { - app.state.set_path(path, false); + app.state.load(Load::File(path)); } app @@ -150,7 +159,7 @@ impl Clear for ProcessInfo { } struct SharedState { - runtime: RwLock>>, + auto_splitter: ArcSwapOption>, tick_rate: Mutex, slowest_tick: Mutex, memory_usage: AtomicUsize, @@ -161,28 +170,26 @@ struct SharedState { } impl SharedState { - fn prepare_to_replace_runtime(&self) -> RwLockWriteGuard<'_, Option>> { - if let Some(guard) = self.try_write_runtime() { - return guard; + fn kill_auto_splitter_if_it_doesnt_react(&self) { + let Some(auto_splitter) = &*self.auto_splitter.load() else { + return; + }; + if Self::try_lock(auto_splitter).is_none() { + auto_splitter.interrupt_handle().interrupt(); } - self.kill_runtime(); - self.runtime.write().unwrap() } - fn try_write_runtime(&self) -> Option>>> { + fn try_lock( + auto_splitter: &AutoSplitter, + ) -> Option> { for _ in 0..100 { - if let Ok(guard) = self.runtime.try_write() { + if let Some(guard) = auto_splitter.try_lock() { return Some(guard); } thread::sleep(Duration::from_millis(1)); } - None - } - fn kill_runtime(&self) { - if let Some(runtime) = &*self.runtime.read().unwrap() { - runtime.interrupt_handle().interrupt(); - } + None } } @@ -190,16 +197,16 @@ fn runtime_thread(shared_state: Arc, timer: DebuggerTimer) { let mut next_tick = Instant::now(); loop { let tick_rate = { - if let Some(runtime) = &*shared_state.runtime.read().unwrap() { - let mut runtime_lock = runtime.lock(); + if let Some(auto_splitter) = &*shared_state.auto_splitter.load() { + let mut auto_splitter_lock = auto_splitter.lock(); let now = Instant::now(); - let res = runtime_lock.update(); + let res = auto_splitter_lock.update(); let time_of_tick = now.elapsed(); - let memory_usage = runtime_lock.memory().len(); + let memory_usage = auto_splitter_lock.memory().len(); { let mut processes = shared_state.processes.lock().unwrap(); processes.clear(); - runtime_lock.attached_processes().for_each(|process| { + auto_splitter_lock.attached_processes().for_each(|process| { use std::fmt::Write; let element = processes.push(); let _ = write!(element.pid, "{}", process.pid()); @@ -208,8 +215,8 @@ fn runtime_thread(shared_state: Arc, timer: DebuggerTimer) { .push_str(process.path().unwrap_or("Unnamed Process")); }); } - let handles = runtime_lock.handles(); - drop(runtime_lock); + let handles = auto_splitter_lock.handles(); + drop(auto_splitter_lock); shared_state .memory_usage @@ -225,7 +232,7 @@ fn runtime_thread(shared_state: Arc, timer: DebuggerTimer) { } } - *shared_state.tick_rate.lock().unwrap() = runtime.tick_rate(); + *shared_state.tick_rate.lock().unwrap() = auto_splitter.tick_rate(); *shared_state.tick_times.lock().unwrap() += time_of_tick.as_nanos() as u64; shared_state.avg_tick_secs.store( 0.999 * shared_state.avg_tick_secs.load(atomic::Ordering::Relaxed) @@ -233,14 +240,11 @@ fn runtime_thread(shared_state: Arc, timer: DebuggerTimer) { atomic::Ordering::Relaxed, ); if let Err(e) = res { - timer - .0 - .write() - .unwrap() - .logs - .push(format!("Error: {e}").into()) + timer.0.write().unwrap().logs.push( + format!("{:?}", e.context("Failed executing the auto splitter.")).into(), + ) }; - runtime.tick_rate() + auto_splitter.tick_rate() } else { shared_state.processes.lock().unwrap().clear(); @@ -275,9 +279,10 @@ struct AppState { script_modified_time: Option, optimize: bool, open_file_dialog: Option<(FileDialog, bool)>, - module: Vec, + module: Option, shared_state: Arc, timer: DebuggerTimer, + runtime: livesplit_auto_splitting::Runtime, } struct TabViewer<'a> { @@ -306,15 +311,13 @@ impl egui_dock::TabViewer for TabViewer<'_> { dialog.open(); self.state.open_file_dialog = Some((dialog, true)); } - if self.state.shared_state.runtime.read().unwrap().is_some() { - if let Some(path) = &self.state.path { - if ui.button("Reload").clicked() { - self.state.set_path(path.clone(), false); + if let Some(auto_splitter) = &*self.state.shared_state.auto_splitter.load() { + if ui.button("Restart").clicked() { + self.state.load(Load::Restart); } if ui.button("Kill").clicked() { - self.state.shared_state.kill_runtime(); + auto_splitter.interrupt_handle().interrupt(); } - } } }); ui.end_row(); @@ -329,7 +332,7 @@ impl egui_dock::TabViewer for TabViewer<'_> { dialog.open(); self.state.open_file_dialog = Some((dialog, false)); } - if self.state.shared_state.runtime.read().unwrap().is_some() { + if self.state.shared_state.auto_splitter.load().is_some() { if let Some(script_path) = &self.state.script_path { if ui.button("Reload").clicked() { self.state.set_script_path(script_path.clone()); @@ -340,7 +343,10 @@ impl egui_dock::TabViewer for TabViewer<'_> { ui.end_row(); ui.label("Optimize").on_hover_text("Whether to optimize the WASM file. Don't activate this when you want to step through the source code."); - ui.checkbox(&mut self.state.optimize, ""); + if ui.checkbox(&mut self.state.optimize, "").changed() { + self.state.runtime = build_runtime(self.state.optimize); + self.state.load(Load::Reload); + } ui.end_row(); { @@ -431,10 +437,10 @@ impl egui_dock::TabViewer for TabViewer<'_> { .get_appropriate_unit(byte_unit::UnitType::Binary) .to_string(), ); - if ui.button("Dump").clicked() { - if let Some(runtime) = self.state.shared_state.try_write_runtime() { - if let Some(runtime) = &*runtime { - let result = fs::write("memory_dump.bin", runtime.lock().memory()); + if let Some(auto_splitter) = &*self.state.shared_state.auto_splitter.load() { + if ui.button("Dump").clicked() { + if let Some(auto_splitter) = SharedState::try_lock(auto_splitter) { + let result = fs::write("memory_dump.bin", auto_splitter.memory()); if let Err(e) = result { self.state .timer @@ -444,15 +450,15 @@ impl egui_dock::TabViewer for TabViewer<'_> { .logs .push(format!("Failed to dump memory: {}", e).into()); } + } else { + self.state + .timer + .0 + .write() + .unwrap() + .logs + .push("Timed out waiting for auto splitter.".into()); } - } else { - self.state - .timer - .0 - .write() - .unwrap() - .logs - .push("Timed out waiting for auto splitter.".into()); } } }); @@ -516,7 +522,7 @@ impl egui_dock::TabViewer for TabViewer<'_> { }); } Tab::SettingsGUI => { - if let Some(runtime) = &*self.state.shared_state.runtime.read().unwrap() { + if let Some(runtime) = &*self.state.shared_state.auto_splitter.load() { let mut spacing = 0.0; for setting in runtime.settings_widgets().iter() { ui.horizontal(|ui| match setting.kind { @@ -610,18 +616,17 @@ impl egui_dock::TabViewer for TabViewer<'_> { let settings_map = self .state .shared_state - .runtime - .read() - .unwrap() + .auto_splitter + .load() .as_ref() - .map(|r| r.settings_map().clone()); + .map(|r| r.settings_map()); if let Some(settings_map) = &settings_map { - render_settings_map(ui, settings_map, 0); + render_settings_map(ui, settings_map, format_args!("map")); ui.add_space(10.0); if ui.button("Clear").clicked() { - if let Some(runtime) = &*self.state.shared_state.runtime.read().unwrap() { + if let Some(runtime) = &*self.state.shared_state.auto_splitter.load() { runtime.set_settings_map(settings::Map::new()); } } @@ -717,8 +722,8 @@ impl egui_dock::TabViewer for TabViewer<'_> { } } -fn render_settings_map(ui: &mut egui::Ui, settings_map: &settings::Map, level: usize) { - Grid::new(format!("settings_map_grid_{level}")) +fn render_settings_map(ui: &mut egui::Ui, settings_map: &settings::Map, path: fmt::Arguments<'_>) { + Grid::new(format!("settings_{path}")) .num_columns(2) .spacing([40.0, 4.0]) .striped(true) @@ -729,31 +734,35 @@ fn render_settings_map(ui: &mut egui::Ui, settings_map: &settings::Map, level: u for (key, value) in settings_map.iter() { ui.label(key); - render_value(value, ui, level); + render_value(value, ui, format_args!("{path}.{key}")); ui.end_row(); } }); } -fn render_settings_list(ui: &mut egui::Ui, settings_list: &settings::List, level: usize) { - Grid::new(format!("settings_list_grid_{level}")) +fn render_settings_list( + ui: &mut egui::Ui, + settings_list: &settings::List, + path: fmt::Arguments<'_>, +) { + Grid::new(format!("settings_{path}")) .num_columns(1) .spacing([40.0, 4.0]) .striped(true) .show(ui, |ui| { - for value in settings_list.iter() { - render_value(value, ui, level); + for (i, value) in settings_list.iter().enumerate() { + render_value(value, ui, format_args!("{path}[{i}]")); ui.end_row(); } }); } -fn render_value(value: &settings::Value, ui: &mut egui::Ui, level: usize) { +fn render_value(value: &settings::Value, ui: &mut egui::Ui, path: fmt::Arguments<'_>) { match value { - settings::Value::Map(v) => render_settings_map(ui, v, level + 1), - settings::Value::List(v) => render_settings_list(ui, v, level + 1), + settings::Value::Map(v) => render_settings_map(ui, v, path), + settings::Value::List(v) => render_settings_list(ui, v, path), settings::Value::Bool(v) => { - ui.label(if *v { "true" } else { "false " }); + ui.label(if *v { "true" } else { "false" }); } settings::Value::I64(v) => { ui.label(v.to_string()); @@ -778,7 +787,7 @@ impl App for Debugger { if fs::metadata(path).ok().and_then(|m| m.modified().ok()) > self.state.module_modified_time { - self.state.set_path(path.clone(), false); + self.state.load(Load::Reload); } } if let Some(script_path) = &self.state.script_path { @@ -795,7 +804,7 @@ impl App for Debugger { if dialog.show(ctx).selected() { if let Some(file) = dialog.path().map(ToOwned::to_owned) { if *is_wasm { - self.state.set_path(file, true); + self.state.load(Load::File(file)); } else { self.state.set_script_path(file); } @@ -814,30 +823,36 @@ impl App for Debugger { } } -impl AppState { - fn set_path(&mut self, file: PathBuf, clear: bool) { - let is_reload = Some(file.as_path()) == self.path.as_deref(); - self.module = fs::read(&file).unwrap_or_default(); - self.module_modified_time = fs::metadata(&file).ok().and_then(|m| m.modified().ok()); - self.path = Some(file); - let mut succeeded = true; +enum Load { + File(PathBuf), + Reload, + Restart, +} - let settings_map = if !clear { +impl AppState { + fn load(&mut self, load: Load) { + let settings_map = if let Load::File(path) = &load { + self.path = Some(path.clone()); + None + } else { self.shared_state - .runtime - .read() - .unwrap() + .auto_splitter + .load() .as_ref() .map(|r| r.settings_map()) - } else { - None }; - let config = self.build_runtime_config(settings_map); + let mut succeeded = true; - *self.shared_state.prepare_to_replace_runtime() = - match Runtime::new(&self.module, self.timer.clone(), config) { - Ok(r) => Some(r), + if let (Load::File(_) | Load::Reload, Some(path)) = (&load, &self.path) { + self.module = match fs::read(path) + .context("Failed loading the auto splitter from the file system.") + .and_then(|data| { + self.runtime + .compile(&data) + .context("Failed loading the auto splitter.") + }) { + Ok(module) => Some(module), Err(e) => { succeeded = false; self.timer @@ -845,10 +860,41 @@ impl AppState { .write() .unwrap() .logs - .push(format!("Failed loading the WASM file: {e:?}").into()); + .push(format!("{e:?}").into()); None } }; + self.module_modified_time = fs::metadata(path).ok().and_then(|m| m.modified().ok()); + } + + let new_auto_splitter = if let Some(module) = &self.module { + match module + .instantiate( + self.timer.clone(), + settings_map, + self.script_path.as_deref(), + ) + .context("Failed starting the auto splitter.") + { + Ok(r) => Some(Arc::new(r)), + Err(e) => { + succeeded = false; + self.timer + .0 + .write() + .unwrap() + .logs + .push(format!("{e:?}").into()); + None + } + } + } else { + None + }; + + self.shared_state.kill_auto_splitter_if_it_doesnt_react(); + self.shared_state.auto_splitter.store(new_auto_splitter); + *self.shared_state.slowest_tick.lock().unwrap() = std::time::Duration::ZERO; self.shared_state .avg_tick_secs @@ -856,31 +902,23 @@ impl AppState { self.shared_state.tick_times.lock().unwrap().clear(); let mut timer = self.timer.0.write().unwrap(); - if clear { + if let Load::File(_) = &load { timer.clear(); } timer.variables.clear(); + if succeeded { timer.logs.push( - if is_reload { - "Auto Splitter reloaded." - } else { - "Auto Splitter loaded." + match load { + Load::File(_) => "Auto splitter loaded.", + Load::Reload => "Auto splitter reloaded.", + Load::Restart => "Auto splitter restarted.", } .into(), ); } } - fn build_runtime_config(&self, settings_map: Option) -> Config<'_> { - let mut config = Config::default(); - config.settings_map = settings_map; - config.interpreter_script_path = self.script_path.as_deref(); - config.debug_info = true; - config.optimize = self.optimize; - config - } - fn set_script_path(&mut self, file: PathBuf) { let is_reload = Some(file.as_path()) == self.script_path.as_deref(); self.script_modified_time = fs::metadata(&file).ok().and_then(|m| m.modified().ok()); @@ -893,12 +931,17 @@ impl AppState { } .into(), ); - if let Some(path) = self.path.clone() { - self.set_path(path, false); - } + self.load(Load::Restart); } } +fn build_runtime(optimize: bool) -> Runtime { + let mut config = Config::default(); + config.debug_info = true; + config.optimize = optimize; + Runtime::new(config).unwrap() +} + const SECONDS_PER_MINUTE: u64 = 60; const SECONDS_PER_HOUR: u64 = 60 * SECONDS_PER_MINUTE;